試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

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」ドライバを使用した。

見方のメモ
  • 「P:」の数字部分は、リアルタイム優先順位*2を示す*3
  • 「C:」の後ろの数字は時間とともに増えていき、表示が更新されていく)
  • 「Act:」の後ろの数字は周期的に変化して表示が更新されていく
  • 「Max:」の値が小さいほど、リアルタイム性能は高い(応答時間が保証されている)と言える
高精度のタイマーについて

まず、カーネルの設定によっては

$ 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:

関連記事:

まとめドキュメント:

参考URL:

関連URL:

使用したバージョン:

  • tuxonice-sources 2.6.24-r2
  • rtパッチ 2.6.24-rt1

*1:関連するカーネル設定の一部は「JACK Audio Connection Kitの音飛びについてと、その対処」に貼ってある

*2:99まで・-pで最大の値を指定

*3:優先順位ごとに複数同時実行され、-tで数を指定