KernelSharkを使用した周期的計画間隔の測定


イベント処理中に説明されていない遅延はRealTime Linuxの最大の問題の1つである.
RT Kernelコンテキストでの遅延(Latency).これは、あるイベントが発生したときにそのイベントが「処理」されたときの間隔を意味します.
これを計測するツールにはcyclictestというプログラムがあり,このプログラムによりRT OSの「RT」が正しく保障されているかを検証することができる.
cyclictestは、タイマを継続的に実行するtaskからなる.この場合、タイマを調整し、イベント遅延(すなわち、スケジューリング遅延)でタイマが直接動作する時間間隔を測定することができる.
次にkernelshakを用いてカーネルのスケジューリング遅延を直接測定し,tracecmdカーネルを用いて測定した遅延が正しいかどうかを調べた.

KernelShark 1.0インストール


(https://kernelshark.org:KernelShark 1.0を選択)
sudo apt-get install build-essential git cmake libjson-c-dev -y
sudo apt-get install freeglut3-dev libxmu-dev libxi-dev -y
sudo apt-get install qtbase5-dev -y
sudo apt-get install graphviz doxygen-gui -y
make install
make install_gui
KernelShark 1.0の画面

Delta計算


グラフィックトラッキングチェック

タグAの選択>必要なイベントの選択


タグBの選択>必要なイベントの選択


タグAとタグBのDelta値が表示されます.(0.106 microsecond)

Event Filtering


左上のFilter>Advance Filtering

sched wakeupのcomm=="cyclictest"(pid=17348)、フィルタオプションの追加>Apply

フィルタオプションを追加してsched switchのnext comm="cyclictest"(pid=17348)>のみで適用

cyclictest:17348プロセスは、起動からsched switchまでの時間を測定します.

次に、trace-cmdを使用して、測定した遅延が正しいかどうかを確認します.

Trace report


sched switchおよびsched wakeupイベントはフィルタされていません.
-wオプションでレポートを行い、遅延を測定します.

Wikiマニュアルを整理し、以下のようにします.
-Fオプションを使用してフィルタを追加し、-wオプションを使用してLatencyの平均値と最大最小値を測定します.
datファイルは読み取り不能であるため、txtファイルにコピーして保存する.
trace-cmd -F [필터] -w [dat 파일 저장 경로] > [txt 파일 저장 경로]
KernelSharkで測定したLatencyはこれと比較してほとんど差がなかった.

−wを追加して、平均遅延、最大最小遅延を決定することができる.