外部データで CSV ファイルを作成

インテル® VTune™ プロファイラーは、カスタムコレクターやターゲット・アプリケーションで外部収集されたパフォーマンス統計と、インテル® VTune™ プロファイラーの解析を統合できます。これを実現するには、収集したカスタムデータを定義済みの構造体を持つ csv ファイルとして提供し、このファイルをインテル® VTune™ プロファイラーの結果ディレクトリーに保存します。

インテル® VTune™ プロファイラーは、次のようなデータをロードして処理することができます。

インテル® VTune™ プロファイラーが、csv ファイルのカスタムと統計を解釈するようにするには、ファイル形式が以下の要件を満たしていることを確認してください。

ファイル名

csv ファイル名は次の形式に従って、カスタムコレクターがデータを収集したホスト名を指定する必要があります。

ファイル名形式: [user-defined]-hostname-<hostname-of-system>.csv

説明:

例: phases-hostname-octagon53.csv

csv ファイル名でホスト名が指定されていない、または正しく指定されていない場合、インテル® VTune™ プロファイラーでインポートされたデータを表示する際に次の制限が適用されます。

  • イベントタイムスタンプは、UTC 形式で示されます。

  • グローバルデータ (特定のスレッド/プロセスに関連しない) のみが表示されます。

インターバル値の形式

インターバル・データは、スレッド ID に関連付けることもできます。インテル® VTune™ プロファイラーは、特定のスレッドにバインドされていないデータ (csv ファイルには TID がない) をフレームとして表します。スレッドにバインドされてたデータ (csv ファイルには TID がある) をタスクとして表します。

インポートされた間隔値は 5 つのカラムを使用します。これらのカラムの順序は重要です。

name,start_tsc.[QPC|CLOCK_MONOTONIC_RAW|RDTSC|UTC],end_tsc,[pid],[tid]

カラム名

説明

name

イベント名。

start_tsc.[QPC|CLOCK_MONOTONIC_RAW|RDTSC|UTC]

イベント開始タイムスタンプ。このカラムには、タイムスタンプ・カウンターの種類を示す QPC|CLOCK_MONOTONIC_RAWRDTSC または UTC サフィックスがあります。

  • Windows* 上でパフォーマンス・カウンターを使用する場合 QPC (QueryPerformanceCounter) を指定し、Linux* 上で clock_gettime(CLOCK_MONOTONIC_RAW) を使用する場合 CLOCK_MONOTONIC_RAW を指定します。

  • RDTSC カウンターを使用する場合、RDTSC を指定します。RDTSC の取得は次のように行います。

    • Microsoft* コンパイラーとインテル® コンパイラーでは、__rdtsc() 組込み関数を使用します

    • GCC* コンパイラーを使用する場合、必要に応じて、次の関数をコードにコピーして呼び出します。

    
    #include 
    int64_t rdtsc()
    {
        int64_t    tstamp;
    
    #if defined(__x86_64__)
        asm(    "rdtsc\n\t"
                "shlq   $32,%%rdx\n\t"
                "or     %%rax,%%rdx\n\t"
                "movq   %%rdx,%0\n\t"
                : "=g"(tstamp)
                :
                : "rax", "rdx" );
    #elif defined(__i386__)
        asm( "rdtsc\n": "=A"(tstamp) );
    #else
    #error NYI
    #endif
        return tstamp;
    }
        
    
  • 日付と時間が使用される場合、UTC を指定します。指定形式は YYYY-MM-DD hh:mm:ss.sssss です。小数点以下の値は任意です。

end_tsc

イベント終了タイムスタンプ。

pid

必要に応じて、プロセス ID を指定します。このフィールドに値が存在しなくても、次の条件が満たされれば (まれなケースを除いて) 結果のインポートには影響しません。

  • スレッド ID は、収集時間フレーム内にオペレーティング・システムによって再利用されます。

  • 同じスレッド ID を持つ異なるスレッドは、csv ファイルのレコードを生成します。

  • タイムスタンプは不正確であり、データは同じスレッド ID を持つ複数のスレッドに分類される可能性があります。

このフィールドをデータ内の空の値とするか、ファイルヘッダーとデータの両方から完全に除外できます。

tid

必要に応じて、スレッド ID を指定します。このフィールドに値が指定されると、間隔はタスクとして解釈されます。それ以外は間隔はフレームとして解釈され表示されます。

このフィールドはデータ内の空の値とするか、ファイルヘッダーとデータの両方から完全に除外できます。

計数値の形式

2 種類の計数値をインポートできます。

次の形式で指定します。

tsc.[QPC|CLOCK_MONOTONIC_RAW|RDTSC|UTC],CounterName1.COUNT|INST[,CounterName2.COUNT|INST],[pid],[tid]

カラム名

説明

tsc.[QPC|CLOCK_MONOTONIC_RAW|RDTSC|UTC]

イベント開始タイムスタンプ。このカラムは、タイムスタンプ・カウンターの種類を示す QPC|CLOCK_MONOTONIC_RAWRDTSC、または UTC サフィックスがあります。

  • Windows* 上でパフォーマンス・カウンターを使用する場合 QPC (QueryPerformanceCounter) を指定し、Linux* 上で clock_gettime(CLOCK_MONOTONIC_RAW) を使用する場合 CLOCK_MONOTONIC_RAW を指定します。

  • RDTSC カウンターを使用する場合、RDTSC を指定します。Windows* で RDTSC を取得するには、__rdtsc() 組込み関数を使用します。Linux* で RDTSC を使用する場合、必要に応じて、次の関数をコードにコピーして呼び出します。

    
        #include 
            int64_t rdtsc()
            {
            int64_t    tstamp;
    
            #if defined(__x86_64__)
            asm(    "rdtsc\n\t"
            "shlq   $32,%%rdx\n\t"
            "or     %%rax,%%rdx\n\t"
            "movq   %%rdx,%0\n\t"
            : "=g"(tstamp)
            :
            : "rax", "rdx" );
            #elif defined(__i386__)
            asm( "rdtsc\n", "=A"(tstamp) );
            #else
            #error NYI
            #endif
            return tstamp;
            }
        
    
  • 日付と時間が使用される場合、UTC を指定します。指定形式は YYYY-MM-DD hh:mm:ss.sssss です。小数点以下の値は任意です。

CounterName1

イベント名。カウンターはそれぞれのカラムを持ちます。COUNT サフィックスは累積カウンター値を指定する際に使用します。INST サフィックスは瞬間カウンター値を指定する際に使用します。

pid

必要に応じて、プロセス ID を指定します。このフィールドに値が存在しなくても、次の条件が満たされれば (まれなケースを除いて) 結果のインポートには影響しません。

  • スレッド ID は、収集時間フレーム内にオペレーティング・システムによって再利用されます。

  • 同じスレッド ID を持つ異なるスレッドは、csv ファイルのレコードを生成します。

  • タイムスタンプは不正確であり、データは同じスレッド ID を持つ複数のスレッドに分類される可能性があります。

このフィールドをデータ内の空の値とするか、ファイルヘッダーとデータの両方から完全に除外できます。

tid

必要に応じて、スレッド ID を指定します。このフィールドに値が指定されると、間隔はタスクとして解釈されます。それ以外は間隔はフレームとして解釈され表示されます。

このフィールドはデータ内の空の値とするか、ファイルヘッダーとデータの両方から完全に除外できます。

追加要件

関連情報