トレーシングに関する世界観です。
システムが正常に稼働しなかったり、なんらかの問題が発生した時、原因を究明するために、稼働しているシステムの内部まで、システムの動きに沿ってその状態を解析したい場合は多い。
このような時に使えるのが、トレーシングツール。
Linuxでは、DTrace, SystemTap, bpftrace, bcc-toolsなどのツールを使って、システムをトレースすることができる。また、このためにカーネルのeBPFという機能を使うことができる。
DTraceは、そもそもSolaris 10やOpenSolaris向けに開発されたシステムトレースツール。
ZFSの開発にも絶大な効果を発揮したと言われる。
また、SystemTapはLinux向けの高度なトレーシングを行うために開発されたトレーシングツール。
UNIXには、パケットフィルタやシステムコールフィルタとして強力なBPF(Berkeley Packet Filter)が存在した。
BPFの拡張仕様として、Linuxカーネル3.15で導入されたのがeBPF。
eBPFを用いると、ユーザーが作成したプログラム(バイトコード)をカーネルランドで、さまざまなタイミングに応じたフックとして記述・実行することができる。
しかしながら、カーネルランドでユーザーによるプログラムを実行させることは危険を伴う。そのため、安全に実行できるようにさまざまな制限がかけられている。
このeBPFを用いて、新しくDTraceやSystemTapの後継として開発されているのが、bpftrace。
bpftraceはIO Visorというプロジェクトによってオープンソースソフトウェアとして開発されている。
また、同じくIO Visorで開発されている、BCC(BPF Compiler Collection)というツール群がある。
BCCはコンパイラという名前の通り、バイトコードを生成するコンパイラを提供している(BCCでeBPFのコードを書く場合は、Pythonコードの中にC言語のコードを書く多言語混在のコードになる)が、付属のツール群として、eBPFを用いたシステムトレーシングに使えるbcc-toolsというさまざまなソフトウェアが提供されている。
このbcc-toolsを使うことで、コードを書かなくても手軽にeBPFの効力を発揮することができる。
ツールには共通の語尾がついており、*snoop(特定のイベントの実行記録)、*top(定期的に画面を更新して情報を表示)、*dist(一定期間内の情報の統計)、*slower(時間のかかっている処理だけを探す)、u*(特定の言語向けに特化した機能)、tcp*(ネットワーク向けの機能)などがある。
詳しくは以下が参考になる。