https://lwn.net/Articles/740157/
BPF の進化
もともとはパケットキャプチャのルールを記述するためのレジスタマシンとして実装されていた。
BPF が抱えていた課題
ユーザのプログラムをカーネル内で実行するというアイデアは良かった
- モダンなプロセッサを活用できる命令セットではなかった
eBPF のポイント
- 最近のプロセッサと親和性の高い仮想マシンになった → 性能が向上した
- レジスタが64 bit になりレジスタ数も増えたことで → 関数に渡す引数が表現できるようになった (もともとレジスタ 2 本)
BPF_CALL
命令でカーネルから提供された関数を呼び出せるようになった
x86_64 において eBPF の性能は cBPF の 4 倍になったと kernel 3.15 で取り込まれたパッチ では提示されている。
使いみち
- 高性能パケット処理
もともと BPF がパケットフィルタ向けだったことから、eBPFもまたネットワーク機能に適している。
eBPF のパッチを作った人について
Linux カーネル 3.15 で eBPF のパッチを作った Alexei Starovoitov さん。 メールアドレスみると PLUMgrid という SDN ベンダーだったので、もともとのモチベーションは SDN だったのかなとなった。
おそらくその背景で書かれたと思われるスライドがあった。
データセンターにおける仮想化ベースのワークロード間のネットワーキング(主にスイッチング)を主眼において eBPF の適用という感じ。
昔のデータセンターのアーキテクチャ
- 1サーバに1OS
- Access, Distribution, Core という三層構成ネットワーク
- 伝統的なL2/L3プロトコル (spanning treeとか)
課題
これだとスケールしないのでワークロードを仮想化していくことになった。
新たな課題
- East-West トラフィックが激増した
- MAC, VLAN の数が増大してスイッチのHW容量を超える
解法の歴史
- vSwitch
- vRouter
- Extensible Data-Plane