時間ベースのプロファイル時に収集されるデータは、オペレーティングシステムが提供するメトリックスによって異なります。
Solaris OS での時間ベースのプロファイルでは、各 LWP の状態が定期的な間隔で格納されます。この時間間隔は、プロファイル間隔と呼ばれます。この情報は整数の配列に格納されます。その配列の 1 つの要素は、カーネルによって維持される 10 個のマイクロアカウンティングの各状態に使用されます。収集されたデータは、各状態で消費された、プロファイル間隔の分解能を持つ時間値に、パフォーマンスアナライザによって変換されます。デフォルトのプロファイル間隔は、約 10 ミリ秒 (10 ms) です。コレクタは、約 1 ミリ秒の高分解能プロファイル間隔と、約 100 ミリ秒の低分解能プロファイル間隔を提供し、OS で許されれば任意の間隔を許可します。引数を付けずに collect コマンドを実行すると、このコマンドが実行されるシステム上で許される範囲と分解能が出力されます。
次の表に、時間ベースのデータから計算されるメトリックスの定義を示します。
表 2–1 Solaris タイミングメトリックス
メトリック |
定義 |
---|---|
ユーザー CPU 時間 |
CPU のユーザーモードで実行中に使用される LWP 時間。 |
時計時間 |
LWP 1 で使用される LWP 時間。通常は、「実経過時間」です。 |
LWP 合計時間 |
LWP 時間の総合計。 |
システム CPU 時間 |
CPU のカーネルモードまたはトラップ状態で実行中に使用される LWP 時間。 |
CPU 待ち時間 |
CPU の待機中に使用される LWP 時間。 |
ユーザーロック時間 |
ロックの待機中に使用される LWP 時間。 |
テキストページフォルト時間 |
テキストページの待機中に使用される LWP 時間。 |
データページフォルト時間 |
データページの待機中に使用される LWP 時間。 |
ほかの待ち時間 |
カーネルページ待機中に使用される LWP 時間、またはスリープ中か停止中に使用される時間。 |
マルチスレッドの実験では、すべての LWP にまたがって実経過時間以外の時間が集計されます。定義した時計時間は、MPMD (Multiple-Program Multiple-Data) プログラムには意味がありません。
タイミングメトリックスは、プログラムがいくつかのカテゴリで時間を費やした部分を示し、プログラムのパフォーマンス向上に役立てることができます。
ユーザー CPU 時間が大きいということは、その場所で、プログラムが仕事の大半を行なっていることを示します。この情報は、アルゴリズムを再設計することによって特に有益となる可能性があるプログラム部分を見つけるのに使用できます。
システム CPU 時間が大きいということは、プログラムがシステムルーチンに対する呼び出しで多くの時間を使用していることを示します。
CPU 待ち時間が大きいということは、使用可能な CPU 以上に実行可能なスレッドが多いか、ほかのプロセスが CPU を使用していることを示します。
ユーザーロック時間が大きいということは、要求対象のロックをスレッドが取得できないことを示します。
テキストページフォルト時間が大きいということは、リンカーによって指定されたコードが、多数の呼び出しまたは分岐で新しいページの読み込みが発生するようなメモリー上の配置になることを意味します。
データページフォルト時間が大きいということは、データへのアクセスによって新しいページの読み込みが発生していること示します。この問題は、プログラムのデータ構造またはアルゴリズムを変更することによって解決できます。
Linux OS で利用できるメトリックは、ユーザー CPU 時間だけです。報告される合計 CPU 使用時間は正確ですが、アナライザは Solaris OS の場合ほど正確に実際のシステム CPU 時間の割合を判別できない場合があります。アナライザは軽量プロセス (LightWeight Process、LWP) のデータであるかのように情報を表示しますが、実は Linux OS 上に LWP はなく、表示される LWP ID は実際にはスレッド ID です。
時間プロファイリングデータは、Oracle Message Passing Toolkit (以前の Sun HPC ClusterTools) で実行される MPI 実験で収集できます。Oracle Message Passing Toolkit はバージョン 8.1 またはそれ以降である必要があります。
Linux で Oracle Message Passing Toolkit 8.2 または 8.2.1 を使用する場合、回避策が必要になる場合があります。バージョン 8.1 または 8.2.1c の場合、または Oracle Solaris Studio コンパイラを使用している場合はどのバージョンでも回避策は必要ありません。回避策については、docs.sun.com の Oracle Solaris Studio 12.2 Collection - Japanese 内の『Oracle Solaris Studio 12.2 リリースの新機能』を参照してください。
MPI 実験で時間プロファイリングデータを収集すると、次の 2 つのメトリックスが追加されます。
MPI 作業: 要求やメッセージの処理など、プロセスが MPI ランタイム実行作業の内部にある場合に蓄積されます。
MPI 待機: プロセスが MPI ランタイムの内部にあり、イベント、バッファー、またはメッセージを待機している場合に蓄積されます。
Solaris OS では、MPI 作業は作業が直列または並列に実行される場合に蓄積されます。MPI 待機は、MPI ランタイムが同期化を待機している間に蓄積され、待機が CPU 時間ないしスリーピングのいずれかを使用しているか、または作業が並列実行中であるがスレッドは CPU 上にスケジュールされていない場合に、蓄積されます。
Linux OS では、MPI 作業および MPI 待機は、プロセスがユーザーモードまたはシステムモードでアクティブになっている場合にのみ蓄積されます。MPI がビジーウェイトを行う必要があるものとして指定しないかぎり、Linux での MPI 待機は有用ではありません。
時間ベースのプロファイルが OpenMP プログラムで実行される場合は、OpenMP 作業および OpenMP 待機という 2 つの追加メトリックスが提供されます。
Solaris OS では、OpenMP 作業は作業が直列または並列に実行される場合に蓄積されます。OpenMP 待機は、OpenMP ランタイムが同期化を待機している場合に蓄積し、待機が CPU 時間かスリーピングを使用しているか、または作業は並行してなされるがスレッドが CPU 上でスケジュールされていない場合に蓄積します。
Linux OS では、OpenMP 作業および OpenMP 待機は、プロセスがユーザーモードまたはシステムモードでアクティブになっている場合にのみ蓄積されます。OpenMP でビジーウェイトを行う必要があるものとして指定しないかぎり、Linux での OpenMP は有用ではありません。