2007年3月27日 星期二

[FreeBSD] 機器的時間有問題

這種現在大部分是因為機器內有多個時鐘,而 FreeBSD 選錯時鐘囉!

執行 dmesg(8),檢查一下有 Timecounter 字串的那幾行。最後一行是FreeBSD 選用的,通常是 TSC。

# dmesg | grep Timecounter
Timecounter "i8254" frequency 1193182 Hz quality 0
Timecounter "ACPI-safe" frequency 3579545 Hz quality 1000
Timecounter "TSC" frequency 350796127 Hz quality 800
Timecounters tick every 1.000 msec


可以執行 sysctl(3) 看一下 kern.timecounter.hardware 這個值做確認。

# sysctl kern.timecounter.hardware
kern.timecounter.hardware: ACPI-safe

BIOS 可能在一些情形下會更改 TSC 的時脈--有時候是因為在使用電池工作時會更改處理器的速度,另外也有可能是進入了省電模 式,可是 FreeBSD 並不會察覺到這些調整,而會發生時間增加或是減少的情形。

在上面的例子當中,我們看到還有 TSC 這個時鐘可以選擇,執行 sysctl(3) 用手動的方式將這個值寫入 kern.timecounter.hardware 中。

 # sysctl -w kern.timecounter.hardware=TSC
    kern.timecounter.hardware: ACPI-safe -> TSC

這樣應該就可以保持正確的時間了。

如果要讓這個更改的動作再每次開機時自動執行,在 /etc/sysctl.conf 裏加入下面這行。

    kern.timecounter.hardware=TSC


沒有留言:

張貼留言