チュートリアル
マルチコア解析方法
課題
マルチコア情報をテストレポートに付随させて、各コア毎に動作の解析をしたい。
解決方法
DT10のマルチコア解析機能を使います。
なお、通常は4コア、ファイル書き出しの場合は32コアまで対応可能です。
効果
DT10での解析結果に、コアの情報が考慮されるようになります。
関数遷移スコープが複数コア表示になるほか、テストレポートフィルタとレポートデータトリミング機能を活用する事で
コア別のレポートを解析する事なども可能です。
ドライバのカスタム方法
1. サンプルドライバのダウンロード
対応OS | 接続方式 | 言語 | イベントID出力方式 | ダウンロード |
---|---|---|---|---|
Linux | GPIO 4bit | C/C++ | カーネル情報出力 | ダウンロード |
Linux | ファイル書き出し | C/C++ | カーネル情報出力 | ダウンロード |
2. #defineの設定
以下のdefineを有効にする事でCPUの判別処理が有効になります。
/*==========================================================*/
/* Macro: DT_ADD_CPU_INFO */
/* Desc: Please set 1 when you add CPU ID to Test Point. */
/*==========================================================*/
#define DT_ADD_CPU_INFO
3. コア情報取得APIの定義
通常の出力の場合は下記のように”smp_processor_id()”のようにコア情報を取得するAPIを使用し、addrの19,18bit目に割り当てます。
/*------------------------------------------------------------------------------*/
/* Desc: Header for Port Controll */
/*------------------------------------------------------------------------------*/
#include "Common.h"
ファイル書き出し(18Byteファイルフォーマット)の場合も、同様にコア情報を取得するAPI等を使用してコア情報を取得し、
ファイルフォーマットに従って記録します。
/*=================================================================*/
/* Func: _TP_BusOutDrv */
/* Desc: Called by Test Point */
/*=================================================================*/
static inline void _TP_BusOutDrv(DT_UINT addr, DT_UINT dat)
{
struct timespec now;
#if DT_ADD_CPU_INFO
cpu_id = smp_processor_id();
#endif
getnstimeofday(&now);
4. アプリ設定
マルチコア判別を行う場合、以下の設定が必要になります。
通常の場合は、テストレポート収集条件設定「コア情報を収集する」にチェックし、ログを取得します。
ファイル書き出しの場合は、テストレポートのインポート時に「ターゲットCPU:マルチコア」のチェックを有効にして変換してください。
5. テストレポート
テストレポート上の「コア」の欄に、コア番号が表示されます。
6. 関数遷移スコープでのデータ解析
以下の手順で、解析結果が表示されます。
・DT10アプリのメニュー > レポート解析 > 関数遷移スコープ
横軸が時間軸で、上部には各コアの動作区間を示すグラフ表示、その下の縦軸には、プロセス > スレッド > 関数名 のツリーが
表示され、コア、プロセス、スレッド単位から関数単位までの状態遷移を確認することができます。
各スレッド及び関数の実行区間は、全てのコアを統合した表示とし、コア毎にバーの色が変わります。