perf(perf_events [ 1 ]またはperf ツール、元々はPerformance Counters for Linux、PCLと呼ばれることもある)[ 2 ]は、 Linuxのパフォーマンス分析ツールで、 2009 年のLinux カーネルバージョン 2.6.31から利用可能です。 [ 3 ]という名前のユーザー空間制御ユーティリティは、コマンドラインからアクセスでき、多数のサブコマンドを提供します。システム全体(カーネルとユーザーランドコードの両方)の統計的プロファイリングが可能です。perf
ハードウェアパフォーマンスカウンタ、トレースポイント、ソフトウェアパフォーマンスカウンタ(hrtimerなど)、および動的プローブ(kprobesやuprobesなど)をサポートしています。 [ 4 ] 2012年に、2人のIBMエンジニアが、perf( OProfileとともに)をLinuxで最もよく使用される2つのパフォーマンスカウンタプロファイリングツールの1つとして認識しました。 [ 5 ]
perfユーティリティとカーネル間のインターフェースは、1つのシステムコールのみで構成され、ファイルディスクリプタとマップされたメモリ領域を介して行われます。 [ 6 ] LTTngや古いバージョンのoprofile とは異なり、ほとんどの機能がカーネルに統合されているため、サービスデーモンは必要ありません。perfユーティリティは、マップされたバッファがいっぱいになると、生データをディスクにダンプします。R. Vitillo(LBNL)によると、perfによって実行されるプロファイリングのオーバーヘッドは非常に低いとのことです。[ 6 ]
2010年現在ハードウェアカウンタをサポートするアーキテクチャには、x86、PowerPC 64、UltraSPARC ( IIIおよびIV )、ARM (v5、v6、v7、Cortex-A8および-A9 )、Alpha EV56、SuperHなどがあります。[ 4 ] 最終分岐レコードの使用[ 7 ]は、 Pentium 4以降のIntel CPUで利用可能な分岐トレースの実装であり、パッチとして利用可能です。[ 6 ] 2014 年 3 月 31 日にリリースされたLinux カーネルのメインライン のバージョン 3.14 以降、perf は、特定の Intel CPU の機能として利用可能な、消費電力測定のための実行平均電力制限(RAPL) もサポートしています。[ 8 ] [ 9 ] [ 10 ]
Perf は、 Red Hat Enterprise Linux (2010 年にリリースされたバージョン 6 以降) [ 11 ]やDebian (2011 年にリリースされたDebian 6.0 (Squeeze)以降) のlinux-tools-commonパッケージなど、多くの人気のある Linux ディストリビューションでネイティブにサポートされています。[ 12 ]
perf はいくつかのサブコマンドとともに使用されます。
perf のドキュメントは (2014 年現在) あまり詳細ではありません。たとえば、ほとんどのイベントを文書化したり、イベントのエイリアスを説明したりしていません (イベントの名前とコードを取得するには、多くの場合、外部ツールが使用されます[ 15 ] )。[ 16 ]また、perf ツールは実際のウォールクロック時間に基づいてプロファイリングすることもできません[ 16 ]。これは、オフ CPU プロファイリングの追加によって対処されています。
Linuxカーネル2.6.37から3.8.8までのperfサブシステムとRHEL6カーネル2.6.32にはセキュリティ脆弱性(CVE - 2013-2094)があり、ローカルユーザーがroot権限を取得するために悪用されました。[ 17 ] [ 18 ]この問題は、event_id検証コードパスで誤った型(64ビットではなく32ビットint)が使用されていたことが原因でした。[ 19 ]