BccとBPFでTracing
Packetとはなんなのかを理解するためにBPFをかじり始めたら どつぼにハマってしまい、とりあえずどんなことができるのかを 簡単なスクリプトを書いて試した.
目次
- bpfで関数callをhookする
- bpfで関数callの引数をtraceする
- bpfで関数呼び出しの回数を取り出す
本記事で行う作業の一般的な手順を以下に示す
- BccでBPF Bytecodeを生成する
- hook pointにBytecodeを設定する
今回はiovisor/bccを用いてtracingを行った。
bpfで関数callをhookする
以下のslankdev_test
関数の呼び出しをhookしてtracesする。
実行結果を以下に示す
bpfで関数callの引数をtrace
bpfで関数呼び出しの回数を取り出す
bpf validationについて
bpfコンパイル時に実行ファイルが無限ループでない、とか不正アクセスしていない、とかをチェックしていいるのだが、 それがいまいちどの程度作業をしているのかがまだ明確でない。ドキュメントとかをみればしっかり書いてあるのだろうが、 今後しらべておきたい。