LinuxによるRTOSの実現

LinuxによるRTOSの実現(2)

マイクロカーネル方式とリアルタイム性能

近藤 純司 富士通プライムソフトテクノロジ 2005/4/12

- 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/)を参照

 
システム名 バージョン  ベースカーネル
upstream 2.6.11.5 同左
RTLinux/GPL 3.2-rc1 2.4.27
RTAI 3.2-test2 2.6.8.1
注:ディストリビューションは、Debian GNU/Linux 3.1(Sarge)

 評価では、組み込み用途の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回の「スタンドアロン方式」)について紹介し、同様に評価する予定だ。

スキルアップ/キャリアアップ(JOB@IT)

スポンサーからのお知らせ

- PR -
@IT Sepcial

震災関連・復興支援情報

震災関連・復興支援情報
@IT MONOist/EE Times Japan/環境メディアの製造業技術者向け3メディアを中心に、震災関連/復興支援情報を集めました

次世代エンベデッドコーナー

次世代エンベデッド
“次世代”の組み込み機器を開発するエンジニアを支援するコーナー。新潮流・新技術をインタビューやコラム、解説記事で分かりやすく紹介!

Windows Embeddedコーナー

Windows Embedded
Windows Embedded専門コーナー。Windows Embedded StandardやWindows Embedded CEをはじめとする「Windows Embedded」ファミリの最新動向や技術情報をお届けします!!

Androidコーナー

Android
Android専門コーナー。組み込みデバイスへの適用からアプリケーション開発、イベントレポート、ニュースなどAndroidに関するさまざまな技術情報がここに集結!!

@IT MONOist 求人情報

- PR -