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
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
関係ないけど
公式リンク
関連
nftables
BPFプログラムを作る
bpfアセンブラを使う
LLVMでCから生成
Python, Luaで利用
Go, Rustから利用
資料集