2023/9/26

2023/10/18

製品
DT+Trace, DT+FS
カテゴリー
How-to
タグ
ドライバファイル, パフォーマンス, レポート収集, 不具合解析, 経路解析, 設定
5 Q&A 5 マルチコア解析方法

マルチコア解析方法

DT+Traceでは、複数コアが動作する環境でもマルチコア情報をテストレポートに付随させて、各コアごとに動作の解析を行うことが可能です。こちらの機能を使用することで、関数遷移スコープが複数コア表示になるほか、テストレポートフィルタとレポートデータトリミング機能を活用する事でコアごとのレポート解析が可能になります。

また、マルチコアをターゲットとしてテストレポートを取得した場合、以下のようなコアに特化した機能を使用できます。

  • 1つのテストレポートでのコアの識別
  • コアを条件としたテストレポートフィルタ
  • 関数遷移スコープでのコアごとの遷移状態の確認

例えばこんな時・・・

  • コアごとの処理のパフォーマンスをまとめて比較したい。
  • 特定のコア間の関数の遷移状況を把握したい。

ポイント

マルチコア情報を取得するためには、以下のように3つのステップが必要です。

また、DT+Traceのマルチコア解析機能は、GPIO接続の場合は4コア、ファイル書き出し接続(18Byteの場合)とEthernet接続の場合は最大64コアまで対応可能です。

ドライバのカスタマイズ方法

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

サンプルドライバを以下よりダウンロードください。

対応OS 接続方式 言語 イベントID出力方式 ダウンロード
Linux GPIO C/C++ カーネル情報出力 ≫ダウンロード※1
Linux ファイル書き出し C/C++ カーネル情報出力 ≫ダウンロード
Linux Ethernet ドライバサービスパック Ethernet C/C++ カーネル情報出力 ≫ダウンロード※2

※1 全ての汎⽤ポート接続で同様に使⽤可能です。カスタマイズに関しては、下記のサンプルコードをご参照ください。
※2 こちらは有償になりますので別途お問い合わせください。

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の定義

GPIO接続の場合は下記のように”smp_processor_id()”のようなコア情報を取得するAPIを使用し、addrの19,18bit目に割り当てます。

■ GPIO

/*========================================================================*/
/* Func: _TP_BusOutDrv                                                   */
/* Desc: TestPointOutputFunction.                                        */
/*========================================================================*/
static inline void _TP_BusOutDrv( DT_UINT addr, DT_UINT data )
{
#if DT_ADD_CPU_INFO
	int cpu_id = 0;
	cpu_id = smp_processor_id();
	if ((cpu_id < 0) || (cpu_id > 3)) {
		cpu_id = 0;
	}
	addr &= ~(0x3 << 18);
	addr |= cpu_id << 18;
#endif
	CS_LOW;

ファイル書き出し接続(18Byteファイルフォーマット)の場合やEthernet接続の場合も、同様にコア情報を取得するAPI等を使用してコア情報を取得し、ファイルフォーマットに従って記録します。

■ ファイル書き出し

/*==============================================================================*/
/*  Func:   _TP_BusOutDrv                                                       */
/*  Desc:   Called by Test Point                                                */
/*==============================================================================*/
static inline void _TP_BusOutDrv(DT_UINT addr, DT_UINT dat)
{
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0))
	struct timespec64 now;
#else
	struct timespec now;
#endif

	if (write_pos >= DT_PROC_BUFF_SIZE) {
#ifdef RING_BUFF_USE
		buff_state = 1;
		write_pos = 0;
#else
		return;
#endif
	}

#if DT_ADD_CPU_INFO
	cpu_id = smp_processor_id();
#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0))
	ktime_get_real_ts64(&now);
#else
	getnstimeofday(&now);

■ Ethernet
/*==============================================================================*/
/*  Func: _TP_BusOut                                                            */
/*  Desc: Called by Test Point                                                  */
/*==============================================================================*/
void _TP_BusOut(DT_UINT addr, DT_UINT dat)
{
	unsigned long flags;
#if DT_ADD_CPU_INFO
	unsigned int cpu_id;
#endif

...

	if (init == 0) {
		init = dt_init();
		if (init == 0) {
			return;
		}
	}

	spin_lock_irqsave(&tplock, flags);
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0))
	ktime_get_real_ts64(&now);
#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39))
	get_monotonic_boottime(&now);
#else
	getnstimeofday(&now);
#endif
#if DT_ADD_CPU_INFO
	cpu_id = smp_processor_id();
	addr |= (cpu_id << 18);

4. アプリ設定

マルチコア判別を行う場合、以下の設定が必要になります。
GPIO接続の場合とEthernet接続の場合は、「テストレポート収集条件設定」>「その他」>「コア情報を収集する」にチェックし、ログを取得します。

ファイル書き出しの場合は、テストレポートのインポート時に「コア情報を収集する」のチェックを有効にしてインポートしてください。

コアに特化した機能

一つのテストレポートでのコアの識別

コア情報の収集のための各チェックボックスを設定した上で、トレースを行うとテストレポート上の「コア」の欄に、所属するコア番号が表示されます。

コアを条件としたテストレポートフィルタ

コアを条件としてテストレポートフィルタを設定することが可能です。

テストレポートフィルタを設定するには、「レポート解析メニュー」>「テストレポートフィルタ…」>「テストレポートフィルタ」ウィンドウより、表示したいコアの「コア選択」項目をチェックして有効状態にします。
さらに、「コア選択」の項目をダブルクリックし「テストレポートフィルタ:コア選択」ウィンドウで、テストレポートフィルタを適用するコアを選択します。

関数遷移スコープでコアの遷移状況の確認

関数遷移スコープを使って、各コア間の関数の遷移状況を確認することができます。
テストレポートなどの各種ウインドウと同期して確認することでき、各コアの動きが簡単に把握できます。
関数遷移スコープは、「DT+Traceアプリメニュー」>「レポート解析」>「関数遷移スコープ」より確認できます。

各コアごとの遷移状況は、関数名表示ツリーの最上位に表示されます。
ツリーは「コア > プロセス(イベントID) > 関数名」の順で表示されます。

このページの情報はお役に立ちましたか?
  • はい (1)
  • いいえ (0)
  • 探している内容ではない (0)