eBPFを使うための資料
ここではBPFといったらeBPFを指すことにする。昔からのcBPFはネットワークのパケットフィルタとして作られていて、最近のカーネルではオペコードがeBPFに変換されているらしい。
BPFはLinuxカーネルに提供されているカーネル内で安全に動くVMでJITコンパイラもついている。カーネルやカーネルモジュールを開発しないでカーネル内で動くプログラムを書くことができる。IO Visorが管理してる。
2014年に汎用目的のeBPFが登場する。自分が知ったのは4年くらい前にSystem Performanceを読んだとき、気づいたらキャズムを超えていた。
eBPF
XDP
bcc
bpftrace
アーキテクチャ図
開発ツール
実行環境の条件。
%カーネルバージョン、ビルドオプション、必要なカーネルモジュールなどの整理
条件を満たす環境ではUbuntuで下を実行すればインストールされる。
code: install-ubuntu.sh
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4052245BD4284CDD
echo "deb https://repo.iovisor.org/apt/$(lsb_release -cs) $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/iovisor.list
sudo apt-get update
sudo apt-get install python3-bcc bcc-tools libbcc-examples linux-headers-$(uname -r)
sudo apt-get install -y bpftrace # 19.
sudo apt-get install -y systemtap-sdt-dev
下のコマンドでPython, Luaでの使い方を勉強できる。
code:bcc-tools-check.sh
dpkg -L bcc-tools | grep tools | grep -v doc | grep -v old | tail -n +2
関係ないけど。
code:loadable-kernel-module-list.sh
tree -C /lib/modules/4.15.0-117-generic/kernel/ | less -R
関係ないけど
A tour of /sys/devices
公式リンク
bcc
bpftrace
bpftrace internals development
gobpf
関連
kprove
uprove
nftables
BPF入門記事
BPFプログラムを作る
bpfアセンブラを使う
LLVMでCから生成
Python, Luaで利用
Go, Rustから利用
資料集
「おいしくてつよくなる」eBPFのはじめかた/Learn eBPF
QiitaのeBPF紹介記事
バグ調査やパフォーマンス改善に役立つ!eBPFを用いたトレーシングについて
perf, ftraceのしくみ
hw_breakpointについて
A thorough introduction to eBPF
Linux Extended BPF (eBPF) Tracing Tools
Linux BPF Superpower
BPF and XDP Reference Guide
Using eBPF in k8s
bcc's reference guide