徒然ネル

LinuxカーネルとかeBPFとか

eBPF概要

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と記載されてました。

BPFデータリンク層へのrawインターフェイスを提供し、生のリンク層パケットの送信と受信を可能にする。

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入門 (zenn.dev)

eBPFに3日で入門した話 - CADDi Tech Blog

eBPF - 入門概要 編 (zenn.dev)