這幾天我家的機器也突然跑的飛快, 每分鐘會快上 6 秒 (10%), 但是在 CMOS 中的時間是正常的. 就只是 linux 裡頭的時間跑的很快.
機器上頭原本用的 ntpd 看起來並沒有作用的樣子 (時間差太多?), 似乎只有開始啟動 ntpd 時會對時一次, 之後就沒作用的樣子.
昨天發現時, 已經快了半天了, 依時間推算, 應該是這幾天才發生的問題, 不過, 這幾天似乎沒改什麼設定.
試了好幾個方式, 也把 kernel 換回舊的版本, 都無法解決, 後來就用 ntpdate 每兩分鐘對時一次才讓時間不會跑太快... 不過, 沒多久就發現 dovecot 會因為這個原因就自殺了.
網頁上頭建議的 ntpd 沒效果, 把 clockspeed 抓下來, 在 x86-64 上頭又編不過. 網路上頭 google 到的都是在 vm 裡頭變慢的, kernel 加上 clock 或 clocksource 參數也沒作用.
弄了一天, 最後看了這篇
http://tldp.org/HOWTO/Clock-3.html 的說明, 提到時間有關的那幾個軟體, 發現我的機器上頭有裝 adjtimex 程式, 結果 hwclock, adjtimex 弄來弄去, 發現反而變成每分鐘慢 2 秒. 看來似乎與 adjtimex 有關.
研究一下 adjtimex 的說明, 重新跑了 adjtimexconfig 之後, 發現時間又變快了. 似乎 adjtimexconfig 計算出來的 tick 與 freq 是有問題的. 我直接改 /etc/default/adjtimex 的設定, 把 tick 改到預設的 10000 之後, 時間似乎就很接近了. 後來直接把 adjtimex 移除, 結果 ntpd 似乎就有在運作了, 跑了一個小時, 時間看起來還是對的.
如果你有裝 adjtimex, 試著移除看看, 如果沒裝, 那就裝上去, 試著改 tick 與 freq 的參數看看.
依據 adjtimex manpage 的說明, tick 每增加一, 時間每天會變快 8.64 秒, tick 每減一, 每天會變慢 8.64 秒.
如果依據 tick 的調整之後, 仍有小差異的話, 再利用 (1<<16)*s/.0864 (s 是經 tick 調整後, 每天差異的秒數), 計算出 freq 的數值出來. 這樣子就可以讓 kernel 的時間維持在很正確的情形下.
不過... adjtimex 在我這裝了也很久了, 一直都沒問題, 也不知道為什麼這幾天就有問題. 最後是移除 adjtimex 才讓 ntpd 有作用.