perf

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

perf (もしくは"Perf Events"[1]、或いはperf tools、元々は"Performance Counters for Linux"やPCLと呼ばれていた[2])は、Linuxカーネル2.6.31以降で使用可能な、Linux性能解析ツールである[3]。 'perf'というユーザースペースの操作ユーリティは、Gitのようなサブコマンドを持つインターフェースを採用している。このユーリティは、システム全体(カーネル及びユーザーコードの両方)、シングルCPU、若しくは数スレッドの統計プロファイリングが可能である。

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

2012年IBMはperfを、(OProfile英語版と共に)、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]

関連項目[編集]

出典[編集]

[ヘルプ]
  1. ^ Vince Weaver, The Unofficial Linux Perf Events Web-Page
  2. ^ Vince Weaver. “Linux perf event Features and Overhead”. 2013 FastPath Workshop. 2013年10月1日閲覧。
  3. ^ 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"
  4. ^ a b Arnaldo Carvalho de Melo, The New Linux ’perf’ tools, presentation from Linux Kongress, September, 2010
  5. ^ A. Zanella, R. Arnold. Evaluate performance for Linux on POWER. Analyze performance using Linux tools, 12 Jun 2012 // IBM DeveloperWorks Technical library
  6. ^ a b Urs Fässler perf file format, CERN OpenLab英語版, 2011
  7. ^ Ingo Molnar英語版, 'perf sched': Utility to capture, measure and analyze scheduler latencies and behavior, 17 Sep 2009
  8. ^ a b c Roberto A. Vitillo (LBNL). PERFORMANCE TOOLS DEVELOPMENTS, 16 June 2011, presentation from "Future computing in particle physics" conference
  9. ^ 6.4. Performance Counters for Linux (PCL) Tools and perf // RHEL Developer Guide
  10. ^ http://packages.debian.org/squeeze/linux-tools-2.6.32
  11. ^ http://rhaas.blogspot.ru/2012/06/perf-good-bad-ugly.html
  12. ^ Michael Larabel (2013年5月15日). “New Linux Kernel Vulnerability Exploited”. Phoronix. 2013年7月18日閲覧。
  13. ^ corbet (2013年5月15日). “Local root vulnerability in the kernel”. LWN. 2013年7月18日閲覧。
  14. ^ Joe Damato (2013年5月20日). “A closer look at a recent privilege escalation bug in Linux (CVE-2013-2094)”. 2013年7月18日閲覧。

外部リンク[編集]