同期待ちトレースデータの収集目的
C、C++、または Fortran で記述されたマルチスレッド型のプログラムでパフォーマンスに問題がある場合は、同期化の遅延が原因となっていることがあります。 同期待ちトレースデータの収集は、遅延の発生箇所や遅延時間を解明する手がかりになります。
記録済みのタイミングデータのうち、「ユーザーロック」メトリックまたは「他の待ち時間」メトリックの値が大きい場合は、プログラムに同期化遅延の問題があることが考えられます。
コレクタによる同期待ちトレースデータの収集
コレクタは、スレッド同期化ルーチンに対する呼び出しのリアルタイム遅延を追跡します。これは、実際のスレッド同期化ルーチンに対する呼び出しをコレクタが代替受信することで記録されます。 遅延時間が事前に定義されたしきい値を超えると、そのイベントが記録されます。 各データポイントには遅延の始まりから終わりまでのタイムスタンプ、プロセッサ ID、ロックアドレス、および遅延終了時に実行されていたスレッドと LWP の ID の記録があります。
パフォーマンスアナライザに表示される同期化メトリック
同期待ちトレースデータは、次のメトリック (計測データ) に変換されます。
メトリック | 定義 |
---|---|
同期待ちカウント | しきい値を越える遅延が発生したイベントの数。 |
同期待ち時間 | 同期化ルーチンに対する呼び出し待ちに消費された時間。 この合計値には、待ち時間がしきい値を超えたイベントの待ち時間だけが含まれます。 |
遅延しきい値の設定
しきい値は、マイクロ秒単位で設定するか、測定テストで決定できます。 測定テストでは、同期化遅延なしに同期化ルーチンに対する呼び出しを実行できます。 測定されたしきい値は、これらの呼び出しの平均時間に任意因数を掛けたものです。 これは同期化データ収集時のデフォルトのオプションです。
本当の遅延が発生しているイベントを記録したい場合は、「測定」を選択します。 遅延時間に関係なくすべての同期化イベントを記録したい場合は、しきい値を 0 (ゼロ) に設定してください。
同期待ちトレースデータ収集に関する制限事項
既に実行されているプログラムからは同期待ちトレースデータを収集できません。ただし、コレクタライブラリの libcollector.so が事前に読み込まれている場合は収集できます。 詳細については、動作中プロセスのパフォーマンスデータの収集を参照してください。
Java[tm] モニターのトレースデータは記録されません。
詳細についてはマニュアル『プログラムのパフォーマンス解析』を参照してください。
関連項目 | |
---|---|
パフォーマンスデータの収集 |