序文 その2
(この序文はオライリーの中の人によるもの?)
David の話し
2015 年に David(この本の著者の一人) は、Docker のコアデベロッパーとして働いていた。
Docker のパフォーマンスを診断をするために、Flame Graph(以下参照) を使っていた。
David は Go のプロファイラと、Flame Graphs を使ってアプリケーションのパフォーマンスを可視化していて、それを他のメンバーにも共有していたらしい。
Go のプロファイラ機能と Flame Graph の組み合わせはこちらの記事が詳しそう。
GolangでFlame Graphを描く | SOTA
このプロファイラと Flame Graph を Docker のパフォーマンス診断のツールとして使っていたが、大きな落とし穴があった。
Docker のデフォルトの設定では、プロファイラの機能が無効になっており、一度サービスを再起動する必要があったのだ。
つまり、Docker のパフォーマンス問題を調査するためにパフォーマンス測定が必要だが、Docker サービスの再起動によって、データが失われることになる。
ユーザーは、Docker の診断設定の有効、サービスの再起動後、パフォーマンス問題の再発を待つ必要があった。
David は別の方法として、BPF を見つけることになる。
Lorenzo の話し
そのころ、Lorenzo は、Linux カーネルの内部を研究していた。そしてカーネルのサブシステムを調査するために BPF を学んでいた。
2~3年後、彼の仕事である、InfluxData でのデータインジェスチョンをより早くするために、BPF を使うことが出来た。
今、Lorenzo は、BPF コミュニティとIOVisor に参加して、Sysdig(Falco) で働いている。
Falco とは、コンテナと Linux のためにランタイムをセキュアにするための、BPF を使ったツールである。
Brendan Gregg や Alexei Starovoitov や Cilium や Facebook は BPF の参考になる記事や出版物を書いている。
まとめ
この本を読むと、既に BPF を知っている人も、これから皆さんのプロダクトで発生しているパフォーマンス問題に取り組もうとしている人も、きっと役に立つ本になるはず!
Flame Graphs とは
Brendan Gregg が作っている、ソフトウェアのプロファイルツール。Perl でできている。
こちらのページを見るとどのような出力になるのかイメージできる。
www.brendangregg.com
コールスタックを可視化し、どの関数でどのくらいの処理が発生したか(サンプルの数)がわかる。
Linux だと Perf、Windows の Xperf.exe の結果も可視化することが出来るらしい。
ちなみに、CPU のプロファイルの取得と Flame Graph の可視化(SVG の出力)はこれでできる。
perf record -F 99 -a -g -- sleep 60 perf script | ./stackcollapse-perf.pl > out.perf-folded ./flamegraph.pl out.perf-folded > perf-kernel.svg
英語
- In the meantime : その間に
- ingestion : 取り込み
- ins and outs : 一部始終
- tremendously : とんでもなく
- scattered : ばらまく
- accomplish : 達成する