# 詳解 システム・パフォーマンス 第2版
## 概要
[[Brendan Gregg]] による *Systems Performance: Enterprise and the Cloud, 2nd Edition* の日本語版。オペレーティングシステムからアプリケーション、クラウドの仮想化層までを対象に、**推測ではなく計測に基づくパフォーマンス分析**の方法論を体系化した教科書である。個々のコマンドの使い方ではなく、[[USE メソッド]]・[[ワークロードの特性の把握]]・[[ドリルダウン分析]]・[[レイテンシ分析]] といったメソドロジを先に置き、CPU・メモリ・ファイルシステム・ディスク・ネットワークの各リソースへ順に適用していく構成を取る点が特徴で、この構成自体が本書の主張になっている。
第2版では Linux が主対象になり、拡張 BPF([[BPF]]・[[eBPF]])を用いたトレーシングが全編にわたって組み込まれた。第13〜15章に [[perf]]・[[Ftrace]]・[[BCC]]/[[bpftrace]] の専用章が置かれ、可観測性ツールの実装レイヤまで降りて解説する。
## 書誌情報
- **著者**: [[Brendan Gregg]]([[Netflix]] シニアパフォーマンスアーキテクト)
- **監訳**: 西脇 靖紘 / **訳**: 長尾 高弘
- **出版社**: 株式会社オライリー・ジャパン
- **発行日**: 2023 年 1 月 23 日(初版第 1 刷)
- **原書**: *Systems Performance: Enterprise and the Cloud*, 2nd Edition(Pearson Education, 2021、ISBN 978-0-13-682015-4)
- **構成**: 全 16 章 + 付録 A〜F(USE メソッド: Linux / sar のまとめ / bpftrace 1 行プログラム / 練習問題の解答 / 著名人リスト / 用語集)、本文約 900 ページ
## 構成と主要テーマ
### 導入とメソドロジ(第 1〜2 章)
分野の全体像を示したうえで、本書全体の骨格となる分析メソドロジ群を先に確立する。第2章は初版から最も変化の少ない中核章である。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 1 イントロダクション]] — システムパフォーマンスという分野の全体像(職種・作業・分析視点)、可観測性ツールと実験ツールの区別、レイテンシという中心指標、[[BPF]]/[[DTrace]] によるトレーシングの歴史、Linux 60 秒チェックリスト。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 2 メソドロジ]] — [[USE メソッド]]・[[RED メソッド]]・[[ワークロードの特性の把握]]・[[ドリルダウン分析]]・[[レイテンシ分析]]・[[待ち行列理論]]・[[アムダールの法則]]/[[ユニバーサルスケーラビリティ法則]]、および [[パフォーマンスのアンチメソドロジ]]。
### システムの構成要素(第 3〜5 章)
分析対象となるソフトウェアスタックを下から順に押さえる。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 3 オペレーティングシステム]] — カーネルモデル・[[システムコール]]・割り込み・プロセス・[[仮想メモリとページング]]・スケジューラ・拡張 BPF を、Unix/BSD/Solaris/[[Linux]] の発展史とともに解説する前提知識章。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 4 可観測性ツール]] — ツールを「システム全体/プロセスごと」×「固定カウンタ/イベントベース」の 2 軸 4 象限で分類し、`/proc`・`/sys`・トレースポイント・[[kprobe]]/[[uprobe]]・USDT・PMC をオーバーヘッド実測値付きで整理する。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 5 アプリケーション]] — 目標設定、[[アプリケーション並行実行モデル]] と [[同期プリミティブ]]、言語別の特性、CPU/off-CPU/システムコール/[[スレッド状態分析]] の 8 メソドロジ、不完全なスタックトレースの落とし穴。
### リソース別分析(第 6〜11 章)
第2章のメソドロジを各リソースへ順に適用する、本書で最も分量の大きい部分。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 6 CPU]] — アーキテクチャ(コア・キャッシュ・インターコネクト・MSR)とスケジューラを基礎から説明し、USE メソッド・[[Instructions Per Cycle]]・[[フレームグラフ]]・[[スケジューラレイテンシ]](PSI)で CPU 分析を体系化する。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 7 メモリ]] — 仮想メモリ・デマンドページング・オーバーコミットから [[Linuxメモリ回収]] の 4 段階、[[メモリアロケータ]]、[[NUMAメモリ配置]]、[[ヒュージページ]]、[[メモリリークとメモリ増大]] の切り分けまで。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] — [[ファイルシステムキャッシュ階層]]・[[プリフェッチと先読み]]・[[ライトバックキャッシングと同期書き込み]]・[[ランダムIOとシーケンシャルIO]]・[[Raw IOとDirect IO]]、[[ローカルファイルシステム実装比較]](ext4/XFS/ZFS/Btrfs)、4 層でのレイテンシ計測。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 9 ディスク]] — HDD/SSD のレイテンシは桁違いにばらつき二峰分布になるため、単純平均や使用率 100% だけを見る分析は誤りを招く。USE メソッド・[[IOスケジューラ]]・[[RAID]]・[[レイテンシヒートマップ]] を組み合わせて分析する。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 10 ネットワーク]] — ネットワークスタックとプロトコル、[[TCP輻輳制御アルゴリズム]]、レイテンシの区間分解、[[バッファブロートとキュー管理]]、[[ネットワーク割り込み合体とCPUスケーリング]]、[[TCPバックログキューとSYNクッキー]]、sysctl チューニング。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 11 クラウドコンピューティング]] — [[ハードウェア仮想化]](Xen/KVM/Nitro)・OS 仮想化([[コンテナ仮想化]]・cgroup・名前空間)・軽量仮想化([[Firecracker]])を、オーバーヘッド・リソースコントロール・可観測性という共通の 3 観点で整理する。
### ベンチマーキングとトレーシングツール(第 12〜15 章)
計測手段そのものを扱う。第13〜15章は第2版で大幅に拡充された、拡張 BPF 時代のトレーシングツールのリファレンスである。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 12 ベンチマーキング]] — [[ベンチマーキング]] が陥りやすい失敗パターンを列挙し、実行中に可観測性ツールで分析するアクティブベンチマーキングと「ベンチマークについて問うべきこと」のチェックリストを対策として示す。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 13 perf]] — [[perf]] は perf_events のフロントエンドとして PMC ベースのプロファイリングとイベントベーストレーシングを統合し、`record`/`stat`/`report`/`script`/`trace` などのサブコマンドで CPU 分析からシステムコールのライブトレースまでを 1 ツールで扱う。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 14 Ftrace]] — [[Steven Rostedt]] による Linux 公式トレーサー [[Ftrace]] を、tracefs のテキストインターフェース中心に解説する(関数プロファイラ・関数グラフトレーサー・hwlat・hist トリガー・[[trace-cmd]]・[[perf-tools]])。
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 15 BPF]] — [[BCC]] と [[bpftrace]] を、対象領域・開発コスト・言語構造(probe/filter/action)の観点から使い分ける。カーネル内集約による低オーバーヘッドが両者に共通する利点。
### 実務適用(第 16 章)
→ [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 16 ケーススタディ]] — [[Netflix]] のマイクロサービスをコンテナへ移行した際に観測された「うますぎる」高速化を、60 秒チェックリスト → USE メソッド → PMC → トレーシングという手順で調査し、複数要因の重なりとして説明する。本書唯一の実務ケーススタディ章。
## 影響と位置づけ
- 本書のメソドロジ、とりわけ [[USE メソッド]] と [[フレームグラフ]] は著者自身の考案によるもので、システムパフォーマンス分析の実務で広く使われている。著者は BCC の共同開発者、bpftrace の主要コントリビュータ、[[perf-tools]] の作者でもあり、本書は解説書であると同時に、これらのツールの設計意図を一次情報として説明する資料でもある。
- 第2版は主対象を Solaris/DTrace 時代から Linux/拡張 BPF 時代へ移した改訂であり、第13〜15章の 3 章構成(perf / Ftrace / BPF)がその中心にあたる。
- 同じ vault 内では [[AI Systems Performance Engineering]] が GPU・分散推論という上位レイヤを扱っており、本書が扱う OS・リソース層の分析メソドロジがその土台にあたる。
## 関連
- 著者: [[Brendan Gregg]] / 所属: [[Netflix]]
- 主対象: [[Linux]](比較対象として [[FreeBSD]])
- 主要ツール: [[perf]]・[[Ftrace]]・[[BCC]]・[[bpftrace]]・[[trace-cmd]]・[[perf-tools]]
- 中核 concept: [[USE メソッド]]・[[ワークロードの特性の把握]]・[[ドリルダウン分析]]・[[レイテンシ分析]]・[[待ち行列理論]]・[[フレームグラフ]]・[[パフォーマンスエンジニアリング]]
- 既存の一次レイヤーノート(一方向参照): [[books/Systems Performance 2nd Edition|Systems Performance 2nd Edition]]
## 出典
- Brendan Gregg 著、西脇靖紘 監訳、長尾高弘 訳、『詳解 システム・パフォーマンス 第2版』、オライリー・ジャパン、2023 年。
- Brendan Gregg, *Systems Performance: Enterprise and the Cloud*, 2nd Edition, Pearson Education, 2021, ISBN 978-0-13-682015-4.