Perf

perf （"Perf Events"あるいは"perf tools"。元々は"Performance Counters for Linux"やPCLと呼ばれていた）は、Linuxカーネル2.6.31以降で使用可能な、Linuxの性能解析ツールである。 'perf'というユーザースペースの操作ユーティリティーは、Gitのようなサブコマンドを持つインターフェースを採用している。このユーティリティーは、システム全体(カーネル及びユーザーコードの両方)、シングルCPU、あるいは数スレッドの統計プロファイリングが可能である。 また、perfはハードウェアパフォーマンスカウンタ（英語版）、トレースポイント、ソフトウェアパフォーマンスカウンタ（例: hrtimer）、ダイナミックプローブ（例: kprobesやuprobes）をサポートしている。 2012年、IBMは（OProfile（英語版）とともに）perfを、Linuxで使われる最も一般的な二つのパフォーマンスカウンタ（英語版）プロファイリングツールのうちの一つであると認めた。 perfは以下のようなサブコマンドとともに使用する。 stat: 一つのプログラムやある時間でのシステムのトータルイベントカウントを測る top: topライクな最も使用された関数の動的表示 record: 一つのプログラムのサンプリングレートを測り保存する report: perf recordによって生成されたファイルを分析（perf recordはフラットやグラフプロファイリングが生成可能） annotate: ソースまたはアセンブリを注解する sched: スケジューラー動作とレイテンシのトレース・測定 list: 利用可能なイベントを一覧する このユーティリティとカーネル間のインターフェースは一つのシステムコールのみからなり、ファイルディスクリプタとmmapされたメモリ領域を通して完了する。 oprofileやLTTngとは違い、サービスデーモンは不要であり、大部分の機能はカーネルに統合されている。perfユーティリティは定期的にmmapされたバッファーからディスクへと生データをダンプする。 R. Vitillo（LBNL）は、「perfは低オーバーヘッドのプロファイリングツールである」と述べている。 2010年時点で、ハードウェアカウンターのサポートをするアーキテクチャは以下の通りである。x86、PowerPC64、UltraSPARC (III及びIV)、ARM（v5、v6、v7、Cortex-A8及び-A9）、Alpha EV56、SH。 新しいインテルCPUにおけるLast Branch Recordsとbranch tracingの実装の使用はパッチを適用するで利用できる。 perfはRHEL6、Debian Squeezeやその他のポピュラーなLinuxディストリビューションで対応されている。 perfのドキュメントはあまり詳しくなく(2012年時点)、たとえば、大部分のイベントやそれらのエイリアスがドキュメント化されていない。また、perf toolsは、本当のwall-clock時間に基づいたプロファイリングを行えない。 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 [脚注の使い方] ^ Vince Weaver, The Unofficial Linux Perf Events Web-Page ^ Vince Weaver. “Linux perf event Features and Overhead”. 2013 FastPath Workshop. 2013年10月1日閲覧。 ^ 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" ^ a b Arnaldo Carvalho de Melo, The New Linux ’perf’ tools, presentation from Linux Kongress, September, 2010 ^ A. Zanella, R. Arnold. Evaluate performance for Linux on POWER. Analyze performance using Linux tools, 12 Jun 2012 // IBM DeveloperWorks Technical library ^ a b Urs Fässler perf file format, CERN OpenLab（英語版）, 2011 ^ Ingo Molnar（英語版）, 'perf sched': Utility to capture, measure and analyze scheduler latencies and behavior, 17 Sep 2009 ^ a b c Roberto A. Vitillo (LBNL). PERFORMANCE TOOLS DEVELOPMENTS, 16 June 2011, presentation from "Future computing in particle physics" conference ^ 6.4. Performance Counters for Linux (PCL) Tools and perf // RHEL Developer Guide ^ http://packages.debian.org/squeeze/linux-tools-2.6.32 ^ http://rhaas.blogspot.ru/2012/06/perf-good-bad-ugly.html ^ Michael Larabel (2013年5月15日). “New Linux Kernel Vulnerability Exploited”. Phoronix. 2013年7月18日閲覧。 ^ corbet (2013年5月15日). “Local root vulnerability in the kernel”. LWN. 2013年7月18日閲覧。 ^ Joe Damato (2013年5月20日). “A closer look at a recent privilege escalation bug in Linux (CVE-2013-2094)”. 2013年7月18日閲覧。 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