<< Hyper-V R2 | main | Hyper-V R2 on FreeBSD8.1 その2 >>

2010/09/16 木

Hyper-V R2 on FreeBSD8.1

体調が悪く、仕事が終わって帰ったら睡魔に襲われ爆睡。
起きたらこんな時間。さてどうしよう。
ということで、Hyper-V R2 on FreeBSD8.1のまとめでも書こうと思う。
相変わらずcalcruに悩まされた
calcruが出る問題だが、これはFreeBSD4や6においても出ていた。
しかしFreeBSD6では、完全にcalcruが出ない状態で運用できていた。
ところが、FreeBSD8.1で同じ設定をするも、FreeBSD8.1ではcalcruが出てしまうのだ。
(ちなみに、以下の設定をしないと、普通にcalcruが頻発してウザイ、時計の進み具合も微妙なかんじ)

行った設定
/etc/sysctl.conf
kern.timecounter.hardware=TSC
machdep.tsc_freq=自分のマシンのTSC実測値

/boot/loader.conf
kern.hz="100"

設定をしてからcalcruが出る規則を見ると解ることは、
ps, topなどのコマンドをたたくと、calcru発生。これをしなければ出ない。
しかし、最初に1回calcruが出ても、その後は全く出ない。
といった感じ。(buildworldしようが、負荷をかけようがでない)
もう一つの規則性は、rc, rc.d経由で起動されたプログラムがcalcru backwardsを吐く。
コンソールログインして、普通に起動したプログラムは吐かない。
さらに気づいた点は、
kern.timecounter.hardware=TSC
のみ設定し、
machdep.tsc_freq=自分のマシンのTSC実測値
を設定しない場合は、calcruが全く発生しない。
また、カーネルが測定するTSCの値が物理マシンに近い場合、あとでmachdep.tsc_freqを設定してもcalcruが発生しないことがある。
(でも、machdep.tsc_freqをしないと、時計が爆速で進む)

ちなみに、カーネルのスケジューラを4BSDにしようが、SMPをOFFにしようが現象は変わらず。

よって、
/etc/sysctl.conf
kern.timecounter.hardware=TSC
machdep.tsc_freq=自分のマシンのTSC実測値

/boot/loader.conf
kern.hz="100

を設定して、運用に移ることとした。calcruが頻発するなら悩むが、
rc, rc.d経由で起動されたものが、最初の1回だけcalcruを吐くだけなので。
これはある意味仕方ないのかもしれない。カーネルが報告したTSCの値を使わず、カーネルが使おうとしたタイムカウンターを変えているのだから。

正直、FreeBSD6.4でなんの不自由もないので、そのまま使いたかったが、
FreeBSD6のEOLも近づいているので、アップグレードせざるをえなかった。
SMPでの処理向上やZFSなど恩恵も多いが、仮想環境で使う事も、開発チームには、もう少し考慮してもらえると嬉しい。(フリーのOSですから文句はないです)
Hyper-Vに限らず、VMWareでも同じことが起きていると思う。

まぁ、不安定になるわけでも落ちるわけでもないので、時計の補正だけして
使えば良いという結論。 とりあえず今の所問題なし。
calcruが頻発するようであれば、また考えよう

Trackback URL