- - PR -
ジッターによる性能評価
ジッターとは
リアルタイム処理において、レイテンシのばらつきを示す「ジッター」は、性能を評価するための1つの指標である。ジッターは、下図のように一定間隔で割り込みを発生させて、割り込み処理を開始する間隔を収集することで分析できる。
![]() |
| 図5 割り込みとジッター |
今回の評価では、PC/AT互換機に標準的に搭載されているRTC(Real Time Clock)で、周期的に割り込みを発生させてジッターを測定する。LKML(Linux Kernel Mailing List)でIngo Molnar氏が紹介しているrtc_wakeup(http://www.affenbande.org/~tapas/wiki/index.php?rtc_wakeup)と呼ばれるツールを用いた手法である(http://www.ussg.iu.edu/hypermail/linux/kernel/0411.3/0043.html)。
upstreamカーネル(Linux標準カーネル)においてrtc_wakeupを実行した際の流れを下図に示す。
![]() |
| 図6 rtc_wakeupを用いたジッターの測定 |
rtc_wakeupは、RTCが周期的に割り込みを起こすように設定した後、/dev/rtcに対してreadシステムコールを発行する。割り込みが発生するとreadシステムコールが復帰するので、そのときの時刻を計測する。これらのデータから、前回時刻との差分を計算することで処理間隔を求め、ばらつきをジッターとして評価する。
評価環境
今回の評価に利用したハードウェアとシステムの構成は以下のとおり。
| CPU: | Pentium M 866MHz | |
| ・400MHzに固定して使用 ・BogoMips:約798(編注) |
||
| メモリ: | 360Mbytes |
| 編注:BogoMipsについては、BogoMips mini-Howto(http://www.linux.or.jp/JF/JFdocs/BogoMips/)を参照 |
|
評価では、組み込み用途のCPU性能を考慮して、極力CPUクロックを落とすこととした。
測定方法
今回の測定では、RTCにより1/1024秒間隔で割り込みを発生させ、これを処理する関数が呼び出されたところでTSC(Time Stamp Counter)を読み取った。この測定値から割り込みを処理する関数が呼び出される間隔を算出し、X軸をサンプル数、Y軸を間隔としてグラフ化した。
さらに、それぞれの測定ではシステム負荷による変化にも着目した。システムに負荷を与える手段としては、hackbench(http://developer.osdl.org/craiger/hackbench/)を用いた。hackbenchは、OSDLが提供している性能測定用のツールで、主にLinuxカーネルのスケーラビリティを評価するのに利用されている。シェルから、
# hackbench 50 |
と実行すると、計2000個のプロセスが生成されて、パイプを用いたI/O処理を頻繁に行う。
グラフでは、hackbench実行中および非実行中に測定した2種類のデータを重ね合わせている。
upstreamカーネルでの測定結果
upstreamカーネルでrtc_wakeupを用いた測定の結果が下のグラフである。
![]() |
| グラフ1 upstreamカーネルでの測定結果 |
1/1024秒、すなわち約977μs(マイクロ秒)間隔で割り込みを処理するのだが、全体的にジッターが発生している。hackbenchでシステム負荷を加えるとジッターは増大し、特異的に大きなジッターが一定間隔で発生している。発生間隔はほぼ5000サンプル、すなわち5秒ごとであり、bdflushによるダーティページの書き出し処理によるものと推察される。
RTLinux/GPLでの測定結果
RTLinux/GPLでの測定では、PSCを用いてRTCの割り込み処理用に登録したシグナルハンドラ時刻計測を行った。その結果が下のグラフである。
![]() |
| グラフ2 RTLinux/GPLでの測定結果 |
upstreamカーネルに対して、ジッターは大きく軽減されている。さらに特異的なジッターも観測されなかった。
RTAIでの測定結果
RTAIでの測定では、USIを用いてRTCの割り込みに呼び出されるユーザースレッドで時刻計測を行った。その結果が下のグラフである。
![]() |
| グラフ3 RTAIでの測定結果 |
RTLinux/GPLよりも、さらにジッターが改善されている。
最後に、上記3測定から算出した数値を下表にまとめる。
|
hackbench
|
最小
|
最大
|
平均
|
分散
|
標準偏差
|
|
| upstream |
なし
|
154.471
|
1679.369
|
976.597
|
436.771
|
20.899
|
|
あり
|
327.594
|
3176.607
|
976.793
|
992.637
|
31.506
|
|
| RTLinux |
なし
|
966.560
|
986.614
|
976.582
|
0.054
|
0.233
|
|
あり
|
960.069
|
993.292
|
976.583
|
4.977
|
2.231
|
|
| RTAI |
なし
|
972.367
|
980.604
|
976.597
|
0.190
|
0.436
|
|
あり
|
966.107
|
987.352
|
976.597
|
2.161
|
1.470
|
| 表 各ベンチマークテストのまとめ(単位:マイクロ秒) |
グラフから視覚的に読み取れる情報が、分散、標準偏差といった値からも裏付けられている。
◆
次回は、最新upstreamカーネルにリアルタイム機能を追加するIngo Molnar氏のrealtime-preemptパッチ(第1回の「スタンドアロン方式」)について紹介し、同様に評価する予定だ。
関連記事 設計/開発技法
- 特集:Javaは組み込みに“不向き”は本当か?
- 連載:BREWアプリケーション開発入門(全10回)
- 連載:イチから作って丸ごと学ぶ! H8マイコン道(全12回)
- 連載:−ザ・組み込み−ソフトウェアのハードウェア化(連載中)
- 連載:組み込みLinux開発入門(全3回)
- 連載:T-Engineプログラミング入門(全4回)
- 連載:Symbian OS開発の勘所(全10回)
- 連載:Symbian OSアプリ開発の手引き(連載中)
- 連載:解説! ロボット開発環境Robotics Studio(全4回)
- 連載:Robotics Studio活用術 はじめて作るサービス(全5回)
- 連載:生産性向上への道 Eclipseで行うC/C++開発(全4回)
組み込み開発フォーラム 新着記事
- フルスクラッチの“Hello World”を動かしてみよう(2011/3/31)
- FlexRayプロトコルの概要(その2)(2011/3/29)
- JASA、東北地域に拠点を置く会員企業を支援(2011/3/25)
- NEC、震災の影響を受けた4拠点の生産再開を発表(2011/3/23)
- 内部ブロック図の基礎と共通要素(2011/3/22)
- インテル、被災地におけるITインフラの復旧を支援(2011/3/22)
- Facts on AUTOSAR/AUTOSAR導入の現実(2011/3/18)
- 計測器・震災被害ホットラインを開設、テクトロニクス(2011/3/18)
- ZMP、地震の揺れを多角的に計測するアプリ無償配布(2011/3/16)
- メンター、3Dテレビ・マルチメディア検証プラットフォーム(2011/3/16)
- 【番外編】タチの良い計測値、悪い計測値とは?(2011/3/15)
- tarファイルシステムをAndroidに組み込む!!(2011/3/10)














