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

印刷ビューの終了

更新: 2015 年 1 月
 
 

データ収集オプション

これらのオプションは、収集されるデータの種類を制御します。データの種類については、コレクタが収集するデータを参照してください。

データ収集オプションを指定しなかった場合、デフォルトは -p on で、デフォルトのプロファイリング間隔 (約 10 ミリ秒) でクロックプロファイリングが行われます。

-p off でクロックプロファイリングを明示的に無効とし、すべてのトレースとハードウェアカウンタプロファイリングを有効にしなかった場合、collect コマンドは警告メッセージを出力し、大域標本データだけを収集します。

-p option を使用したクロックプロファイリング

–p オプションを使用すると、クロックプロファイリングデータを収集できます。option に使用できる値は次のとおりです。

  • off – クロックプロファイリングを無効にします。

  • on - デフォルトのプロファイリング間隔 (約 10 ミリ秒) でクロックプロファイリングを有効にします。

  • lo[w] - 低分解能プロファイリング間隔 (約 100 ミリ秒) でクロックプロファイリングを有効にします。

  • hi[gh] - 高分解能プロファイリング間隔 (約 1 ミリ秒) でクロックプロファイリングを有効にします。高分解能のプロファイリングについては、クロックプロファイリングに関する制限事項を参照してください。

  • [+]value - クロックプロファイリングを有効にし、プロファイリング間隔を value に設定します。value のデフォルトの単位はミリ秒です。value は、整数または浮動小数点数として指定できます。オプションとして、数値の後ろに接尾辞 m を付けてミリ秒単位を選択するか、u を付けてマイクロ秒単位を選択することができます。プロファイル間隔は、時間の分解能の倍数である必要があります。値が時間の分解能値よりも大きな値であっても倍数でない場合は、端数が切り捨てられます。時間の分解能値よりも小さな値の場合は、警告メッセージが出力され、時間の分解能に設定されます。

collect コマンドは、デフォルトでクロックプロファイリングデータを収集します。カウントデータ (–c) またはデータ競合およびデッドロックデータ (–r) を収集しない場合は、–p オプションを指定していなくてもクロックプロファイリングデータが収集されます。

–h high または –h low を指定して、プロセッサのデフォルトのハードウェアカウンタが高周波数または低周波数に設定されるように要求する場合、デフォルトのクロックプロファイリングも高または低に設定されます。–p hi または –p low あるいは –p n オプションを使用して明示的に指定することにより、クロックプロファイリングに対し別の周波数を設定できます。

Linux 上でのマルチスレッドアプリケーションのクロックプロファイリングに関する注意事項については、クロックプロファイリングに関する制限事項を参照してください。

collect -h を使用したハードウェアカウンタプロファイリング

ハードウェアカウンタプロファイリングデータを収集します。一部のハードウェアでは、collect コマンドは、引数を付けずに collect -h を使用して表示できるデフォルトのカウンタセットを定義しています。デフォルトのカウンタセットを使用する代わりに、特定のカウンタを指定することもできます。カウンタの指定には複数の -h 引数を使用できます。

collect -h で表示されるカウンタの形式については、ハードウェアカウンタリストを参照してください。

collect -h で使用される option で指定できる値は次のとおりです。

off

ハードウェアカウンタプロファイリングを無効にします。-h off を使用する場合は、ほかのオプションを一緒に指定することはできません。

on

特定のハードウェアシステムのデフォルトのカウンタセットを使用してハードウェアカウンタプロファイリングを有効にします。システムにデフォルトのカウンタセットがない場合に -h on を指定するとエラーが発生します。

hi | high

システムのデフォルトカウンタセットに対してハードウェアカウンタプロファイリングを有効にし、高レートでプロファイリングします。システムにデフォルトのカウンタセットがない場合に -h hi を指定するとエラーが発生します。

lo | low

システムのデフォルトカウンタセットに対してハードウェアカウンタプロファイリングを有効にし、低レートでプロファイリングします。システムにデフォルトのカウンタセットがない場合に -h lo を指定するとエラーが発生します。

ctr_def...[,ctr_n_def]

指定された 1 つ以上のカウンタを使用してハードウェアカウンタプロファイルを収集します。サポートされるカウンタ (ctr_def から ctr_n_def) の最大数はプロセッサに依存します。プロファイリング用のハードウェアカウンタ定義の最大数を判断し、使用可能なハードウェアカウンタとデフォルトのカウンタセットをすべて一覧表示するには、現在のマシン上で引数を付けずに collect -h を実行します。

メモリー関連のカウンタのタイプは、ほかのどのコマンド行引数も指定せずに collect -h コマンドを実行するときにカウンタリストに表示される loadstore、または load-store です。このようなカウンタの一部には、precise というラベルも付けられます。precise カウンタの場合は、SPARC または x86 のどちらでも、デフォルトではデータ領域およびメモリー領域データが記録されます。

ctr_def カウンタ定義の形式を次に示します。

ctr[~attr=val]...[~attrN=valN][/reg#],[interval] 

カウンタ定義の各オプションの意味は次のとおりです。

ctr

ほかのコマンド行引数を使用せずに collect -h コマンドを実行して表示されるプロセッサ固有のカウンタ名。ほとんどのシステムでは、カウンタがリストにない場合でも、そのカウンタを引き続き 16 進数 (0x1234) または 10 進数のどちらかの数値で指定できます。古いチップのドライバでは数値がサポートされませんが、最近のチップのドライバではサポートされています。カウンタを数値で指定する場合は、レジスタ番号も指定するようにしてください。使用する数値は、チップ固有の製造元のマニュアルに記載されています。マニュアルの名前は、collect -h の出力で指定されます。一部のカウンタは、ベンダー独自のマニュアルでしか説明されていません。

~attr=val

任意の 1 つ以上の属性オプション。一部のプロセッサでは、属性オプションをハードウェアカウンタに関連付けることができます。プロセッサが属性オプションをサポートしている場合は、ほかのどのコマンド行引数も指定せずに collect -h を実行すると、~attr に使用する属性名のリストも表示されます。val の値は、10 進数または 16 進数の形式で指定できます。16 進数の形式の数値は、数値の前に 0 と小文字の x が付加された C プログラムの形式 (0xhex_number) で指定します。カウンタ名に複数の属性が連結されます。それぞれの属性名の前には ~ が必要です。

/reg#

カウンタに使用するハードウェアレジスタ。指定されていない場合、collect は、カウンタを使用可能な最初のレジスタに配置しようとします。その結果、レジスタの競合のために以降のカウンタを配置できない可能性があります。複数のカウンタを指定する場合は、各カウンタで異なるレジスタを使用する必要があります。使用可能なレジスタ番号のリストは、ほかのどのコマンド行引数も指定せずに collect -h コマンドを実行することによって確認できます。レジスタを指定する場合は、/ 文字が必要です。

interval

この間隔は標本収集頻度であり、次のいずれかに設定できます。

  • on – デフォルトの間隔です。これは、ほかの引数を指定せずに collect -h を入力すると判別できます。すべての raw カウンタのデフォルト値は同じであるため、特定のカウンタにもっとも適した値ではない可能性があることに注意してください。

  • hi - 選択したカウンタの高分解能値で、デフォルトの約 1/10 です。

  • lo - 選択したカウンタの低分解能値で、デフォルトの約 10 倍です。

  • value - 特定の値で、10 進数または 16 進数形式の正の整数です。

間隔を省略した場合、-h on の値が使用されます。ただし、間隔を省略した場合でも、-h パラメータで最後のカウンタを指定しないかぎり、省略した間隔の指定の前にコンマを付ける必要があります。

raw カウンタの場合、hiloon の値は推測ですが、特定のプログラムの適切な間隔を推測することは非常に困難です。raw カウンタに対して on/hi/lo を使用して、それぞれでイベントがスレッドあたり 100/1000/10/秒より速くなった場合は、間隔が調整されて、Oracle Solaris システムのより適切な最大値まで下げられます。

使用例 3-1  -h の有効な使用例
 
-h on
-h lo
-h hi
    Enable the default counters with default, low, or
    high rates, respectively

-h cycles,,insts,,dcm
-h cycles -h insts -h dcm
  Both have the same meaning: three counters: cycles, insts 
  and dataspace-profiling of D-cache misses (SPARC only)

-h cycles~system=1
  Count cycles in both user and system modes

-h 0xc0/0,10000003
On Nehalem, that is the equivalent to
-h inst_retired.any_p/0,10000003
使用例 3-2  -h の無効な使用例
 
-h cycles -h off
  Can't use off with any other -h arguments
-h cycles,insts
  Missing comma, and "insts" does not parse as a number for 
  <interval>

-h 引数がハードウェアカウンタの使用を指定していても、コマンドが指定された時点でハードウェアカウンタがルートによって使用されている場合、collect コマンドはエラーを報告し、実験は実行されません。

-h 引数が指定されない場合、ハードウェアカウンタプロファイリングデータは収集されません。実験では、ハードウェアカウンタオーバーフロープロファイリングとクロックベースのプロファイリングの両方を指定できます。ハードウェアカウンタオーバーフロープロファイリングを指定しても、クロックプロファイリングは (デフォルトで有効になっていても) 無効になりません。

-s option を使用した同期待ちトレース

同期待ちトレースデータを収集します。option に使用できる値は次のとおりです。

on

同期遅延トレースを有効にし、実行時の調整によってしきい値を設定します。

calibrate

on と同じです。

off

同期遅延トレースを無効にします。

n

n マイクロ秒のしきい値で同期遅延トレースを有効にします。n が 0 である場合は、すべてのイベントをトレースします。

all

同期遅延トレースを有効にし、すべての同期イベントをトレースします。

デフォルトでは、同期遅延トレースを無効にします。

Java プログラムの場合は、JVM マシン内のネイティブな同期呼び出しではなく、ユーザーコード内の Java モニターの同期イベントを記録します。

Oracle Solaris では、次の関数がトレースされます。

mutex_lock()
rw_rdlock()
rw_wrlock()
cond_wait()
cond_timedwait()
cond_reltimedwait()
thr_join()
sema_wait()
pthread_mutex_lock()
pthread_rwlock_rdlock()
pthread_rwlock_wrlock()
pthread_cond_wait()
pthread_cond_timedwait()
pthread_cond_reltimedwait_np()
pthread_join()
sem_wait()

Linux では、次の関数がトレースされます。

pthread_mutex_lock()
pthread_cond_wait()
pthread_cond_timedwait()
pthread_join()
sem_wait()

-H option を使用したヒープトレースデータ

ヒープトレースデータを収集します。option に使用できる値は次のとおりです。

on

メモリー割り当てリクエストのトレースを有効にします。

off

メモリー割り当てリクエストのトレースを無効にします。

デフォルトでは、ヒープのトレースは無効です。

ヒープトレースイベントはネイティブな呼び出しについて記録され、mmap の呼び出しは、メモリー割り当てとして扱われます。

ヒーププロファイリングは、Java プログラムに対してはサポートされていません。これを指定すると、エラーとして扱われます。

ヒープトレースにより、非常に大きな実験が生成される可能性があることに注意してください。このような実験は、ロードや参照が非常に遅くなります。

–i option を使用した I/O トレース

I/O トレースデータを収集します。option に使用できる値は次のとおりです。

on

I/O 操作のトレースを有効にします。

off

I/O 操作のトレースを無効にします。

I/O トレースはデフォルトでは実行されません。I/O トレースは、非常に大きな実験を生成する可能性があり、このような実験ではロードや参照が非常に遅くなります。

–c option を使用したカウントデータ

カウントデータを記録します (Oracle Solaris システムの場合のみ)。

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

on

カウントデータを有効にします。

static

すべての命令が正確に 1 回実行されたという前提に基づいて、シミュレートされたカウントデータを有効にします。

off

カウントデータを無効にします。

デフォルトでは、カウントデータの収集を無効にします。ほかの種類のデータについて、カウントデータを収集することはできません。

カウントデータおよびシミュレートされたカウントデータの場合、実行可能ファイルと、計測され静的にリンクしているすべての共有オブジェクトがカウントされます。シミュレートされたものではないカウントデータの場合、動的にロードされた共有オブジェクトも計測されカウントされます。

Oracle Solaris では、特別なコンパイルは不要ですが、コンパイルフラグ -p、-pg、-qp、-xpg、および –-xlinkopt を使用したカウントオプションは互換性がありません。

Linux では、カウントデータを収集するには実行可能ファイルを -annotate=yes フラグでコンパイルする必要があります。

Oracle Linux 5 では、実行時リンカー監査インタフェース (rtld-audit または LD_AUDIT とも呼ばれます) が不安定なため、カウントデータの収集が妨げられる可能性があります。

–I directory を使用してカウントデータ計測ディレクトリを指定する

カウントデータ計測のディレクトリを指定します。このオプションは Oracle Solaris システム上でのみ使用可能であり、–c オプションも同時に指定されている場合にのみ意味があります。

–N library-name を使用して除外されるライブラリを指定する

カウントデータの計測から除外するライブラリを指定します。ここで指定したものは、ライブラリが実行可能ファイルにリンクされているか、dlopen() によってロードされるかにかかわらず、除外されます。このオプションは Oracle Solaris システム上でのみ使用可能であり、–c オプションも同時に指定されている場合にのみ意味があります。–N オプションは複数指定できます。

-S option を使用した標本データ

標本パケットを定期的に記録します。option に使用できる値は次のとおりです。

off

定期的な標本収集を無効にします。

on

デフォルトの標本収集間隔 (1 秒) で定期的な標本収集を有効にします。

n

n (秒単位) の標本収集間隔で定期的な標本収集を有効にします。n は正である必要があります。

デフォルトでは、1 秒間隔による定期的標本収集が有効になります。

データ指定の引数が指定されていない場合は、デフォルトの分解能を使用して、クロックプロファイリングが実行されます。

クロックプロファイリングが明示的に無効になっており、かつハードウェアカウンタオーバーフロープロファイリングまたは何らかの種類のトレースのどちらも有効になってない場合は、collect は、関数レベルのデータが収集されないという警告を表示したあと、ターゲットを実行してグローバルデータを記録します。

–r option を使用したデータ競合およびデッドロックの検出

スレッドアナライザ用に、データ競合検出またはデッドロック検出のデータを収集します。

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

race

データの競合を検出するためのデータを収集します。

deadlock

デッドロックおよび潜在的デッドロックを検出するためのデータを収集します。

all

データの競合、デッドロック、および潜在的デッドロックを検出するためのデータを収集します。race,deadlock としても指定できます。

off

データの競合、デッドロック、および潜在的デッドロックのデータ収集を無効にします。

on

データの競合を検出するためのデータを収集します (race と同じ)。

terminate

回復不可能なエラーが検出された場合は、ターゲットプロセスを終了します。

abort

回復不可能なエラーが検出された場合は、ターゲットプロセスを終了してコアダンプを出力します。

continue

回復不可能なエラーが検出された場合も、プロセスの続行を許可します。

デフォルトでは、スレッドアナライザのすべてのデータの収集を無効にします。terminateabort、および continue オプションは、どのデータ収集オプションにも追加できます。これらのオプションは、実際の (潜在的でない) デッドロックなどの回復不可能なエラーが発生した場合の動作を管理します。デフォルトの動作は terminate です。

スレッドアナライザのデータは、トレースデータとともに収集することはできませんが、クロックまたはハードウェアカウンタプロファイリングデータと組み合わせて収集できます。スレッドアナライザのデータはターゲットの実行速度を大幅に低下させるため、プロファイルをユーザーコードに適用しても意味がない可能性があります。

スレッドアナライザの実験は、analyzer または tha のどちらかで検査できます。スレッドアナライザ (tha) はデフォルトのデータビューの単純なリストを表示しますが、それ以外は同じです。

データ競合の検出を有効にする前に、コンパイル時に実行可能ファイルを計測するか、ポストプロセッサを呼び出して実行可能ファイルを計測する必要があります。ターゲットが計測されず、かつそのライブラリリスト上のどの共有オブジェクトも計測されない場合は、警告が表示されますが、実験は実行されます。スレッドアナライザのその他のデータには計測は必要ありません。

collect -r コマンドとスレッドアナライザの詳細は、Oracle Solaris Studio 12.4: スレッドアナライザユーザーズガイド および tha(1) のマニュアルページを参照してください。

–M option を使用した MPI プロファイリング

MPI 実験の収集を指定します。collect コマンドのターゲットは mpirun コマンドである必要があります。また、mpirun コマンドのオプションは、‐‐ オプションを使って mpirun コマンドによって実行されるターゲットプログラムと分けて指定されることが必要です。(mpirun コマンドでは常に ‐‐ オプションを使用することで、collect コマンドとそのオプションを mpirun コマンド行の先頭に追加し、実験を収集できます。)実験には通常どおりに名前が付けられ、親の実験として参照されます。そのディレクトリには、MPI プロセスそれぞれのサブ実験が含まれ、ランクで名前が付けられます。

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

MPI-version

指定された MPI バージョンを前提にして、MPI 実験の収集を有効にします。認識された MPI のバージョンは、引数なしで collect を入力したとき、または -M で指定された認識されないバージョンに応答して出力されます。

off

MPI 実験の収集を無効にします。

デフォルトでは、MPI 実験の収集は無効になっています。MPI 実験の収集が有効な場合、–m オプションのデフォルト設定は on に変更されます。

collect -h コマンドをほかのオプションを指定せずに入力するか、または –M オプションで認識されないバージョンを指定した場合は、MPI のサポートされているバージョンが出力されます。

–m option を使用した MPI トレース

MPI トレースデータを収集します。

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

on

MPI トレース情報を有効にします。

off

MPI トレース情報を無効にします。

MPI トレースは、デフォルトで無効です。ただし –M オプションが有効な場合は、デフォルトで有効になります。通常、MPI 実験は –M オプションで収集され、MPI トレースのユーザー制御は不要です。MPI 実験の収集を行うが、MPI トレースデータは収集しない場合、明示的なオプションの –M MPI-version –m off を使用します。

呼び出しがトレースされる MPI 関数とトレースデータをもとに計算されるメトリックの詳細については、MPI トレースデータを参照してください。