December 2023
Intermediate to advanced
228 pages
3h 33m
Japanese
前章では、BCCフレームワークを用いて簡単なeBPFの「Hello World」を確認しました。本章ではすべてC言語で書かれた「Hello World」プログラムの例を示し、BCCが水面下に隠している処理の詳細を理解できるようにします。
この章ではeBPFプログラムのソースコードが実行されるまでに何が起きているのかについても述べます。これを図示したのが図3-1です。
図3-1 C言語(もしくはRust)のソースコードはeBPFのバイトコードにコンパイルされ、実行時にネイティブの機械語命令にJITコンパイルあるいは逐次翻訳される
eBPFプログラムはeBPFバイトコードの命令列です。アセンブリ言語でプログラムを書くように、eBPFプログラムをこのバイトコードで書くこともできます。ただし普通はバイトコードよりも扱いやすい高水準プログラミング言語を使います。少なくとも本書執筆時点では、ほぼすべてのeBPFコードはC言語で書かれており、それらがeBPFバイトコードにコンパイルされます†1。
[†1] eBPFプログラムは徐々にRustでも書かれつつある。なぜならRustコンパイラはeBPFバイトコードをコンパイルターゲットとしてサポートしているためだ。
概念的には、このバイトコードはカーネル内にあるeBPF仮想マシンの中で動きます。
eBPF仮想マシンは、その他の仮想マシンと同じように、コンピュータをソフトウェアで実装したものです。eBPF仮想マシンはeBPFのバイトコード命令列をプログラムとして受け取り、その命令列を、システムが動作しているCPUで動くネイティブなマシン命令に翻訳します。 ...
Read now
Unlock full access