Linux Observability with BPF 1人輪読会(2)

前回
tsunomur.hateblo.jp

序文 その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 : 達成する