eBPF概要メモ
eBPFとは
eBPFとはLinuxカーネルの処理(イベント)をユーザがカスタマイズできる技術です。
カーネルに処理を追加したり、変更したりと、カーネルをプログラマブルにします。
eBPFによってユーザのプログラムを実行できるポイントは多岐にわたります。
- ネットワーク (XDP, Traffic Control, Socket, etc.)
- トレース
- 関数の実行開始とリターン時 (kprobe, uprobe)
- トレースポイント (tracepoint)
- などなど(eBPFシステムの記事で網羅した説明を書きたい)
eBPFの歴史
eBPFは、Berkeley Packet Filter (BPF)と呼ばれるカーネルのフィルタリング技術を拡張することで開発されたそうです。
BPFはeBPFと区別するため、classic BPF (cBPF)とも呼ばれるようです(当ブログも区別するため、cBPF、eBPFと記述します)。
余談ですが、cBPFのwikipediaのページではBPFと記載されてました。
Berkeley Packet Filter - Wikipedia
cBPFはtcpdumpのフィルタリングをユーザが変更する際に使われているそうです。
2013年からcBPFを拡張するかたちでeBPFが開発され、ネットワーク以外のカーネル処理にも適用できるようになりました。
参考文献
What is eBPF? An Introduction and Deep Dive into the eBPF Technology
Linux eBPFトレーシング技術の概論とツール実装 - ゆううきブログ (yuuk.io)
詳説 eBPF 概論編 - VA Linux エンジニアブログ (hatenablog.com)
eBPFに3日で入門した話 - CADDi Tech Blog