VMWare上の時刻(その2)

http://d.hatena.ne.jp/kori_hatonosuke/20070325/1174825753:前回の続き。
結局、FreeBSDのman clockを見ると時計にいくつか種類があるが、これをACPI-fastから変更するとなぜズレが少なくなるのかよく分からない。

ウェブ上で情報を探したところ、以下のページに情報があった。

Linuxの場合、時刻を合わせる割り込みが秒間1000回あるが、仮想マシンでは多すぎて処理できないため、時刻がずれるらしい。現状のFreeBSD6系でも秒間1000回に割り込みになっているようだ。
FreeBSDの実装の本によると時刻を合わせるための割り込みは秒間100回*1あって、時間を合わせる処理は割り込みの間隔(1/100)よりも少ない時間で処理を行う必要があるらしい。おそらくは仮想マシンでは1/1000秒よりも少ない時間で処理ができないのではないかと想像できる。

そのため、loader.confに以下の内容を記述して、時間を進める割り込みの回数をデフォルトの秒間1000回から100回に変更した。

kern.hz=100

この設定で1日放置したところ、時刻のズレは数秒だった。尚タイマーはACPI-fastのままである。

*1:5系の頃の本のため、6系から1000Hzになったらしい。