2022 年 11 月 07 日 Linux 技術ネタ
組込み Linux 開発において、以下のケースに直面することはよくあるのではないでしょうか ?
このような解析をサポートするために、Linux カーネルには ftrace というトレーサーが搭載されています。様々な情報を取り出せる反面、コマンドラインでの制御が必要なため、使用性が低く、結果ファイルがテキストであるため、可読性が悪いです。この欠点を補うために、OSS ツールとして、ftrace のユーザーインターフェース trace-cmd と結果ファイルをビジュアル表示する kernelshark が用意されています。
このブログエントリでは、組込み Linux からトレースログを取得し、kernelshark で表示する一連の流れと kernelshark の機能概要を紹介します。
本ブログは全 3 部構成となります。
第 1 回目は、kernelshark の概要とその使い方について解説します。
kernelshark は、ftrace のユーザーインターフェース trace-cmd のフロントエンドです。ftrace のビジュアライザと言えます。いつどのプロセスがどの CPU で実行されたか(コンテキストスイッチトレース)、いつどのイベントがどの CPU で実行されたか(イベントトレース)、いつどのカーネル関数がどの CPU で実行されたか(関数トレース)などをグラフィカルに表示できます。
kernelshark は、以下5つの UI から構成されます。
No. | UI | 概要 |
---|---|---|
1 | Menu | ファイルのロード、kernelshark 終了を行います。 |
2 | Graph Info Area | グラフ上でマウスポインタが指している位置のタイムスタンプと、その位置にあるイベントの情報を表示します。 |
3 | Graph Control Area | グラフの拡大、縮小、マーカーの設定、グラフの表示方法を設定します。 |
4 | Graph Window | イベントの発生が時系列でプロットされたグラフが表示されます。 |
5 | List Area | イベント情報が表示されます。 |
Graph Windowには、イベントの発生が時系列でプロットされたグラフが表示されます。
縦軸が表示項目です。CPU とタスクが対象です。後述の Plots メニューで表示する CPU とタスクを設定可能です。横軸は時間です。
グラフ上にマウスを置くと、マウスポインタが指している位置のタイムスタンプと、その位置にあるイベントの情報が GraphInfoArea に表示されます(マウスポインタがグラフ外にある場合は、最後に指していた位置の情報を表示)。
また、グラフ上のイベントを左ダブルクリックすると、そのイベントにマーカーが付きます。
さらに、グラフ上をドラッグして領域選択すると、その範囲を拡大表示できます。
GraphControlArea の以下ボタン操作でグラフを拡大縮小します。また、上述の通り、グラフ上をドラッグして領域選択すると、その範囲を拡大表示できます。
ボタン | 説明 |
---|---|
左に移動 | |
拡大 | |
縮小 | |
右に移動 | |
グラフを最大まで拡大 (Graph Window 上でのドラッグでも拡大可能) |
|
グラフを全体が映るまで縮小 |
GraphControlArea のボタンとマウス操作で 2 つの特定イベントにマーカーをつけ、その間の時間を計測することができます。例えば、A ⇒ B の順でマーカーをつけ、AB 間の時間を計測する手順は以下になります。
Marker A ボタンの上で左クリックします。緑色に変わります。
List Area の Graph followsにチェックを入れて、マーカーA をつけたいイベントログをクリックします。該当イベントが緑色で表示されます。また、Graph Window の対応箇所に緑色のカーソル線が表示されます。
Marker B ボタンの上で左クリックします。青緑色に変わります。
List Area でマーカー B をつけたいイベントログをクリックします。該当イベントが青緑色で表示されます。また、Graph Window の対応箇所に緑色のカーソル線が表示され、A,B Delta 欄にマーカー A, B 間の時間差が表示されます。
Plot メニューでグラフに表示する CPU とタスクを設定することができます。各設定は、組み合わせて使用することが可能です。
CPUs 画面でグラフ表示する CPU にのみチェックを入れ、Apply を押下します。
例えば、CPU0 のみにチェックを入れると、CPU0 のみが表示されます。List Area も連動します。
Tasks 画面でグラフ表示するタスクのみチェックを入れ、Apply を押下します。
例えば、3.8.1 の例の設定をした状態でidleタスクにチェックを入れると、CPU0 とidleタスクが表示されます。List Area も連動します。
Filter メニューでグラフに表示するイベントを設定することができます。各フィルタは、組み合わせて使用することが可能です。特定条件を指定してイベント抽出する Advanced Filtering 機能については、公式ドキュメントを参照ください。
Events 画面で表示するイベントにのみチェックを入れ、Apply を押下します。
Tasks 画面で表示するタスクに関するイベントにのみチェックを入れ、Apply を押下します。
例えば、<idle> のみにチェックを入れると、idle タスクで発生したイベントのみが表示されます。List Area も連動します。
CPUs 画面で表示する CPU に関するイベントにのみチェックを入れ、Apply を押下します。
例えば、CPU0 のみにチェックを入れると、CPU0 で発生したイベントのみが表示されます。List Area も連動します。
List Area ではイベントの確認、イベントとグラフの連動、イベントの検索を行うことができます。
イベント一覧からイベント情報を確認できます。
# | イベントの通し番号 |
---|---|
CPU | イベントが発生した CPU 番号 |
Time Stamp | イベントのタイムスタンプ |
Task | イベントが発生したときに実行されていたプロセスの名前 |
PID | イベントが発生したときに実行されていたタスクの PID |
Latency |
4 つのフィールドに分けられているが、カーネルバージョンによって異なる可能性があるので注意 詳しくは Latency trace format などを参照 |
第 1 フィールド
|
|
第 2 フィールド
|
|
第 3 フィールド
|
|
第 4 フィールド
|
|
Event | イベントの名前 |
Info | イベントに付随する情報
|
以下の検索ボックスを使用します。
指定の条件でイベントを検索できます。検索は以下の流れで実行します。
Graph follows のチェックを使用します。
Graph follows のチェックを入れている場合、List Area 上でイベントをクリックすると、アクティブなマーカーがそのイベントに移動します。さらに、Graph Window もその位置に追従します。 選択したイベントは、Graph Window に黄色い四角(小さいので少し見づらい)で表示されます。
第 2 回目は、kernelshark で表示するトレースログを ftrace で取得する手法について解説します。
2024 年 09 月 02 日 Vigiles サポート
2024 年 03 月 01 日 Vigiles サポート
2023 年 08 月 28 日 Vigiles サポート
2024 年 03 月 26 日 Yocto Project よもやま話
2023 年 07 月 25 日 Yocto Project よもやま話
2023 年 06 月 20 日 Yocto Project よもやま話
2024 年 01 月 10 日 Linux 技術ネタ
2023 年 12 月 12 日 Linux 技術ネタ
2023 年 03 月 31 日 Linux 技術ネタ
2024 年 07 月 26 日 イベントレポート
2024 年 07 月 09 日 イベントレポート
2024 年 06 月 03 日 イベントレポート
2023 年 05 月 30 日 リクルート
2022 年 12 月 27 日 リクルート
2022 年 09 月 27 日 リクルート
2024 年 09 月 25 日 信州リネオ便り
2024 年 08 月 20 日 信州リネオ便り
2024 年 08 月 07 日 信州リネオ便り
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 13 日 マーケティング統括部
2019 年 04 月 25 日 マーケティング統括部
2018 年 12 月 18 日 マーケティング統括部