1回目は、perfの基本的な使い方について記載する。
作成したプログラムの性能を測定するのに、特殊な設定をしないで使うことができるので便利である。
たとえば、lsコマンドの性能を測定したければ、以下のように入力する。
$ perf stat ls
すると測定結果が以下ように表示される。
---------------------------------------------------------------------------------
Performance counter stats for 'ls':
1.596928 task-clock # 0.371 CPUs utilized
67 context-switches # 0.042 M/sec
0 cpu-migrations # 0.000 K/sec
291 page-faults # 0.182 M/sec
4,239,166 cycles # 2.655 GHz
3,296,123 stalled-cycles-frontend # 77.75% frontend cycles idle
1,998,801 instructions # 0.47 insns per cycle
# 1.65 stalled cycles per insn
393,089 branches # 246.153 M/sec
15,010 # 3.82% of all branches
0.004305785 seconds time elapsed
---------------------------------------------------------------------------------
task-clock : OSが実行プロセスに割り振った実行時間(ms)
context-switches : コンテキストが切り替わった回数
cpu-migrations : CPUを移動した回数
page-faults : ページフォルトが発生した回数
cycles : 使用したCPUサイクル数
stalled-cycles-frontend : フロントエンドで命令が止まったサイクル数(CPU依存)
stalled-cycles-backend : バックエンドで命令が止まったサイクル数(CPU依存)
instructions : リタイアした命令数
branches : 分岐命令の実行回数
branch-misses : 分岐予測をミスした回数
デフォルトで測定されるイベント以外を使ってみよう。
perfで測定できるイベントを調べるには以下を実行する。
$ perf list
すると以下のように測定できるイベントの一覧が表示される。
---------------------------------------------------------------------------------
List of pre-defined events (to be used in -e):
cpu-cycles OR cycles [Hardware event]
instructions [Hardware event]
cache-references [Hardware event]
cache-misses [Hardware event]
branch-instructions OR branches [Hardware event]
branch-misses [Hardware event]
bus-cycles [Hardware event]
ref-cycles [Hardware event]
cpu-clock [Software event]
task-clock [Software event]
page-faults OR faults [Software event]
context-switches OR cs [Software event]
cpu-migrations OR migrations [Software event]
minor-faults [Software event]
major-faults [Software event]
alignment-faults [Software event]
emulation-faults [Software event]
dummy [Software event]
---------------------------------------------------------------------------------
使用したいイベントを指定する方法は以下のようにする。
$ perf stat -e cache-references,cache-misses ls
---------------------------------------------------------------------------------
Performance counter stats for 'ls':
33,448 cache-references
5,701 cache-misses # 17.044 % of all cache refs
0.003821157 seconds time elapsed
---------------------------------------------------------------------------------
指定したイベントが測定されました。
標準でもたくさんのイベントが用意されているので結構使えます。
次回は、標準で用意されていないイベントを測定する方法です。