VMWare上の時刻(その2)
http://d.hatena.ne.jp/kori_hatonosuke/20070325/1174825753:前回の続き。
結局、FreeBSDのman clockを見ると時計にいくつか種類があるが、これをACPI-fastから変更するとなぜズレが少なくなるのかよく分からない。
ウェブ上で情報を探したところ、以下のページに情報があった。
- http://webos-goodies.jp/archives/50179807.html
- http://kb.vmware.com/vmtnkb/search.do?cmd=displayKC&docType=kc&externalId=1420&sliceId=SAL_Public
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になったらしい。