# perf-tools
perf-tools は [[Ftrace]] と [[perf]](1) に基づく高度なパフォーマンス分析ツールのコレクションで、オープンソースである。開発者は [[Brendan Gregg]] で、[[Netflix]] のサーバーにデフォルトインストールされていた。インストールしやすく(依存ファイルがほとんどない)使いやすいことを目標に設計され、主として tracefs ファイルを自動設定するシェルスクリプトとして実装されている。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 14 Ftrace]] §14.13)
## ツール分類
- **単一目的ツール**(片方向矢印): `bitesize(8)`・`cachestat(8)`・`execsnoop(8)`・`iolatency(8)`・`iosnoop(8)`・`killsnoop(8)`・`opensnoop(8)`・`tcpretrans(8)`。Unix 哲学に従い「ひとつのことをしっかりこなす」設計で、オプションを学ばず実行するだけで簡潔かつ十分な出力を得られる。
- **多目的ツール**(両方向矢印): `funccount(8)`・`funcgraph(8)`・`functrace(8)`・`funcslower(8)`・`kprobe(8)`・`perf-stat-hist(8)`・`syscount(8)`・`tpoint(8)`・`uprobe(8)`。perf(1) や trace-cmd のように複数のイベントソースをサポートするぶん、使い方は複雑になる。
(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 14 Ftrace]] §14.13.1〜§14.13.3、図14-4、表14-7、表14-8)
## BCC/BPF との関係
著者は拡張 BPF のない Linux 3.2 を使っていた当時の Netflix クラウド向けに perf-tools を開発し、その後多くのツールを BPF 版に書き換えたと説明する。それでも perf-tools には以下の利点が今も残るとする。
- `funccount(8)`: Ftrace 関数プロファイラを使い、BCC の kprobe ベース BPF 版より効率的で制約が少ない。
- `funcgraph(8)`: Ftrace 関数グラフトレーサーを使うため BCC に対応版がない。
- hist トリガーを使う将来の perf-tools は、kprobe ベース BPF 版より効率的になりうる。
- シェルと awk(1) があれば動くため、リソース制約のある環境(組み込み Linux など)で有用であり続ける。
著者は BPF ツールのクロスチェック・デバッグのために perf-tools を使うこともあるとしている。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 14 Ftrace]] §14.13.6)
## 関連
- 出典: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 14 Ftrace]]
- エンティティ: [[Ftrace]] / [[Brendan Gregg]] / [[perf]] / [[BCC]] / [[bpftrace]] / [[Netflix]]