每次我啟動FreeBSD的時候,都會在dmesg中出現下面的錯誤:
ad1s1a: UDMA ICRC error reading fsbn 255 of 96-127 (ad1s1 bn 255; cn 0 tn 4 sn 3) retrying
呵呵,可不是只出現一行,而是出現一打。有時,在控制台上還會反復出現。這時怎麼回事?以前沒時間處理它,現在可要研究研究了。上網查查,基本上沒有什麼結果。看看man吧。man ata。ata是ATA/ATAPI控制器的驅動。它說ata總是嘗試使用控制器通道的最高速率來初始化。在我的機器上就是udma66。如果初始化失敗,它會把相應的通道降到PIO模式。這就是上面那個錯誤的原因。但是可以使用atacontrol來控制。使用atacontrol mode 0命令看看,我的IDE1果然工作在PIO4模式。我的BIOS告訴我,我的IDE1是udma33,使用atacontrol mode 0 1 udma33後,我的IDE1控制器,回到了udma33模式。但我不知道,pio4和udma33在FreeBSD上的速度到底有多達的差距。我寫了一個perl腳本來測算速度,腳本如下:
#!/usr/bin/perl
`rm Looking.rar`;
$t = time();
`cp /usr/Looking.rar .`;
$t = time() - $t;
print "$t\n";
Looking.rar這個文件有270M。我記錄下了兩種模式下運行該腳本的時間。
REBOOT後第一次運行的速度 多次運行後的速度
PIO4 57秒 29秒
UDMA33 27秒 11秒
這個速度上的差距真的是非常驚人。但我不知道如何強制ata在udma模式下運行,只好寫了一個腳本放到/usr/local/rc.d下,該腳本叫ata.sh,內容如下:
/sbin/atacontrol mode 0 1 udma33
/sbin/atacontrol mode 1 1 udma33
盡管那些錯誤在啟動的時候依然存在,但我的心裡感覺好多了。