時計が狂う
時計は、ntpd で合わせていますが、同期が安定しません。
time reset -0.517526 s
とか出まくりです。どうもおかしい…。
まずは、玄箱でやってた、adjtimex による tick の調整を試みました。
adjtimex -t 10000
の、10000 の部分を少しづつ変えながら、ntpdate で時刻同期サーバと時刻を合わせ、なるべくずれないように tick を調整していきます。
普通、「遅れがち」のであれば遅れがち、「進みがち」なのであれば進みがちというものだと思われますが、遅れたり、進んだりとわけのわからない動きをするため、tick 値が定まりません。
挙げ句の果てには、kernel ログに、
Losing too many ticks! TSC cannot be used as a timesource. Possible reasons for this are: You're running with Speedstep, You don't have DMA enabled for your hard disk (see hdparm), Incorrect TSC synchronization on an SMP system (see dmesg). Falling back to a sane timesource now.
てのまで出てきました。
これを手がかりに、ネットで情報を探して、kernel 2.6 の新しいやつだと、clock の供給元が、TSC になっているために時計が狂うハードウェアがあるとの話を見つけました。
そこで、kernel の boot のパラメータに、
clock=pmtmr
を追加してみましたが、まだ時計が安定しません。
ダメもとで、
clock=pit
もやったのですが、まだ安定しません。
さらにさがして、次の記述を見つけました。
同じように、clock=pmtmr を指定するように書いてあるように読めたのですが、気になる点が1つ。
カーネルコンパイルのオプションにて、
Power management options (ACPI, APM) ---> ACPI (Advanced Configuration and Power Interface) Support ---> Power Management Timer Support
というのがあります。Help を見ると、
So, if you see messages like 'Losing too many ticks!’ in the
kernel logs, and/or you are using this on a notebook which
does not yet have an HPET, you should say “Y" here.
とのこと。
このオプションを入れていなかったので、有効にしました。
同時に、新しいカーネルソース linux-2.6.11-gentoo-r9 が出ていたので、ついでにこちらでカーネルをコンパイル。
というところで、現在様子見なのですが、今のところは同期とれているようです。
# 一緒にカーネルソースまでかえちゃったので、直接要因がわからなくなってしまいましたが。