Open5
eBPFについて
bpf_trace_printk()は常に/sys/kernel/debug/tracing/trace_pipeという擬似ファイルに出力する
BPF Map は「クラシックな」BPFには存在しないデータ構造で
ユーザー空間 - eBPFプログラム 間
eBPFプログラム - eBPFプログラム 間
で共有(アクセス)可能
以下にさまざまな種類のBPF Mapが定義されている
BPF maps are accessed from user space via the bpf syscall, which provides commands to create maps, lookup elements, update elements and delete elements.
ユーザー空間からはbpf
システムコールで操作できる
https://github.com/iovisor/bcc)
BCC (- eBPFプログラムをコンパイル・syscallのイベントにアタッチする便利ツール
- PythonでeBPFプログラム(C言語風)のコードを書き、C言語に変換する
- さらにkprobeによってアタッチする
インストール大変だった、、
- Dockerでうまくインストールできるかと思いきや、MacOS (Apple Silicon) のLinuxkit系のカーネルにlinux-headersが用意されていなく、今回はUTM(https://mac.getutm.app/) でVMを立ち上げて
Linux(Debian)上で動かした (ケチってクラウドのVMインスタンス使わなかった)
- eBPFは仮想マシン上でプログラムをコンパイル・実行している
- CPUのアーキテクチャに合わせて命令セットとレジスタが設計されている
- 0 〜 9のレジスタをもつ
- Mapはカーネルのメモリ上に常に配置されているため、グローバル変数として利用される
- Mapは他のプログラムからもアクセス可能