Oracle® Developer Studio 12.5: パフォーマンスアナライザチュートリアル

印刷ビューの終了

更新: 2016 年 6 月
 
 

同期トレースのチュートリアルについて

このチュートリアルでは、マルチスレッドプログラムに対してパフォーマンスアナライザを使用し、クロックプロファイリングおよび同期トレースのデータを検証する方法を示します。

「概要」ページを使用して、どのパフォーマンスメトリックがハイライトされているかをすばやく確認したり、データビューに表示するメトリックを変更したりします。「関数」ビュー、「呼び出し元-呼び出し先」ビュー、および「ソース」ビューを使用してデータを調査します。チュートリアルでは 2 つの実験を比較する方法も示します。

チュートリアルは同期トレースデータの理解に役立ち、そのデータをクロックプロファイリングデータと関連付ける方法を説明します。

記録する実験で目にするデータは、ここで示されているものとは異なります。チュートリアルのスクリーンショットに使用した実験は、Oracle Solaris 11.3 を実行する SPARC T5 システムで記録されました。Oracle Solaris または Linux を実行する x86 システムからのデータは異なります。さらに、データ収集には統計的な性質があり、同じシステムおよび OS で実行する場合でも実験ごとに異なります。

パフォーマンスアナライザの実際のウィンドウ構成は、スクリーンショットと厳密に一致しない場合があります。パフォーマンスアナライザでは、ウィンドウのコンポーネント間の区切りバーをドラッグしたり、コンポーネントを縮小したり、ウィンドウのサイズを変更したりできます。パフォーマンスアナライザはその構成を記録し、次回の実行時に同じ構成を使用します。チュートリアルで示しているスクリーンショットの取得過程で、多くの構成を変更しました。

mttest プログラムについて

mttest プログラムは、ダミーデータに対してさまざまな同期オプションを実行する単純なプログラムです。プログラムはさまざまなタスクを実装し、各タスクは次の同じ基本アルゴリズムを使用します。

  • 複数のワークブロック (デフォルトで 4 つ) をキューに入れます。

  • 作業を処理する複数のスレッド (これもデフォルトで 4 つ) を生成します。

  • 各タスクで、特定の同期プリミティブを使用して、ワークブロックへのアクセスを制御します。

  • 同期のあと、ブロックに対する作業を処理します。

各タスクは異なる同期メソッドを使用します。mttest のコードは各タスクを順番に実行します。

同期トレースについて

同期トレースは、mutex_lock()pthread_mutex_lock()sem_wait() など、同期用のさまざまなライブラリ関数に割り込むことによって実装されます。pthread および Oracle Solaris 同期呼び出しの両方がトレースされます。

ターゲットプログラムがこれらの関数のいずれかを呼び出すと、呼び出しはデータコレクタによってインターセプトされます。現在の時間、ロックのアドレス、その他のデータがキャプチャーされたあと、割り込みルーチンが実際のライブラリルーチンを呼び出します。実際のライブラリルーチンが戻ると、データコレクタがふたたび時間を読み取り、終了時間と開始時間の差を計算します。その差がユーザー指定のしきい値を超える場合、イベントが記録されます。時間がしきい値を超えない場合、イベントは記録されません。どちらの場合も、実際のライブラリルーチンからの戻り値が呼び出し元に返されます。

イベントを記録するかどうかの決定に使用されるしきい値は、collect コマンドの -s オプションを使用して設定できます。パフォーマンスアナライザを使用して実験を収集する場合、「アプリケーションのプロファイル」ダイアログの「同期待ちトレース」の「最小遅延」でしきい値を指定できます。しきい値はマイクロ秒数に、またはキーワード calibrate または on に設定できます。calibrate または on を使用する場合、データコレクタは、競合しない相互排他ロックを獲得するのにかかる時間を調べ、しきい値をその値の 5 倍に設定します。0 または all のしきい値を指定すると、すべてのイベントが記録されます。

このチュートリアルでは、2 つの実験で同期待ちトレースを記録します。一方の実験では測定に基づいたしきい値を使用し、もう一方の実験ではしきい値をゼロにします。どちらの実験にもクロックプロファイリングが含まれます。