海外出張しているうちに、Brendan Gregg の "BPF Performance Tools" が届いていました。:)
前著のまとめを書いている最中ではあるのですが、こっちもまとめようかと思います。(つまり、やっぱり書きかけ…)
本書の構成
まず、目次の章レベルの構成は以下のような感じになっています。
Part I : Technologies
1 Introduction
2 Technology Background
3 Performance Analysis
4 BCC
5 bpftrace
Part II : Using BPF Tools
6 CPUs
7 Memory
8 Filesystems
9 Disk I/O
10 Networking
11 Security
12 Laguages
13 Applications
14 Kernel
15 Containers
16 Hypervisors
Part III : Additional Topics
17 Other BPF Performance Tools
18 Tips, Tricks and Common Problems
Part IV : Appendixes
A BPF Trace One-Liners
B BPF Trace Cheat Sheet
C BCC Tool Development
D C BPF
E BPF Instructions
Part Iで大事なのは3章の3.2節"Performance Methodologies"でしょうか。この3.2節に相当する内容は、前著では2章すべてをあててかなり包括的に性能解析の考え方を説明していたのですが、本書では必要最小限のかなりコンパクトな量におさえています。 Part Iではそのほか、1章で全体像、2章でBPFそのものと関連コンポーネントの紹介、4章で"BCC" (BPF Compiler Collection)と題してBPF関連の開発ツールについての紹介、5章が一番よく使われるツールで"bpftool"の詳しい解説になっています。
Part IIは、前著でいうと5章以降の、"Application"や"CPU"といった具体的な切り口に即したBPF関連ツールの使い方の紹介です。なお、15章のContainersと16章のHypervisorsは、前著にも含まれないトピック自体新しい内容なので、最初は全体を流す人も読んだほうがいいかもしれません。(というか私もそうします(笑))
Part IIIの17章は "Other BPF Performance Tools" とはなっているのですが、Prometheus等のモニタリングツールとの組みあわせや、kubernetes との連携話もあり、読み飛ばせません。また、18章も "Tips, Tricks and Common Problems" というタイトルが示すように、実用上おさえておきたい勘所が載っているようです。
ところで、ここまであたかも読了したような書きぶりですが、読みながらメモっています。 なので、当分は更新が続くと思います。
留意事項:Ubuntu 18.04(Bionic)でのインストール
本書も武内さんの本と同じように「試して理解」するのが重要だと思いますが、現時点でUbuntuで使いたい人に、インストールで一点留意事項があります。
まず、インストール方法は4.3節の"BCC Installation"で各種distroでのインストール方法が解説されています。
Ubuntuの場合はuniverseにbpfcc-toolsというパッケージ名で入っているのでこれを入れてもよいのですが、特に 18.04(Bionic)付属のものは古いので、できれば新しいものを使いたいところです。4.3.2 節のUbuntu用の説明では、https://repo.iovisor.org/ の apt-line が紹介されているのですが、'20/2時点でメンテナンスが止まっているようです。
調べてみたところ、Colin Ian Kingさんがメンテしているppaから最新版が入れられるようなので、どうしても自前でビルドしたい人以外はこちらを使うとよいでしょう。
https://launchpad.net/~colin-king/+archive/ubuntu/bpftrace-backports
以下の手順でインストールできます。(bpftraceも一緒に入れてください)
sudo add-apt-repository ppa:colin-king/bpftrace-backports
sudo apt-get update
sudo apt-get install bpfcc-tools bpftrace
性能分析の方法論
一番大事なところ(だと私は思う)、性能分析の方法論は3.2節で解説されています。
具体的には以下の通りですが、1) 問題を定義する、2) 段階的詳細化、3) 構造の理解の上でリソースの状態の分析…と、もっともな内容になっています。
- 3.2.1節 Workload Characterization
- 3.2.2節 Drill-Analysis
- 3.2.3節 USE Method
- 3.2.4節 Checklists
チェックリストで定型化するのはサポート部隊等でよく取られる手段ですが、直後の3.3節ではLinuxの場合に1分でできるチェックリストの実例ということで以下のようなコマンドが挙がっています。
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
本書で詳細に解説される bpfcc-tools 付属の各種スクリプトやツールで同等のことはできるのですが、 上記は大体どんな環境にも入っていますし、併用するのも有益でしょう…という記述もあります。