FreeBSD版 dynamic ticks のプロトタイプ版が動き始めました
FreeBSD 版 dynamic ticks の実装ですが、デバイスドライバと callout queue 走査のコードが密結合した prototype 版が動き始めました. これを、VMware Fusion 上で動作させて CPU 使用率の差を見てみます. タイマ割り込み間隔が狭くなると、VMM は細かい間隔でゲストOSに対して割り込みを注入することになり、結果的にホストOSのCPU時間をガシガシ利用しにいきます. 今回のようにタイマ割り込みの間隔を dynamic にすることで、ホストOS の CPU 使用率は interval tick mode に比べて抑えられるはずです. これを検証するため、今回のような実験を行いました. なお、測定には top コマンドの Accumulative mode を用いました. 以下が結果です.
タイマ割り込み間隔を 1000 HZ にしたときは、なかなか良い感じにdynamic ticksが効いてます!HZを1000に設定した場合、VMM(=VMware Fusion)は1秒間に1000回のタイマ割り込みをゲストOSに注入する必要があります. 今回の変更では、この間隔を必要になるまで遅延しているので、CPU使用率がかなり抑えられています. 一方、100HZのときはあまり効いていません. 微妙に CPU 使用率が抑えられていますが、誤差の範囲でしょう. これは、元々のtick間隔が長くなるためにするためだと考えられます. ちなみに、FreeBSD 上の top コマンドやネットワークはちゃんと動作しているので、カーネルが要求したタイマはちゃんと発火している模様です.
残りの懸念事項は以下の通りです :
- グローバル変数がたくさん!
- callout queue を走査するため、若干割り込みハンドラが長くなってしまうのがどういった影響を与えるのか
- dynamic tick mode と interval tick mode の switch を行っていない. date コマンド打って日時を確認している感じだと特に問題なさそうだが、真面目に検証する必要がある.
- デバイスドライバと callout queue が密結合している.
- 性能劣化は生じないか.
- Theo さんに教えてもらった論文の話(プロファイリング)をまだ考慮していない.
- polling しているドライバへの影響( koie さんに教えて頂きました. ありがとうございます!)
いい加減だとは言え、一応動いているし効果も出ているので、とりあえず Freebsd-hackers 辺りに投げてみようかな.
2010/03/30 追記 : Freebsd-hackers に投げてみました. hacker の皆様の返信待ちです. ドキドキ.