Perf

From Wikipedia, the free encyclopedia

perf ("Perf Events"[1]あるいは"perf tools"。元々は"Performance Counters for Linux"やPCLと呼ばれていた[2])は、Linuxカーネル2.6.31以降で使用可能な、Linux性能解析ツールである[3]

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

また、perfはハードウェアパフォーマンスカウンタ英語版、トレースポイント、ソフトウェアパフォーマンスカウンタ(例: hrtimer)、ダイナミックプローブ(例: kprobesやuprobes)をサポートしている[4]

2012年IBMは(OProfile英語版とともに)perfを、Linuxで使われる最も一般的な二つのパフォーマンスカウンタ英語版プロファイリングツールのうちの一つであると認めた[5]

perfは以下のようなサブコマンドとともに使用する。

  • stat: 一つのプログラムやある時間でのシステムのトータルイベントカウントを測る
  • top: topライクな最も使用された関数の動的表示
  • record: 一つのプログラムのサンプリングレートを測り保存する[6]
  • report: perf recordによって生成されたファイルを分析(perf recordはフラットやグラフプロファイリングが生成可能)[6]
  • annotate: ソースまたはアセンブリを注解する
  • sched: スケジューラー動作とレイテンシのトレース・測定[7]
  • list: 利用可能なイベントを一覧する

実装

このユーティリティとカーネル間のインターフェースは一つのシステムコールのみからなり、ファイルディスクリプタとmmapされたメモリ領域を通して完了する[8]

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

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

2010年時点で、ハードウェアカウンターのサポートをするアーキテクチャは以下の通りである。x86PowerPC64、UltraSPARC (III及びIV)、ARM(v5、v6、v7、Cortex-A8及び-A9)、Alpha EV56、SH[4]

新しいインテルCPUにおけるLast Branch Recordsbranch tracingの実装の使用はパッチを適用するで利用できる[8]

perfはRHEL6[9]、Debian Squeeze[10]やその他のポピュラーなLinuxディストリビューションで対応されている。

批評

perfのドキュメントはあまり詳しくなく(2012年時点)、たとえば、大部分のイベントやそれらのエイリアスがドキュメント化されていない。また、perf toolsは、本当のwall-clock時間に基づいたプロファイリングを行えない[11]

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

関連項目

出典

外部リンク

Related Articles

Wikiwand AI