BPFは以下のアーキテクチャでJITコンパイルをサポートしています。
アーキテクチャ | 対応カーネル |
---|---|
x86-64 | 3.16 |
ARM 64 | 3.18 |
s390 | 4.1 |
PowerPC 64 | 4.8 |
SPARC 64 | 4.12 |
MIPS | 4.13 |
ARM 32 | 4.14 |
x86-32 | 4.18 |
JIT機能を利用する場合、「CONFIG_BPF_JIT」「CONFIG_HAVE_EBPF_JIT」カーネルオプションを有効化する必要があります。また、「CONFIG_BPF_JIT_ALWAYS_ON」オプションを有効化した場合、常にJITでBPFが実行されるようになり、カーネルのコードからBPFインタープリタが除去されます。
これは、PoCで、BPFインタープリタのコードがガジェットとして利用されてしまったSpectre Variant 2対策の一環として導入された機能です。
なお、Spectre Variant 1のPoCでもeBPFが利用されていましたが、このときはJIT化されたコードを投機実行させていたため、JITの無効化が有効な対策の一つとなります。
JITの機能は以下のprocfsからコントロールできます
eBPFのJITコンパイラのコード(x86)は「arch/x86/bpf_jit_comp.c」にあります。もともとeBPFのアーキテクチャはJITがしやすいように設計されており、基本的にeBPF命令は1つのCPU命令に対応して変換されています。
今回はBPFの基礎として、BPFプログラムの作成方法、BPFの検証器、JITコンパイル機能などについて説明しました。
次回以降、本格的にBPFの機能を使っていきます。次回はネットワークに関連したBPFの利用について取り上げる予定です。
東京大学 大学院 情報理工学系研究科 博士課程
オペレーティングシステムや仮想化技術の研究に従事。
Copyright © ITmedia, Inc. All Rights Reserved.
Linux �ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス OSS 鬯ッ�ョ�ス�ォ�ス�ス�ス�ェ鬮ッ蛹コ�サ繧托スス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬮」蛹�スス�オ髫エ竏オ�コ�キ�ス�ク�ス�キ�ス�ス�ス�ケ髫エ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�ウ鬯ゥ蟷「�ス�「�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ュ鬯ゥ蟷「�ス�「髫エ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�ウ鬯ゥ蟷「�ス�「�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ー