<< 元旦 | main | リモコンアッテネーター >>

2007/01/09 火

VirtualServerのゲストOSにFreeBSD

VirtualServer2005R2のゲストOSにFreeBSDを入れてみたところ、時計が速く進むので萎えた。。。
googleで調べてみると、同じことで悩んでる人はいるが、これで解決という決めてにかけて、決着がつかなかった。
といわけで、私の備忘録としてやったことを列挙しておこう。

FreeBSD4.11
そのままでは、時計が2〜3割早く進む。ntpdateで合わせるとしても限界がある。
APMや、シリアル、パラレルは、カーネルで無効にしてある。

1発目の実験
/etc/sysctl.conf
kern.timecounter.hardware=i8254
これは効いた。でも、microuptime() went backwards が、ぽろぽろと発生する。
また、
microuptime() went backwards (949.141279 -> 253.763991)
といった感じで、結構なズレがある。

2発目の実験
/etc/sysctl.conf
kern.timecounter.hardware=i8254
kern.timecounter.method=1  <追加
これをしたら、
microuptime() went backwards (7437.847218 -> 7437.845208)
こんな感じで、微妙なズレになった。

3発目の実験
2発目でやった、sysctrlに加えて、カーネルコンフィグに以下を追加
options CLK_CALIBRATION_LOOP
options CLK_USE_TSC_CALIBRATION
options CLK_USE_I8254_CALIBRATION
options NTIMECOUNTER=20
なんか、microuptimeが出る頻度が下がった気がする。

最終的に1日動かして、1秒〜3秒程度のズレ(実機並)になったが、
dmesgには、microuptime, たまに、 calcruが出てウザイ。
根本解決になっていないけど、カーネルのメッセージを出す部分をコメントアウトしてしまった(汗
/usr/src/sys/kern/kern_resource.c と、kern_synch.c の2つがそれにあたる。

今のところ安定稼働しているが、ちょっと不安。

FreeBSD6.1でもためしたが、こちらもi8254にし、Kern.Hzを100にすれば安定した。ただし、calcruは多発するので、メッセージを殺すなりしたほうがいいかもしれない。