Packets are too Fast

slankdevの報告

BccとBPFでTracing

Packetとはなんなのかを理解するためにBPFをかじり始めたら どつぼにハマってしまい、とりあえずどんなことができるのかを 簡単なスクリプトを書いて試した.

目次

  • bpfで関数callをhookする
  • bpfで関数callの引数をtraceする
  • bpfで関数呼び出しの回数を取り出す

本記事で行う作業の一般的な手順を以下に示す

  1. BccでBPF Bytecodeを生成する
  2. hook pointにBytecodeを設定する

今回はiovisor/bccを用いてtracingを行った。

bpfで関数callをhookする

以下のslankdev_test関数の呼び出しをhookしてtracesする。

gist.github.com

実行結果を以下に示す

bpfで関数callの引数をtrace

gist.github.com

bpfで関数呼び出しの回数を取り出す

gist.github.com

bpf validationについて

bpfコンパイル時に実行ファイルが無限ループでない、とか不正アクセスしていない、とかをチェックしていいるのだが、 それがいまいちどの程度作業をしているのかがまだ明確でない。ドキュメントとかをみればしっかり書いてあるのだろうが、 今後しらべておきたい。