Go to main content

マニュアルページ セクション 8: システム管理コマンド

印刷ビューの終了

更新: 2018年8月8日
 
 

cpustat(8)

名前

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 秒の間隔が使用され、採取されるサンプルの数に制限はありません。

オプション

サポートしているオプションは、次のとおりです。

–A cor

出力をコア ID で集計します。同じコア ID のデータ行は、1 行に集計されます。デフォルトでは、列は小計で置き換えられます。–m オプションでは、代わりに列の平均を出力します。

–A soc

出力をソケット ID で集計します。同じソケット ID のデータ行は、1 行に集計されます。デフォルトでは、列は小計で置き換えられます。–m オプションでは、代わりに列の平均を出力します。

–A bins

行を集約して各サンプリング期間内のビンの数を減らし、それらを出現する順番にグループ化して、各ビンの行に対する縦欄式の小計を出力します。小計ではなく算術平均を計算するには、–m オプションを使用できます。ソートオプション –k を使用して、ビン化の段階の前に行の順序を変更できます。sze 列には、各ビン内の CPU の数が出力されます。BIN 列は CPU 列を置き換えて、各 bin の序数を出力します。

–c eventspec

監視する CPU パフォーマンスカウンタ用のイベントセットを指定します。これらのイベント指示子の構文を次に示します。


[picn=]eventn[,attr[n][=val]][,[picn=]eventn
     [,attr[n][=val]],...,]

ここで、picn は、n 番目のパフォーマンス計測カウンタレジスタであり、pic0、pic1 のように指定されます。レジスタの数はマシン固有です。詳細は、CPU メーカーのドキュメントを参照してください。

–h オプションを使用すると、使用可能なイベントと属性の一覧を取得できます。これにより、使用法に関するメッセージが表示されます。明示的なカウンタの割り当ては省略できます。その場合、cpustat は有効なカウンタの選択を自動的に試みます。

属性値は、strtoll(3C) に適した形式 (16 進数、8 進数、または 10 進数) で表現できます。イベント指示子の属性に明示的な値が指定されていない場合、デフォルト値の 1 が使用されます。対応するカウンタ番号のない属性は、指示子内のすべてのカウンタに適用されます。

これらのイベント指示子のセマンティクスを確認するには、CPU の製造元のドキュメントでイベントに関する記述を参照してください。

複数の –c オプションを指定できます (その場合、コマンドはサンプルごとに異なるイベント設定に切り替えます)。

–D

デバッグモードを有効にします。

–h

ユーティリティーの使用方法やプロセッサ依存カウンタのプログラム方法に関する広範なヘルプメッセージを出力します。

–I statfile

以前に statfile 内に保存したデータを再実行します。–O を指定して、再実行用のデータファイルを作成します。このオプションが特に役立つのは、多数の CPU を搭載したマシンの統計情報を分析する場合です。ファイルは、異なるソートおよび集計オプションを使用して何度も再処理されることがあります。

–I オプションは、間隔およびカウントの仕様と互換性がありません。

ファイル名が (ハイフン) の場合は、標準入力から読み取ります。

–k key1,...

各サンプリング期間内の行を、key1、次に key2、という具合に最上位から最下位へとソートします。各鍵は、コンマ区切りのイベントのリストです。複数の –k オプションを指定できます。

cpustat に複数の –c event-spec オプションを指定して実行すると、代替 event-spec のレポートが生成されます。各 event-spec を異なる仕方でソートするには、複数の –k オプションを指定します。各 event-spec で、適切なイベントサブセットを含む鍵を event-spec 内に持つ最初の –k オプションが使用されます。

–m

複数のコア、ソケット、またはビンにわたる集計に –A オプションが使用される場合に、合計ではなく算術平均値を出力します。

–n

すべてのヘッダー出力を省略します (cpustat がパイプラインの先頭の場合に役立ちます)。

–o num

ソートおよび集計のオプションの適用後に、各サンプリング期間内の最初の num 行だけを出力します。

–O statfile

すべてのデータを statfile に保存します。このデータは、–I を使用してあとで再実行できます。

ファイル名が (ハイフン) の場合、標準出力に書き込みます。

–O の目的は、利用可能な全データを取得することです。これは、データ整理オプション –A–k–m、および –o と互換性がありません。

–p period

cpustatperiod 秒ごとに eventspec のリスト内を切り替えます。このツールは、各サイクルのあと、最初の eventspec が測定されてから period 秒が経過するまでスリープします。

このオプションが存在する場合、オプションの count パラメータは、(採取するサンプルの合計数ではなく) 実行するサイクルの合計数を指定します。periodeventspec 数と interval の積より小さい場合、ツールは期間が 0 であるかのように動作します。

–s

システム専用 eventspec がバインドされている間スピンするアイドル soaker スレッドを作成します。現在のプロセッサセット内の各 CPU に 1 つのアイドル soaker スレッドがバインドされます。システム専用 eventspec は、nouser トークンと sys トークンの両方を含み、CPU が特権モードで動作している間に発生するイベントを測定します。このオプションは、カーネルのアイドルループが実行されてシステムモードイベントをトリガーすることを防ぎます。

–T u | d

タイムスタンプを表示します。

時間の内部表現の出力表現に u を指定します。time(2) を参照してください。 標準の日付フォーマットに d を指定します。date(1) を参照してください。

–t

出力にプロセッサのサイクル数の列を追加します (現在のアーキテクチャーで可能な場合)。

使用法

密接に関係するユーティリティー 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(8) を参照してください。

cpustat は CPU にバインドされた LWP を使用するため、関連するプロセッサの構成を変更するにはユーティリティーを終了する必要がある場合があります。

SPARC

使用例 1 外部キャッシュ参照と失敗を測定する

次の例では、外部キャッシュでの失敗と参照を測定しています。これらは、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

x86

使用例 2 Pentium 4 上で分岐予測の成功を測定する

次の例では、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(7) を参照してください。

属性タイプ
属性値
使用条件
diagnostic/cpu-counters
インタフェースの安定性
確実

関連項目

cputrack(1)nawk(1)perl(1)cpc(3CPC)cpc_bind_cpu(3CPC)cpc_open(3CPC)gethrtime(3C)strtoll(3C)libcpc(3LIB)attributes(7)iostat(8)prstat(8)psrset(8)vmstat(8)

ハイパースレッドが有効になっている Pentium 4 上で cpustat が実行されると、各物理 CPU の 1 つの論理 CPU のみに CPC セットがバインドされます。詳細は、cpc_bind_cpu(3CPC) のマニュアルページを参照してください。