cpustat - CPU パフォーマンスカウンタを使用したシステム動作の監視
cpustat -c eventspec [-c eventspec]... [-p period] [-T u | d ] [-Dmnst] [-A cor|soc|bins] [-k keys] [-o limit] [-I statfile] [-O statfile] [interval [count]]
cpustat -h
cpustat ユーティリティーでは、CPU パフォーマンスカウンタを使ってシステム内の CPU の動作全体を監視できます。
interval が指定された場合、cpustat はアクティビティーを interval 秒ごとにサンプリングします (これを無限に繰り返す)。count が指定された場合、統計が count 回繰り返されます。どちらも指定されなかった場合は、5 秒の間隔が使用され、採取されるサンプルの数に制限はありません。
サポートしているオプションは、次のとおりです。
出力をコア ID で集計します。同じコア ID のデータ行は、1 行に集計されます。デフォルトでは、列は小計で置き換えられます。–m オプションでは、代わりに列の平均を出力します。
出力をソケット ID で集計します。同じソケット ID のデータ行は、1 行に集計されます。デフォルトでは、列は小計で置き換えられます。–m オプションでは、代わりに列の平均を出力します。
行を集約して各サンプリング期間内のビンの数を減らし、それらを出現する順番にグループ化して、各ビンの行に対する縦欄式の小計を出力します。小計ではなく算術平均を計算するには、–m オプションを使用できます。ソートオプション –k を使用して、ビン化の段階の前に行の順序を変更できます。sze 列には、各ビン内の CPU の数が出力されます。BIN 列は CPU 列を置き換えて、各 bin の序数を出力します。
監視する CPU パフォーマンスカウンタ用のイベントセットを指定します。これらのイベント指示子の構文を次に示します。
[picn=]eventn[,attr[n][=val]][,[picn=]eventn [,attr[n][=val]],...,]
–h オプションを使用すると、使用可能なイベントと属性の一覧を取得できます。これにより、使用法に関するメッセージが表示されます。明示的なカウンタの割り当ては省略できます。その場合、cpustat は有効なカウンタの選択を自動的に試みます。
属性値は、strtoll(3C) に適した形式 (16 進数、8 進数、または 10 進数) で表現できます。イベント指示子の属性に明示的な値が指定されていない場合、デフォルト値の 1 が使用されます。対応するカウンタ番号のない属性は、指示子内のすべてのカウンタに適用されます。
これらのイベント指示子のセマンティクスを確認するには、CPU の製造元のドキュメントでイベントに関する記述を参照してください。
複数の –c オプションを指定できます (その場合、コマンドはサンプルごとに異なるイベント設定に切り替えます)。
デバッグモードを有効にします。
ユーティリティーの使用方法やプロセッサ依存カウンタのプログラム方法に関する広範なヘルプメッセージを出力します。
以前に statfile 内に保存したデータを再実行します。–O を指定して、再実行用のデータファイルを作成します。このオプションが特に役立つのは、多数の CPU を搭載したマシンの統計情報を分析する場合です。ファイルは、異なるソートおよび集計オプションを使用して何度も再処理されることがあります。
–I オプションは、間隔およびカウントの仕様と互換性がありません。
ファイル名が — (ハイフン) の場合は、標準入力から読み取ります。
各サンプリング期間内の行を、key1、次に key2、という具合に最上位から最下位へとソートします。各鍵は、コンマ区切りのイベントのリストです。複数の –k オプションを指定できます。
cpustat に複数の –c event-spec オプションを指定して実行すると、代替 event-spec のレポートが生成されます。各 event-spec を異なる仕方でソートするには、複数の –k オプションを指定します。各 event-spec で、適切なイベントサブセットを含む鍵を event-spec 内に持つ最初の –k オプションが使用されます。
複数 CPU 上のデータの集計に –b または –i が使用される場合、合計ではなく算術平均値を出力します。
すべてのヘッダー出力を省略します (cpustat がパイプラインの先頭の場合に役立ちます)。
ソートおよび集計のオプションの適用後に、各サンプリング期間内の最初の num 行だけを出力します。
すべてのデータを statfile に保存します。このデータは、–I を使用してあとで再実行できます。
ファイル名が — (ハイフン) の場合、標準出力に書き込みます。
–O の目的は、利用可能な全データを取得することです。これは、データ整理オプション –A、–k、–m、および –o と互換性がありません。
cpustat が period 秒ごとに eventspec のリスト内を切り替えます。このツールは、各サイクルのあと、最初の eventspec が測定されてから period 秒が経過するまでスリープします。
このオプションが存在する場合、オプションの count パラメータは、(採取するサンプルの合計数ではなく) 実行するサイクルの合計数を指定します。period が eventspec 数と interval の積より小さい場合、ツールは期間が 0 であるかのように動作します。
システム専用 eventspec がバインドされている間スピンするアイドル soaker スレッドを作成します。現在のプロセッサセット内の各 CPU に 1 つのアイドル soaker スレッドがバインドされます。システム専用 eventspec は、nouser トークンと sys トークンの両方を含み、CPU が特権モードで動作している間に発生するイベントを測定します。このオプションは、カーネルのアイドルループが実行されてシステムモードイベントをトリガーすることを防ぎます。
タイムスタンプを表示します。
時間の内部表現の出力表現に u を指定します。time(2) を参照してください。 標準の日付フォーマットに d を指定します。date(1) を参照してください。
出力にプロセッサのサイクル数の列を追加します (現在のアーキテクチャーで可能な場合)。
密接に関係するユーティリティー cputrack(1) を使用することで、システム上のほかのアクティビティーからほとんどまたはまったく干渉されずに個々のアプリケーションの動作を監視できます。
cpustat が CPU パフォーマンスカウンタをシステム全体で使用することと、cputrack などが個々のプロセスを監視するために CPU パフォーマンスカウンタを使用することの間に本質的な競合があるため、cpustat ユーティリティーはスーパーユーザーによって実行される必要があります。
このユーティリティーのインスタンスが起動したあとは、ユーティリティーの最後のインスタンスが終了するまで、プロセス単位または LWP 単位のカウンタを使用することは許可されません。
コマンドから出力される時間は、プログラムがカーネルに要求したサンプリング時間ではなく、ハードウェアカウンタが実際にサンプリングされた時計に対応しています。この時間は、gethrtime(3C) と同じタイムベースに基づいています。
–t オプションで有効されたプロセッサのサイクル数は、パフォーマンスカウンタのレジスタに適用された設定に関係なく、常にユーザーモードとシステムモードの両方に適用されます。
「sys」トークンを使ってシステムモードで実行されるハードウェアプラットフォームの一部では、32 ビットレジスタを使ってカウンタが実装されています。カーネルは 64 ビットカウンタを合成するためにすべてのオーバーフローを捕捉しようとしますが、ハードウェア実装制限により、サンプリング間隔を十分に短く保たないかぎりオーバーフローが失われる可能性があります。ラップする可能性が高いイベントは、プロセッサクロックサイクルをカウントするイベントです。そのようなイベントが対象の場合は、40 億以上のクロックサイクルがサンプル間で起きるように、サンプリングをより頻繁に発生させるようにしてください。
cpustat の出力は nawk(1) や perl(1) で解析できるように設計されているため、cpustat をスクリプトに埋め込むことによってパフォーマンスツールを作成できます。または、libcpc(3LIB) の機能を使用して、cpustat を構築したときと同じ API を直接使ってツールを構築することもできます。cpc(3CPC) を参照してください。
cpustat ユーティリティーは、現在のプロセッサセット内でアクセスできる CPU だけを監視します。したがって、ユーティリティーのいくつかのインスタンスが、異なるプロセッサセット内の CPU 上で実行されている場合があります。プロセッサセットの詳細については、psrset(1M) を参照してください。
cpustat は CPU にバインドされた LWP を使用するため、関連するプロセッサの構成を変更するにはユーティリティーを終了する必要がある場合があります。
次の例では、外部キャッシュでの失敗と参照を測定しています。これらは、UltraSPARC マシン上のプロセッサがユーザーモードで動作している間に発生します。
example% cpustat -c EC_ref,EC_misses 1 3 time cpu event pic0 pic1 1.008 0 tick 69284 1647 1.008 1 tick 43284 1175 2.008 0 tick 179576 1834 2.008 1 tick 202022 12046 3.008 0 tick 93262 384 3.008 1 tick 63649 1118 3.008 2 total 651077 18204
次の例では、Pentium 4 マシン上でユーザーモードとシステムモードで分岐予測ミスと分岐命令合計を測定しています。
example% cpustat -c \ pic12=branch_retired,emask12=0x4,pic14=branch_retired,\ emask14=0xf,sys 1 3 time cpu event pic12 pic14 1.010 1 tick 458 684 1.010 0 tick 305 511 2.010 0 tick 181 269 2.010 1 tick 469 684 3.010 0 tick 182 269 3.010 1 tick 468 684 3.010 2 total 2063 3101使用例 3 Opteron 上でメモリーアクセスをカウントする
次の例では、Opteron 上の各メモリーコントローラ経由で行われたメモリーアクセスの数 (内部メモリー待ち時間別) を確認しています。
cpustat -c \ pic0=NB_mem_ctrlr_page_access,umask0=0x01, \ pic1=NB_mem_ctrlr_page_access,umask1=0x02, \ pic2=NB_mem_ctrlr_page_access,umask2=0x04,sys \ 1 time cpu event pic0 pic1 pic2 1.003 0 tick 41976 53519 7720 1.003 1 tick 5589 19402 731 2.003 1 tick 6011 17005 658 2.003 0 tick 43944 45473 7338 3.003 1 tick 7105 20177 762 3.003 0 tick 47045 48025 7119 4.003 0 tick 43224 46296 6694 4.003 1 tick 5366 19114 652使用例 4 フィルタを使用した複数 CPU の表示
次のコマンドは、DTLB_miss 率がもっとも高い 3 つの CPU を表示します。
example% cpustat -c DTLB_miss -k DTLB_miss -n 3 1 1 time cpu event DTLB_miss 1.040 115 tick 107 1.006 18 tick 98 1.045 126 tick 31 1.046 96 total 236 event DTLB_miss total 236使用例 5 フィルタによる複数 CPU の四分位数への集計
次のコマンドは、DTLB ミス率を使用して 256 個の CPU を四分位数に集計します。
example% cpustat -c DTLB_miss -b 4 -k DTLB_miss -m 1 1 time bin event DTLB_miss sze 1.032 0 tick 46 24 1.021 1 tick 3 24 1.007 2 tick 2 24 1.022 3 tick 0 24 1.045 4 total 51 24 event DTLB_miss total 51使用例 6 複数イベントのソート
次のコマンドシーケンスは、複数のイベントをソートします。
example% cpustat -O /tmp/OUT -c ITLB_miss,DTLB_miss -c PAPI_tot_ins 1 2 example% cpustat -I /tmp/OUT -b 4 -k ITLB_miss -k PAPI_tot_ins time bin event ITLB_miss DTLB_miss sze 1.020 0 tick 129 673 24 1.009 1 tick 0 61 24 1.005 2 tick 0 79 24 1.039 3 tick 0 64 24 1.082 4 total 129 877 24 time bin event PAPI_tot_ins sze 2.073 0 tick 51947 24 2.020 1 tick 14976 24 2.076 2 tick 14976 24 2.004 3 tick 14976 24 2.082 4 total 96875 24 event ITLB_miss DTLB_miss PAPI_tot_ins total 129 877 96875
cpustat コマンドを実行することで、スーパーユーザーは既存のすべてのパフォーマンスカウンタコンテキストを強制的に無効にします。これにより、cputrack コマンドのすべての呼び出しやパフォーマンスカウンタコンテキストのほかのユーザーが、途中で予期しないエラーで終了する場合があります。
cpustat が、Solaris でサポートされていない CPU パフォーマンスカウンタの存在するシステムで呼び出されると、次のメッセージが表示されます。
cpustat: cannot access performance counters - Operation not applicable
このエラーメッセージは、cpc_open() が失敗したことを意味し、cpc_open(3CPC) に記述されています。この問題および実行可能な解決方法については、このドキュメントを参照してください。
短い間隔が要求された場合、cpustat は目的のサンプリングレートを満たせないことがあります。この場合は、サンプリングの一部が行われないことがあります。
属性についての詳細は、マニュアルページの attributes(5) を参照してください。
|
cputrack(1), nawk(1), perl(1), iostat(1M), prstat(1M), psrset(1M), vmstat(1M), cpc(3CPC), cpc_open(3CPC), cpc_bind_cpu(3CPC), gethrtime(3C), strtoll(3C), libcpc(3LIB), attributes(5)
ハイパースレッドが有効になっている Pentium 4 上で cpustat が実行されると、各物理 CPU の 1 つの論理 CPU のみに CPC セットがバインドされます。cpc_bind_cpu(3CPC) を参照してください。