Perf

Perf: Linux性能解析ツール



Perf(パフォーマンスイベントまたはperfツール)は、Linuxカーネル2.6.31以降で導入された、システムの性能を測定・分析するためのツールです。これは、元々「Performance Counters for Linux」として知られていましたが、ユーザー空間で使われるユーティリティーとしても広く使用されています。

機能とサブコマンド


Perfは、システム全体、シングルCPU、またはマルチスレッドのプロファイリングが可能で、以下のようなサブコマンドを用いてさまざまなタスクを実行します。

  • - stat: 特定のプログラムやシステムの総イベントカウントを測定します。
  • - top: 実行中の最も使用された関数を動的に表示します。
  • - record: プログラムのサンプリングレートを記録し、保存します。
  • - report: 書き込まれたデータを分析し、様々な形式でレポートにします。
  • - annotate: ソースコードまたはアセンブリに対して注釈を付けることで、詳細な分析を可能にします。
  • - sched: スケジューラの動作やレイテンシを測定します。
  • - list: 利用可能なイベントのリストを表示します。

これらのサブコマンドにより、ユーザーはシステムのパフォーマンスを深く掘り下げて理解することができます。

実装の特徴


Perfは、カーネルとユーザー空間のインターフェースを単一のシステムコールで実現しており、効率的なデータ取得を可能にします。従来のツール(OProfileやLTTng)とは異なり、特別なデーモンプロセスを必要とせず、ほとんどの機能がカーネルに組み込まれています。また、特定のバッファから生データをダンプすることで、性能への影響を低減しています。このため、R. Vitillo(LBNL)は「perfは低オーバーヘッドのプロファイリングツールである」と評価しています。

対応アーキテクチャ


2010年には、perfがハードウェアカウンターに対応した様々なアーキテクチャがサポートされるようになりました。これには、x86、PowerPC64、UltraSPARC(IIIおよびIV)、ARM(v5、v6、v7、Cortex-A8および-A9)、Alpha EV56、SHが含まれます。新しいIntelのCPUでは、Last Branch Recordsやbranch tracingを利用できるパッチも提供されています。さらに、RHEL6やDebian Squeezeなどの人気のあるLinuxディストリビューションでもperfはサポートされています。

批評とセキュリティの懸念


Perfはその有用性にもかかわらず、一部のユーザーから批判されています。特にドキュメンテーションが十分でないことが指摘され、様々なイベントやそのエイリアスの明確な情報が不足しています。また、perfツールは実際のwall-clock時間に基づくプロファイリングを行うことができないため、正確なタイミング情報には限界があります。

安全性の観点からは、Linuxカーネル2.6.37から3.8.8にかけて、ローカルユーザーからroot権限へ昇格できるセキュリティ脆弱性が報告されています。この問題は、特定のイベントIDに関連する型の不一致から生じたもので、注意が必要です。

まとめ


Perfは、Linuxにおける性能解析の強力なツールであり、多彩なサブコマンドを通じて詳細な性能データを収集し、分析することを可能にします。しかし、そのドキュメントやセキュリティ上の懸念には注意を払う必要があります。総じて、perfはLinuxエコシステム内で非常に重要な役割を果たしており、適切に活用することで、システムの性能最適化に貢献することができます。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。