EN JA
PMCSTAT(8)
PMCSTAT(8) FreeBSD System Manager's Manual PMCSTAT(8)

名称

pmcstat性能モニタハードウェアでの性能測定

書式

pmcstat [ -C][ -D pathname][ -E][ -F pathname][ -G pathname][ -M mapfilename][ -N][ -O logfilename][ -P event-spec][ -R logfilename][ -S event-spec][ -T][ -W][ -c cpu-spec][ -d][ -f pluginopt][ -g][ -k kerneldir][ -m pathname][ -n rate][ -o outputfile][ -p event-spec][ -q][ -r fsroot][ -s event-spec][ -t process-spec][ -v][ -w secs][ -z graphdepth][ command [ args]]

解説

pmcstat ユーティリティは、 hwpmc(4) によって提供された機能を使用してシステム性能を測定します。

pmcstat ユーティリティは、システム全体で調べられるハードウェアイベントと指定されたプロセスのセットがシステムの CPU で実行されているとき調べられるものの両方を測定することができます。特定のセットのプロセスが対象とされているなら (例えば、 -t process-spec オプションが指定されるか、または command を使用してコマンドラインで指定されるなら)、 command が終了するまで、または -t process-spec オプションによって指定されたすべてのターゲットプロセスが終了するまで、または pmcstat ユーティリティがユーザによって割り込まれるまで、測定は行われます。特定のプロセスのセットが測定のために対象とされないなら、 pmcstat は、ユーザによって割り込まれるまで、システム全体の測定を実行します。

pmcstat の与えられた呼び出しは、カウントとサンプリングの両方で、システムモードとプロセスモード PMC を混ぜて割り付けることができます。 PMC のすべてカウントの値は、 pmcstat によって一定の間隔をおいて人間に解読可能な形式で印刷 (表示) されます。 PMC のサンプリングの出力は、その後のオフライン分析のためのログファイルに出力するように設定されるか、またはより大きなオーバヘッドを犠牲にして、素早くテキスト形式で印刷されるように設定されます。

測定するハードウェアイベントは、イベント指示子文字列 event-spec を使用して pmcstat に指定されます。これらのイベント指示子の構文は、マシン依存であり、 pmc(3) に文書化されています。

プロセスモード PMC は、ターゲットプロセスの現在と将来の子供によって継承可能となるように設定されます。

オプション

次のオプションが利用可能です:
-C
コマンドラインで指定されるその後のカウントモード PMC のためのカウントの累積か、または増加の表示を切り替えます。デフォルトは、増加のカウントを表示することです。
-D pathname
pathname によって指定されたディレクトリでプログラムごとのサンプルでファイルを作成します。デフォルトは、カレントディレクトリでこれらのファイルを作成することです。
-E
コマンドラインで指定されたその後のプロセスモード PMC のために追跡されたプロセスが終了した時点でのプロセスごとのカウントの表示を切り替えます。このオプションは、 -d オプションに関連して使用されるとき、プロセスの複雑なパイプラインの性能の特性をマップするために役に立ちます。デフォルトは、プロセスごとの追跡を有効にしないことです。
-F pathname
alltree (Kcachegrind) 情報をファイル pathname に印刷します。引数 pathname が“ -”であるなら、この情報は、 -o オプションによって指定された出力ファイルに送られます。
-G pathname
コールチェーン (callchain) 情報をファイル pathname に出力します。引数 pathname が“ -”であるなら、この情報は、 -o オプションによって指定された出力ファイルに送られます。
-M mapfilename
イベントログで遭遇する実行形式オブジェクトと gprof(1) がファイル mapfilename にプロファイルするために使用される簡略化されたパス名の間のマッピングを書き込みます。このオプションが指定されないなら、マッピング情報は、書き込まれません。引数 mapfilename は、“ -”と指定されるかもしれません、その場合、このマッピング情報は、 -o オプションによって設定された出力ファイルに送ります。
-N
その後のサンプリング PMC のためのコールチェーン (callchain) 情報の獲得を切り換えます。デフォルトは、コールチェーン情報を獲得するサンプリング PMC です。
-O logfilename
ログの出力をファイル logfilename に送ります。 logfilename が形式 hostname: port であるなら、(ここで hostname は、‘ .’または‘ /’で始まりません、) pmcstat は、ポート port でホスト hostname へのネットワークソケットをオープンします。

-O オプションが指定されないで、ログ記録オプションの 1 つが要求されるなら、 pmcstat は、設定された出力ファイルへログ記録されたイベントをテキスト形式で印刷 (表示) します。

-P event-spec
event-spec で指定されたハードウェアイベントを測定する PMC をサンプリングするプロセスモードを割り付けます。
-R logfilename
ファイル logfilename のサンプリングデータを使用してオフライン分析を実行します。
-S event-spec
event-spec で指定されたハードウェアイベントを測定する PMC をサンプリングするシステムモードを割り付けます。
-T
サンプリング PMC のためのモードのようなトップを使用します。次のホットキーを使用することができます: 累積モードのための 'c+a' スイッチ、デルタモードのための 'c+d' スイッチ、 'm' は、PMC をマージする、'n' は、視点を変更する、 'p' は、次の PMC を表示する、' ' は、停止する、'q' は、終了する。 calltree 専用は、次の通りですy: 閾値の下の 'f' コスト (cost) は、ドットと見なされます。
-W
それらが CPU でスケジュールされるたびに追跡されたプロセスのスレッドによって調べられる増加カウントのログ記録を切り替えます。これは、システムでのプロセスの動的な振る舞い分析するのを助けることを目的としている実験的機能です。有効であれば、かなりのオーバヘッドとなります。デフォルトは、この機能は、無効となっています。
-c cpu-spec
コマンドラインで指定された次に来るシステムモード PMC の cpu を cpu-spec に設定します。引数 cpu-spec は、コンマで区切られた CPU 番号のリスト、またはすべて停止しない CPU を意味する文字‘*’です。デフォルトは、すべての停止しない CPU でシステムモード PMC を割り付けることです。
-d
ターゲットのプロセスの現在と将来の子供のためにイベントを測定するプロセスモード PMC か、またはターゲットプロセスのためにイベントを測定するだけであるかを切り替えます。デフォルトは、ターゲットプロセスだけのイベントを測定することです。
-f pluginopt
オプション文字列をアクティブなプラグインに渡します。
 
threshold=<float>は、指定された値 (トップ) の下でコストを表示しません。
 
skiplink=0|1 は、ドット (トップ) によって閾値の下でコストを付けたノードを置き換えます。
-g
gprof(1) と互換性のある形式でプロファイルを生成します。個別のプロファイルファイルは、遭遇する実行形式オブジェクトごとに生成されます。プロファイルファイルは、それらの PMC イベント名によって指定されたサブディレクトリに置かれます。
-k kerneldir
カーネルディレクトリのパス名を、引数 kerneldir に設定します。このディレクトリは、 pmcstat がカーネルとそのモジュールをどこで検索するべきであるかを指定します。デフォルトは、 /boot/kernel です。
-m pathname
抽出された PC の名前、それらがある関数の最初と終りのアドレスを印刷します。 pathname 引数は、必須であり、情報がどこに格納されているかを示します。引数 pathname が“ -”であるなら、この情報は、 -o オプションによって指定された出力ファイルに送られます。
-n rate
コマンドラインで指定されたその後のサンプリングモード PMC のデフォルトのサンプリング率を設定します。デフォルトは、65536 イベント毎に CPU の命令ポインタをサンプリングするように PMC を設定することです。
-o outputfile
カウンタの読み込みとテキスト形式で表現されたログ記録データをファイル outputfile に送ります。デフォルトは、ライブデータを集まるとき、出力は、 stderr に送られ、前もって存在しているログファイルを処理するとき、 stdout に送ることです。
-p event-spec
event-spec で指定されたハードウェアイベントを測定する PMC をカウントするプロセスモードを割り付けます。
-q
冗長性を減少します。
-r fsroot
実行形式が位置付けされているファイルシステム階層構造のトップを引数 fsroot に設定します。デフォルトは、 / です。
-s event-spec
event-spec で指定されたハードウェアイベントを測定する PMC をカウントするシステムモードを割り付けます。
-t process-spec
プロセスモード PMC を引数 process-spec によって指定されたプロセスにアタッチします。引数 process-spec は、特定のプロセス ID を指示する負でない整数、またはそれらのコマンド名に基づくプロセスを選択するための正規表現です。
-v
冗長性を増加させます。
-w secs
secs 秒毎のトップモードのために、すべての計数モードの PMC またはサンプリングの PMC の値を印刷します。引数 secs は、小数点値 (fractional value) であるかもしれません。デフォルト間隔は、5 秒です。
-z graphdepth
システム全体のコールグラフ (callgraph) を印刷するとき、コールグラフを引数 graphdepth によって指定された深さ (depth) に制限します。

command が指定されるなら、 execvp(3) を使用して実行されます。

使用例

32768 命令毎に取られるサンプルと、ファイル sample.stat にサンプリングされたデータで、AMD Athlon CPU でシステム全体の統計サンプリングを実行するためには、次を使用します:
pmcstat -O sample.stat -n 32768 -S k7-retired-instructions

firefox を実行して、AMD Athlon で 12 秒毎に、それとその子供によって経験されたデータキャッシュミスの数を測定するためには、次を使用します:

pmcstat -d -w 12 -p k7-dc-misses firefox

指定された“emacs”をすべてのプロセスに対して破棄された命令を測定するためには、次を使用します:

pmcstat -t '^emacs$' -p instructions

10 秒間について、指定された“emacs”をプロセスに対して破棄された命令を測定するためには、次を使用します:

pmcstat -t '^emacs$' -p instructions sleep 10

Intel Pentium Pro/Pentium III SMP システムの CPU 0 と 2 で命令 tlb-miss をカウントするためには、次を使用します:

pmcstat -c 0,2 -s p6-itlb-miss

それによって見られた命令キャッシュミスに基づいて pid 1234 で特定のプロセスのための情報のプロファイルを集めるために、次を使用します:

pmcstat -P ic-misses -t 1234 -O /tmp/sample.out

プロセッサの破棄された命令に基づくすべての設定されたプロセッサでシステム全体のサンプリングを実行するためには、次を使用します:

pmcstat -S instructions -O /tmp/sample.out

コールグラフ (callgraph) 獲得が望まれていないなら、次を使用します:

pmcstat -N -S instructions -O /tmp/sample.out

生成されたイベントログをリモートマシンに送信するには、次を使用します:

pmcstat -S instructions -O remotehost:port

リモートマシンで、 nc(1) を使用して、次のようにサンプルログ記録を集めることができます:

nc -l remotehost port > /tmp/sample.out

サンプルファイルから gprof(1) 互換のプロファイルを生成するためには、次を使用します:

pmcstat -R /tmp/sample.out -g

コールグラフ (callgraph) でシステム全体のプロファイルをファイル foo.graph へ出力するためには、次を使用します:

pmcstat -R /tmp/sample.out -G foo.graph

診断

オプション -v が指定されるなら、 pmcstat は、次の診断メッセージを出力します:
#callchain/dubious-frames
返りアドレスのための“impossible” (不可能な) 値がある callchain レコードの数。
#exec handling errors
解析できない実行形式ファイルを指定するログファイルの exec(2) イベントの数。
#exec/elf
ELF 実行形式ファイルを指定する exec(2) イベントの数。
#exec/unknown
認識されない形式がある実行形式ファイルを指定する exec(2) イベントの数。
#samples/total
ログファイル中のサンプルの合計数。
#samples/unclaimed
知られている実行形式のオブジェクト (すなわち、実行形式、共有ライブラリ、カーネルまたは実行時ローダ) に関連できなかったサンプルの数。
#samples/unknown-object
認識されていないオブジェクト形式で、実行形式と関連しているサンプルの数。


The pmcstat utility exits 0 on success, and >0 if an error occurs.

互換性

gmon.out ファイル形式の制限のために、 -g オプションによって生成された gprof(1) 互換のプロファイルは、クロス実行形式の境界の呼び出しに関する情報を含んでいません。また、生成された gmon.out ファイルは、ネイティブの実行形式のためだけに意味があります。

歴史

pmcstat ユーティリティは、 FreeBSD 6.0 ではじめて登場しました。それは、現在、開発中です。

作者

Joseph Koshy <jkoshy@FreeBSD.org>

バグ

pmcstat ユーティリティは、ネイティブでないアーキテクチャによって生成される hwpmc(4) ログをまだ解析することができません。
September 19, 2008 FreeBSD