Oracle® Solaris Studio 12.4: パフォーマンスアナライザ

印刷ビューの終了

更新: 2015 年 1 月
 
 

実験制御オプション

これらのオプションは、実験データの収集方法を制御します。

-L size を使用して実験サイズを制限する

記録するプロファイリングデータの量を sizeM バイトに制限します。この制限は、すべてのプロファイリングデータとトレースデータの合計に適用されますが、標本ポイントには適用されません。この制限値は概数にすぎないので、この値を超えることは可能です。

制限に達すると、それ以上のプロファイリングデータおよびトレースデータは記録されませんが、ターゲットプロセスが終了するまで実験はオープン状態となります。定期的な標本収集が有効である場合、標本ポイントの書き込みが継続されます。

size に使用できる値は次のとおりです。

unlimited または none

実験にサイズ制限を適用しません。

n

nM バイトの制限を適用します。n の値は正である (0 を超えている) 必要があります。

デフォルトでは、記録されるデータサイズに制限はありません。

約 2G バイトの制限を付けるには、たとえば、–L 2000 を指定します。

-F option を使用してプロセスを追跡する

派生プロセスのデータを記録するかどうかを制御します。–F 設定と関係なく、常に親プロセスに関するデータが収集されます。option に使用できる値は次のとおりです。

on

すべての子孫プロセスについて実験を記録します。

all

on と同じです。

off

どの子孫プロセスについても実験を記録しません。

=regex

実行可能ファイル名が正規表現に一致する派生プロセスについて実験を記録します。フルパスではなく、実行可能ファイルのベース名のみが使用されます。使用する regex に、シェルによって解釈される空白または文字が含まれている場合は、regex 引数全体を必ず単一引用符で囲むようにしてください。

デフォルトでは、-F on オプションが設定されるので、コレクタは、fork(2)、fork1(2)、fork(3F)、vfork(2)、および exec(2) 関数とそのバリアントの呼び出しによって作成されたプロセスを追跡します。vfork への呼び出しは、内部で fork1 への呼び出しに置換されます。

system(3C)、system(3F)、sh(3F)、posix_spawn(3p)、posix_spawnp(3p)、popen(3C)、および同様の関数の呼び出しによって作成された派生プロセスと、それに関連した派生プロセスも追跡されます。

Linux では、CLONE_VM フラグを使用せずに clone(2) によって作成された派生がデフォルトで追跡されます。CLONE_VM フラグを使用して作成された派生は、プロセスではなくスレッドとして扱われ、–F の設定には関係なく常に追跡されます。

–F '= regexp' オプションを指定すると、コレクタはすべての派生プロセスを追跡します。派生名またはサブ実験名が指定の正規表現と一致する場合、コレクタはサブ実験を作成します。正規表現については、regexp(5) のマニュアルページを参照してください。

正規表現の使用例:

  • 親での system の最初の呼び出しからの最初の fork からの最初の exec の派生プロセスに関するデータを取得するには、 collect -F '=_x1_f1_x1' を使用します。

  • exec のすべてのバリアントに関するデータを取得するが、fork については取得しないようにするには、collect -F '=.*_x[0-9]/*' を使用します。

  • system ("goodbye") ではなく system ("echo hello") の呼び出しからデータを取得するには、collect -F '=echo hello' を使用します。

派生プロセスの実験を作成し命名する方法の詳細は、サブ実験を参照してください。

MPI 実験では、デフォルトで派生も追跡されます。

パフォーマンスアナライザと er_print ユーティリティーは、親実験が読み取られると、自動的に派生プロセスの実験を読み取り、データ画面に派生を表示します。

コマンド行から特定のサブ実験のデータを表示のために選択するには、そのサブ実験のパス名を er_print または analyzer コマンドへの引数として明示的に指定します。指定されるパスには、初期の実験の名前と、親ディレクトリの内部にある派生実験の名前が含まれている必要があります。

たとえば、test.1.er 実験の 3 回目の fork のデータを表示するには、次のように実行します。

er_print test.1.er/_f3.er

analyzer test.1.er/_f3.er

もう一つの方法として、関心のある派生の実験の明示的な名前を入れた実験グループファイルを用意する方法もあります。詳細は、実験グループを参照してください。


注 -  派生プロセスが追跡されている間に親プロセスが終了した場合、まだ実行している派生のデータ収集は継続されます。それに従って親の実験ディレクトリは拡大を続けます。

また、スクリプトのデータを収集して、スクリプトの派生プロセスを追跡することもできます。詳細は、スクリプトからのデータの収集を参照してください。

-j option を使用して Java をプロファイリングする

ターゲットプログラムが JVM の場合に Java プロファイルを有効にします。option に使用できる値は次のとおりです。

on

JVM マシンのプロファイリングデータを記録し、Java HotSpot 仮想マシンでコンパイルされたメソッドを認識するほか、Java 呼び出しスタックも記録します。

off

Java プロファイリングデータを記録しません。

path

JVM のプロファイリングデータを記録し、指定された path にインストールされた JVM を使用します。

ターゲットが JVM マシンである場合、プロファイルデータを取得するには –j on を使用する必要があります。

.class ファイルまたは .jar ファイルに関するデータを収集する場合は、-j on オプションは必要ありません。

64 ビットの JVM マシンを使用している場合は、そのパスをターゲットとして明示的に指定する必要があります。32 ビットの JVM マシンに -d64 オプションを使用しないでください。-j on オプションが指定されているが、ターゲットが JVM マシンでない場合は、無効な引数がターゲットに渡される可能性があります。また、データは記録されません。collect コマンドは、Java プロファイリングに指定された JVM マシンのバージョンを検証します。

-J java-argument を使用して Java オプションを渡す

プロファイルで使用するために JVM へ渡される追加引数を指定します。-J オプションを指定した場合、Java プロファイリング (–j on) が有効になります。java-argument に複数の引数が含まれる場合、全体を引用符でくくる必要があります。この引数は、空白またはタブで区切られた一連のトークンで構成される必要があります。各トークンは、別々の引数として JVM へ渡されます。JVM へのほとんどの引数は、ダッシュ文字 (-) で始まる必要があります。

-l signal による標本収集のシグナルの指定

signal という名前のシグナルがプロセスへ送信されたときに、標本パケットを記録します。

シグナルは、完全なシグナル名、先頭文字 SIG を省いたシグナル名、またはシグナル番号のいずれの形式でも指定できます。ただし、プログラムが使用するシグナル、または実行を終了するシグナルは指定しないでください。推奨するシグナルは SIGUSR1 および SIGUSR2 です。SIGPROF は、クロックプロファイリングが指定されている場合でも使用できます。シグナルは、kill コマンドを使用してプロセスに送信できます。

–l (小文字の L) および –y の両方のオプションを使用する場合は、それぞれのオプションに異なるシグナルを使用する必要があります。

プログラムに独自のシグナルハンドラがあるときにこのオプションを使用する場合は、-l で指定するシグナルが、阻止されたり無視されたりすることなく、確実にコレクタのシグナルハンドラに渡されるようにする必要があります。

シグナルについては、signal(3HEAD) のマニュアルページを参照してください。

–t duration を使用して時間範囲を設定する

データ収集の時間範囲を指定します。

duration は単独の数値として指定でき、オプションとして m または s 接尾辞を付け、実験終了までの時間が分単位か秒単位かを示すこともできます。 デフォルトでは、所要時間は秒です。duration はハイフンで区切られた 2 つの数で指定することもできます。この場合、1 つ目の時間が経過するまでデータ収集は停止します。その時間になるとデータ収集が開始します。2 つ目の時間が経過すると、データ収集が終了されます。2 つ目の時間がゼロの場合、初めてプログラムが停止したあと、そのプログラムの実行の終わりまで、データの収集が実行されます。実験が終了しても、ターゲットプロセスは最後まで実行できます。

-x を使用して dbx attach を許可するためにプロファイリングされたターゲットを停止する

デバッガが接続できるようにするために、exec システムコールからの終了時にターゲットプロセスを停止したままにします。collect コマンドは、プロセス ID を含むメッセージを出力します。

ターゲットが collect によって停止されたあと、そのターゲットにデバッガを接続するには、次の手順に従います。

  1. collect -x コマンドによって出力されたメッセージからプロセスの PID を取得します。

  2. デバッガを起動します

  3. SIGPROF と、ハードウェアカウンタデータを収集することを選択した場合は Solaris では SIGEMT、Linux では SIGIO を無視するようにデバッガを構成します。

  4. dbx attach コマンドを使用してプロセスに接続します。

  5. 収集する実験のためのコレクタのパラメータを設定します。

  6. collector enable コマンドを発行します。

  7. ターゲットプロセスを実行できるように cont コマンドを発行します。

プロセスがデバッガの制御下で実行されると、コレクタは実験を記録します。

別の方法として、プロセスに接続し、collect -P PID コマンドを使用して実験を収集することもできます。

-y signal [ ,r] を使用したシグナルの一時停止および再開状態

signal という名前のシグナルで、データの記録を制御します。このシグナルがプロセスに送信されると、一時停止状態 (データは記録されない) と記録状態 (データは記録される) が切り替わります。

デフォルトで、データ収集は一時停止状態から開始します。オプションの ,r フラグを指定した場合、データ収集は再開状態から開始します。つまりプロファイリングが即座に行われます。ただし、–y オプションの状態に関係なく、標本ポイントは常に記録されます。

一時停止/再開シグナルの 1 つの使用法として、データを収集せずにターゲットを起動し、ターゲットが定常状態に到達できるようにしたあと、データ収集を有効にする方法があります。

シグナルは、完全なシグナル名、先頭文字 SIG を省いたシグナル名、またはシグナル番号のいずれの形式でも指定できます。ただし、プログラムが使用するシグナル、または実行を終了するシグナルは指定しないでください。推奨するシグナルは SIGUSR1 および SIGUSR2 です。SIGPROF は、時間プロファイリングが指定されている場合でも使用できます。シグナルは、kill コマンドを使用してプロセスに送信できます。

-l および -y の両方のオプションを使用する場合は、それぞれのオプションに異なるシグナルを使用する必要があります。

-y オプションに r 引数 (オプション) を指定した場合、コレクタは記録状態から起動します。それ以外の場合は一時停止状態から起動します。-y オプションが使用されていない場合、コレクタは記録状態で起動します。

プログラムに独自のシグナルハンドラがあるときにこのオプションを使用する場合は、-y で指定するシグナルが、阻止されたり、無視されたりすることなく、確実にコレクタのシグナルハンドラに渡されるようにする必要があります。

シグナルについては、signal(3HEAD) のマニュアルページを参照してください。