3章eBPFプログラムの仕組み
前章では、BCCフレームワークを用いて簡単なeBPFの「Hello World」を確認しました。本章ではすべてC言語で書かれた「Hello World」プログラムの例を示し、BCCが水面下に隠している処理の詳細を理解できるようにします。
この章ではeBPFプログラムのソースコードが実行されるまでに何が起きているのかについても述べます。これを図示したのが図3-1です。
eBPFプログラムはeBPFバイトコードの命令列です。アセンブリ言語でプログラムを書くように、eBPFプログラムをこのバイトコードで書くこともできます。ただし普通はバイトコードよりも扱いやすい高水準プログラミング言語を使います。少なくとも本書執筆時点では、ほぼすべてのeBPFコードはC言語で書かれており、それらがeBPFバイトコードにコンパイルされます†1。
[†1] eBPFプログラムは徐々にRustでも書かれつつある。なぜならRustコンパイラはeBPFバイトコードをコンパイルターゲットとしてサポートしているためだ。
概念的には、このバイトコードはカーネル内にあるeBPF仮想マシンの中で動きます。
3.1 eBPF仮想マシン
eBPF仮想マシンは、その他の仮想マシンと同じように、コンピュータをソフトウェアで実装したものです。eBPF仮想マシンはeBPFのバイトコード命令列をプログラムとして受け取り、その命令列を、システムが動作しているCPUで動くネイティブなマシン命令に翻訳します。 ...
Get 入門 eBPF ―Linuxカーネルの可視化と機能拡張 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.