5 製品別サポート 5 DT10&DT-Storage 5 チュートリアル 5 応用編 5 DT10 使いこなし術 5 イベントID取得によるプロセス解析方法 5 「カーネル情報出力ポイント挿入」方式による設定方法

チュートリアル

「カーネル情報出力ポイント挿入」方式による設定方法

LinuxOS向けのターゲット機器で使用する場合の設定方法を説明します。

カーネル情報出力ポイントは、主にLinuxシステムでのOSから取得するプロセス情報を出力する特殊なテストポイントです。
カーネル情報出力ポイントでは、プロセスID値(PID)、スレッドID値(TID)、スレッド名(Cmd)を出力します。
但し、オプションUNITである「AnalogBox」でのデータ収集、高速テストポイント変換ができません。

1.サンプルドライバのダウンロード

対応OS 接続方式 言語 イベントID出力方式 ダウンロード
Linux GPIO 4bit C/C++ カーネル情報出力ポイント挿入 ダウンロード

カーネル情報の出力を行う為に、ドライバを修正する必要はありません。
ターゲット環境にドライバを実装してください。

2.DT10プロジェクト作成時の設定

使用するドライバのイベントID出力方式に合わせて、プロジェクト設定の「イベントID出力方式」を設定します。
「プロジェクト設定」ダイアログで、「カーネル情報出力ポイント挿入」を選択します。
この方式では、オプションUNITである「AnalogBox」でのデータ収集、高速テストポイント変換ができません。

3.カーネル情報出力ポイントの挿入

カーネル情報を出力する為の専用テストポイントをソースコードに挿入します。
カーネルl情報出力ポイントの挿入箇所は、LinuxKernel の context_switch 関数内に挿入することになります。
関数の場所は、各メーカのLinux毎に異なる場合がありますので注意してください。

例えば、Armadillo-440環境であれば、”Linux/Kernel/sched.c”に、RaspBerryPiでは”linux/Kernel/sched/core.c”となります。
context_switch関数内のswitch_toの直前にKernel情報出力ポイントを挿入します。

/* * context_switch - switch to the new MM and the new * thread's register state. */
static inline void context_switch(struct rq *rq, struct task_struct *prev,struct task_struct *next){

  (中略)
   context_tracking_task_switch(prev, next);
   /* Here we just switch the register state and the stack. */
   __DtTestPointKernelInfo( __DtFunc_context_switch, __DtStep_0, next );  ←ここに挿入
   switch_to(prev, next, prev);

<カーネル情報出力ポイントの挿入方法>

DT10アプリのソースコードウィンドウ上からカーネル情報出力ポイントを挿入します。

  • ソースコードウィンドウ上で、conext_switch関数の挿入したい位置で右クリック。
  • ポップアップメニューから「カーネル情報出力ポイントの挿入」を選択。
  • 以下のダイアログで、各情報を格納している構造体を入力。
  • 構造体を設定して、[OK]をクリックすると、カーネル情報出力ポイントが挿入されます。

kernel-insert-2

4.データ取得

カーネル情報出力ポイントが挿入されたソースコードをコンパイルし、ターゲットを動作させて、DT10でテストレポートを取得します。
カーネル情報出力ポイントによりトレースされたデータは、テストレポート上で、「ステップ」欄に「## Kernelnfo」と表示されます。
イベント番号は、「イベントID」欄に表示されます。

また、KernelInfoステップのデータに続いて、「関数」欄に「***** Dump memory *****」と表示されるデータは、
変数として出力されたTID、PID、Cmd のデータです。
カーネル情報出力ポイント通過以降のレポートデータは、次のカーネル情報出力ポイント取得まで、同じイベントID が割り振られます。

5.解析方法

5-1.イベント定義の設定

イベント定義設定は、テストレポートの「イベント定義」欄や、イベントトレース、プロセス占有率スコープ、
関数遷移スコープといった機能に反映され、イベント遷移の解析をより分かりやすくします。
「カーネル情報出力ポイント挿入」の場合は、取得したプロセス名をレポート解析時に、イベント定義に自動登録します。

以下の手順で表示されるダイアログから設定します。

  • DT10アプリのメニュー > レポート解析 > イベントトレース > イベント定義 > イベント定義の設定

5-2.プロセス解析モードの有効化

この設定を有効にすることで、コアやイベントID毎に解析結果を表示できるようになります。

  • DT10アプリのメニュー > ツール > 環境設定を選択。
  • 「環境設定」ダイアログで、解析を選択。
  • 「プロセス解析モードを有効にする」をチェックON。

5-3.関数遷移スコープでのデータ解析

以下の手順で、解析結果が表示されます。

  • DT10アプリのメニュー > レポート解析 > 関数遷移スコープ

横軸が時間軸で、上部には各コアの動作区間を示すグラフ表示、
その下の縦軸には、プロセス > スレッド > 関数名 のツリーが表示され、
コア、プロセス、スレッド単位から関数単位までの状態遷移を確認することができ、

マクロ視点からミクロ視点まで、多角的に「見える化」することで、ソフトの動きを把握しやすくします。

さらに関数遷移スコープのグラフ上をダブルクリックすることでテストレポートの該当位置にジャンプしたり、
2つのカーソルで時間情報の確認もできます。

マルチコア解析のための設定については、こちらを参考にしてください。
→ チュートリアル 応用編 DT10使いこなし術「マルチコア解析方法」

eventID-insert-p5

5-4.プロセス占有率スコープでのデータ解析

  • DT10アプリのメニュー > レポート解析 > イベントトレース > プロセス占有率スコープ
  • 「解析範囲指定」ダイアログで、解析範囲を指定して、「OK」をクリック。

横軸が時間軸で、各プロセスの占有率を折れ線グラフで表示します。
また、移動させたカーソル部分のタイミングにおける占有時間、占有率、最大・最小時間をリスト表示します。

負荷の高いプロセスを一目で確認できます。

関数遷移スコープと同様に、グラフ上をダブルクリックすることでテストレポートの該当位置にジャンプができます。