rtカーネルのリアルタイム性能テスト(cyclictest)
「JACK Audio Connection Kitの音飛びについてと、その対処」で少し触れたのだが、デスクトップ用途に向けたカーネル設定を行うことで(処理性能を多少犠牲にして)ある程度のリアルタイム性能は得られるが、極限までリアルタイム性能を高める「リアルタイムカーネル」を使用することで「応答」時間に関しての保証がされ、オーディオなどの用途における実用レベルのリアルタイム性能が得られる。
このパッチはカーネルのかなり深い部分にまで手を加えているようで、パッチの当たる範囲も広く、サイズも大きい。まだ、パッチは依然として「実験的」な扱いなので、使用には注意が必要。
パッチの適用や設定、その他の話は別記事にして、ここではcyclictestというリアルタイム性能テストツールを使用したテストを扱う。
cyclictestを含む「rt-tests」の入手とビルド
ソース取得にgitを使用する。
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/tglx/rt-tests.git $ cd rt-tests/ $ make
実行
デスクトップ用途に調整したカーネル*1とrtパッチの適用されたカーネルとでそれぞれテストプログラムを実行し、結果を比べてみた。
事情により、X Window Systemのグラフィックドライバには「nv」ドライバを使用した。
見方のメモ
高精度のタイマーについて
まず、カーネルの設定によっては
$ sudo ./cyclictest -p 99 -t 5 -n WARNING: High resolution timers not available 1.11 0.84 0.52 1/164 20017 T: 0 (19961) P:99 I:1000 C: 100282 Min: 3 Act: 410 Avg: 508 Max: 1204 T: 1 (19962) P:98 I:1500 C: 66855 Min: 6 Act: 66 Avg: 512 Max: 1188 T: 2 (19963) P:97 I:2000 C: 50141 Min: 6 Act: 35 Avg: 513 Max: 1122 T: 3 (19964) P:96 I:2500 C: 40113 Min: 7 Act: 1003 Avg: 516 Max: 1165 T: 4 (19965) P:95 I:3000 C: 33427 Min: 9 Act: 967 Avg: 519 Max: 1274
のように、「High resolution timers not available」が出る(高精度のタイマーが使えていない)と平均値(Avg)も非常に高くなり、データとしても使えない。カーネルのHIGH_RES_TIMERSが無効に設定されているとこうなるが、
http://www.spinics.net/lists/linux-rt-users/msg01302.html
のように、有効でも使えないこともある。この例ではACPIを有効にしたところうまくいったようだ。
/sys/devices/system/clocksource/clocksource0/available_clocksourceの情報も役に立つかもしれない。
結果
非rtカーネルでは、「Max」の値がはじめは300以内(低いものは170ぐらい)で落ち着くのだが、しばらく放置していると、いつの間にか
0.42 0.53 0.54 1/135 31525 T: 0 (31138) P:99 I:1000 C: 500878 Min: 3 Act: 5 Avg: 6 Max: 4451 T: 1 (31139) P:98 I:1500 C: 333919 Min: 3 Act: 5 Avg: 5 Max: 4916 T: 2 (31140) P:97 I:2000 C: 250439 Min: 3 Act: 5 Avg: 5 Max: 5396 T: 3 (31141) P:96 I:2500 C: 200351 Min: 3 Act: 5 Avg: 5 Max: 5373 T: 4 (31142) P:95 I:3000 C: 166960 Min: 3 Act: 6 Avg: 5 Max: 3345
のように、極端に上がる。平均値は低くても、「たまに応答の遅いことが起きてしまう」ことが分かる。
rtカーネルでは、同様に放置しても、「突然高い数字が出る」ということはなかった。
1.62 1.67 1.44 1/158 9155 T: 0 ( 8301) P:99 I:1000 C:1521742 Min: 2 Act: 5 Avg: 5 Max: 178 T: 1 ( 8302) P:98 I:1500 C:1014495 Min: 2 Act: 5 Avg: 5 Max: 177 T: 2 ( 8303) P:97 I:2000 C: 760871 Min: 2 Act: 5 Avg: 5 Max: 167 T: 3 ( 8304) P:96 I:2500 C: 608697 Min: 2 Act: 5 Avg: 5 Max: 167 T: 4 ( 8305) P:95 I:3000 C: 507248 Min: 2 Act: 5 Avg: 5 Max: 175
長めに回してみたが、結果は上のようになり、「応答時間が保証されている」ことを裏付ける結果となった。
関連: latencyTOP
(2008/10/24)latencyTOP(http://www.latencytop.org/)というツールを用いると、システム上の処理の遅延の状況をより詳しく統計表示してくれる。Linux 2.6.25から利用可能で、Debian(lenny)/Ubuntu(Intrepidから)/Gentoo/Mandriva(2009.0で確認)など、ディストリのパッケージにも入ってきている。名前はいずれも「latencytop」。
左右(上下)キーでプロセス単位での情報表示(下半分)を切り替え、Qで終了する。情報はしばらく経過すると更新されていく。
関連URL:
関連記事:
- JACK Audio Connection Kitの音飛びについてと、その対処
- tuxonice-sourcesとrt(リアルタイム)パッチ
- rtパッチの当たったカーネルが他の独自パッチや外部カーネルモジュールに与える影響について
まとめドキュメント:
参考URL:
関連URL:
- http://opentechpress.jp/kernel/04/11/29/2122202.shtml - 難しい横文字が多く読みにくいが、リアルタイムカーネルの背景、オーディオ以外の用途などについての参考にはなる・情報は多少古い部分もある
- http://japan.internet.com/webtech/20060823/12.html - 2.6.22にはリアルタイム関連のパッチが統合されるという話ではあったが、2.6.24系の時点ではパッチは別になっている
使用したバージョン:
- tuxonice-sources 2.6.24-r2
- rtパッチ 2.6.24-rt1
*1:関連するカーネル設定の一部は「JACK Audio Connection Kitの音飛びについてと、その対処」に貼ってある
*2:99まで・-pで最大の値を指定
*3:優先順位ごとに複数同時実行され、-tで数を指定