2023-11-14

「BPF(BSD packet Filter)」は「パケットをフィルタリングする」だけが目的ではないような気がする

MOPDを調査するために、BPFを調べる必要を感じたので、先にそちらを見ています。ウィキペディアの「Berkeley Packet Filter」には、概要として最初に以下のような事が書かれています。

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

 

BPFの「PF」は「Packet Filter」なんですから、上記した記述はもっともだと思います。しかしBPFの目的はそれだけではないような気がします。ウィキペディアの概要を読み進めると、次のような記述が現れます。

この機能を利用することで、オペレーティングシステムのカーネルからプロセスへの不要なパケットのコピーが回避され、パフォーマンスが大幅に向上する。


ネットワークのパケットを送受するのはカーネル内部ですが、それをユーザプログラム側が操作しようとすると、カーネルとユーザ側の遷移が数多く発生します。そのままでは性能に悪影響を及ぼしてしまうため、特別な仕組みが用意され、それが「BPF」なのでしょう。当初の目的がネットワークのパケットをフィルタリングして、必要なものだけをユーザプログラム側で操作したかったという事なのではないかと思いますが、その為の仕組みの有用性に注目が集まっているという事のように思います。


Linuxでは「eBPF」という拡張がなされており、ウィキペディアでは「eBPFプログラムをさまざまなTracepointにアタッチする用途など、ネットワーク以外の目的でも使用できる」と書かれているように、もはやネットワークに限った技術ではなくなっているようです。しかも旧来の「BPF」との互換性はないようなので、だったら名前を「eBPF」としないで、別の名前にしたら良かったのではないかと思いますが、そうもいかなかったのかもしれません。


0 件のコメント:

コメントを投稿