Hatena::ブログ(Diary)

big-eyed-hamsterの日記

2011-01-01

blog を移行します

http://www.t-oza.net/blog に移行します.データはこのまま,かなぁ.

今年も宜しくお願いします.

2010-05-29

ntp の jitter を測定してみた

前回の続き.

ntp コマンドと cron 用いて jitter の値を 1 分おきにサンプリングし、その最大値を測定した.

未修正カーネルの jitter dynticks カーネルの jitter
17.813 23.173

一番大事なのはこの値に関する考察なのだが、

  1. jitter の最大値に意味があるのか(ネットワークの遅延に影響されたりするのではないか)
  2. jitter の値の許容範囲は?
  3. jitter の計算方法がわかっていない

という知識不足な状態にあるのでとりあえずその辺りの調査から入ろうかと思う.

2010-05-11

ntp の jitter を測定したい!

カーネルVM探検隊で、Dynamic Ticks 有効時の ntp の jitter を測定するようにススメられた. 測定したいが、どうやって測定したものか.

  1. LKM を書いて、callout API 使ってその中で rdtsc ?
  2. タイマを使うなら別にユーザ空間でも良い? としたら、timer_create のハンドラ内でrdtsc ?
  3. ntp のコマンドか何かでとってこれる?

今、開発環境が仮想環境しかないのが致命的な気がする. 何か良い方法ないかなぁ.

要調査. 続くかも.

2010-03-20

FreeBSD版 dynamic ticks のプロトタイプ版が動き始めました

FreeBSD 版 dynamic ticks の実装ですが、デバイスドライバと callout queue 走査のコードが密結合した prototype 版が動き始めました. これを、VMware Fusion 上で動作させて CPU 使用率の差を見てみます. タイマ割り込み間隔が狭くなると、VMM は細かい間隔でゲストOSに対して割り込みを注入することになり、結果的にホストOSCPU時間をガシガシ利用しにいきます. 今回のようにタイマ割り込みの間隔を dynamic にすることで、ホストOSCPU 使用率は interval tick mode に比べて抑えられるはずです. これを検証するため、今回のような実験を行いました. なお、測定には top コマンドの Accumulative mode を用いました. 以下が結果です.

f:id:big-eyed-hamster:20100320053010p:image

タイマ割り込み間隔を 1000 HZ にしたときは、なかなか良い感じにdynamic ticksが効いてます!HZを1000に設定した場合、VMM(=VMware Fusion)は1秒間に1000回のタイマ割り込みをゲストOSに注入する必要があります. 今回の変更では、この間隔を必要になるまで遅延しているので、CPU使用率がかなり抑えられています. 一方、100HZのときはあまり効いていません. 微妙に CPU 使用率が抑えられていますが、誤差の範囲でしょう. これは、元々のtick間隔が長くなるためにするためだと考えられます. ちなみに、FreeBSD 上の top コマンドやネットワークはちゃんと動作しているので、カーネルが要求したタイマはちゃんと発火している模様です.


残りの懸念事項は以下の通りです :

  1. グローバル変数がたくさん!
  2. callout queue を走査するため、若干割り込みハンドラが長くなってしまうのがどういった影響を与えるのか
  3. dynamic tick mode と interval tick mode の switch を行っていない. date コマンド打って日時を確認している感じだと特に問題なさそうだが、真面目に検証する必要がある.
  4. デバイスドライバと callout queue が密結合している.
  5. 性能劣化は生じないか.
  6. Theo さんに教えてもらった論文の話(プロファイリング)をまだ考慮していない.
  7. polling しているドライバへの影響( koie さんに教えて頂きました. ありがとうございます!)

いい加減だとは言え、一応動いているし効果も出ているので、とりあえず Freebsd-hackers 辺りに投げてみようかな.

2010/03/30 追記 : Freebsd-hackers に投げてみました. hacker の皆様の返信待ちです. ドキドキ.

2010-03-15

AsiaBSDcon の Work-in-progress talk にて "First step for dynticks in FreeBSD" というタイトルで発表してきました

AsiaBSDcon の WIP( Work-in-progress ) talk のセッションで発表してきました. スライドは

First step for dynticks in FreeBSD

にあります.

内容としては、"Linux などに導入されている tickless 機構を FreeBSD に 入れてみたらどうか"という内容で、実際に callout queue を走査して次のタイマイベントをゲットするところまではできたよ、という発表をしました.

実は、最初(少なくとも AsiaBSDcon 初日、DevSummit の時)は WIP で発表するつもりなんて全くありませんでした. DevSummit あたりで、 FreeBSD の tickless 化についてちょっとだけお話できれば良いかなぁくらい. しかし、初日の DevSummit の中で Alexander Mortin さんが CPU の Power State の話をし始めたときがあったので、私がウザいくらい喰いついて(笑)、色々教えてもらいました. 具体的には、彼の使っている laptop PC では、Processor が C4 State に入る前に起きてしまうらしく、それ以上深く sleep できないとのこと. 需要はあるんだなぁということで、とりあえず tickless 化に不可欠な Callout queue の scan ルーチンを実装しました.

土曜日の時点で実装状況を id:syuu1228 さんに Skype で伝えたところ、WIP で発表したらどうかと提案が. せっかくなんで、当日WIPの申し込みをして、参戦しました!


WIP 自体は、いざ始まってみるとかなりガチな内容でビックリ!

お話をしていた方々も、 Alexander Mortin さんや OpenBSD の開発指揮をとっている Theo さんで、こんな中で発表していいのか...と結構ガクガクブルブルしていましたが、適当な英語で最後まで突っ走りました(笑

色々な方と懇親会でお声をかけて頂いて、割とやりたいことは伝わっていたみたいで、ホントよかった!あと、Theo さんと Dynticks について色々ご意見頂けました!後で教えて頂いたペーパー読まないとね. 次の目標は、15日以内に FreeBSDコミュニティプロトタイプパッチを投げることです. 頑張るぞっ!

最後に、焚きつけてくれたid:syuu1228 さんと、貴重な機会を与えてくださった @Hiroki_Sato さん、そしてお話を聞いてくれた全ての方に感謝です. ありがとうございました:D

Connection: close