Perf

perf （"Perf Events"Vince Weaver, The Unofficial Linux Perf Events Web-Pageあるいは"perf tools"。元々は"Performance Counters for Linux"やPCLと呼ばれていた）は、Linuxカーネル2.6.31以降で使用可能な、Linuxの性能解析ツールであるJake Edge, Perfcounters added to the mainline, LWN July 1, 2009, "perfcounters being included into the mainline during the recently completed 2.6.31 merge window"。

'perf'というユーザースペースの操作ユーティリティーは、Gitのようなサブコマンドを持つインターフェースを採用している。このユーティリティーは、システム全体(カーネル及びユーザーコードの両方)、シングルCPU、あるいは数スレッドの統計プロファイリングが可能である。

また、perfは、トレースポイント、ソフトウェアパフォーマンスカウンタ（例: hrtimer）、ダイナミックプローブ（例: kprobesやuprobes）をサポートしている。

2012年、IBMは（とともに）perfを、Linuxで使われる最も一般的な二つのプロファイリングツールのうちの一つであると認めたA. Zanella, R. Arnold. Evaluate performance for Linux on POWER. Analyze performance using Linux tools,  12 Jun 2012 // IBM DeveloperWorks Technical library。

 サブコマンド 
perfは以下のようなサブコマンドとともに使用する。
stat: 一つのプログラムやある時間でのシステムのトータルイベントカウントを測る
top: topライクな最も使用された関数の動的表示
record: 一つのプログラムのサンプリングレートを測り保存するUrs Fässler
perf file format, , 2011
report: perf recordによって生成されたファイルを分析（perf recordはフラットやグラフプロファイリングが生成可能）
annotate: ソースまたはアセンブリを注解する
sched: スケジューラー動作とレイテンシのトレース・測定, 'perf sched': Utility to capture, measure and analyze scheduler latencies and behavior, 17 Sep 2009
list: 利用可能なイベントを一覧する

 実装 
このユーティリティとカーネル間のインターフェースは一つのシステムコールのみからなり、ファイルディスクリプタとmmapされたメモリ領域を通して完了するRoberto A. Vitillo (LBNL). PERFORMANCE TOOLS DEVELOPMENTS, 16 June 2011, presentation from "Future computing in particle physics" conference。

oprofileやLTTngとは違い、サービスデーモンは不要であり、大部分の機能はカーネルに統合されている。perfユーティリティは定期的にmmapされたバッファーからディスクへと生データをダンプする。

R. Vitillo（LBNL）は、「perfは低オーバーヘッドのプロファイリングツールである」と述べている。

2010年時点で、ハードウェアカウンターのサポートをするアーキテクチャは以下の通りである。x86、PowerPC64、UltraSPARC (III及びIV)、ARM（v5、v6、v7、Cortex-A8及び-A9）、Alpha EV56、SHArnaldo Carvalho de Melo, The New Linux ’perf’ tools, presentation from Linux Kongress, September, 2010。

新しいインテルCPUにおけるLast Branch Recordsとbranch tracingの実装の使用はパッチを適用するで利用できる。

perfはRHEL66.4. Performance Counters for Linux (PCL) Tools and perf // RHEL Developer Guide、Debian Squeezehttp://packages.debian.org/squeeze/linux-tools-2.6.32やその他のポピュラーなLinuxディストリビューションで対応されている。

 批評 
perfのドキュメントはあまり詳しくなく(2012年時点)、たとえば、大部分のイベントやそれらのエイリアスがドキュメント化されていない。また、perf toolsは、本当のwall-clock時間に基づいたプロファイリングを行えないhttp://rhaas.blogspot.ru/2012/06/perf-good-bad-ugly.html。

Linuxカーネル 2.6.37から3.8.8までおよびRHEL6カーネル 2.6.32のPerfサブシステムは、ローカルユーザーからroot特権へと昇格可能なことが実証されたセキュリティ脆弱性が含まれる（CVE-2013-2094）。この問題は、event_idの検証コードパスにおいて、間違った型（64ビットの代わりに32ビットint）を使用したことが原因であった。

 関連項目 
 :en:Performance Application Programming Interface
 性能解析
 :en:List of performance analysis tools

 出典 

外部リンク
 perf's wiki on kernel.org
 Arnaldo Carvalho de Melo, The New Linux ’perf’ tools, presentation from Linux Kongress, September, 2010
 Linux kernel profiling with perf tutorial
 Hardware PMU support charts - check perf_event column

Category:Linux