toolsの開発に必要なことを書いておきます。BCCまわりはまだ細かいところの作りが荒いので、思わぬトラブルがあるかもしれません。pull-reqのレビュー&マージもかなり早いので、気になったところはどんどん直していっています。セットアップLinuxマシンが必要です。16.04だとビルドまわりでトラブルことが多いです。4.xのときに大きく開発が進んだ機能なので、カーネルだけ新しめのものにすることも必要かもしれません。BCCのビルドはINSTALL.mdにあるとおりです。supportが有効になります。いう構成要素で、たとえばh2oの場合、h2oバイナリに組み込まれたUSDTは次のように確認します。h2oというproviderのもとでそれぞれいくつかUSDTがある、ということがわかりますね。生きているプロセスのUSDTは次のようにして確認できます。libpthread:pthread_start...h2oバイナリのほか、リンクされているライブラリのUSDTも確認できました。眺めながら開発するだけ!実際のコードはこんな感じです。highlightや補完がなくても意外となんとかなります。h2ologはC++で書き直されました。C++のなかの文字列リテラルにCでBPFプログラムを書くという構造になってます。統合され汎用的なトレース技術となっている。kernelに組み込まれた機能。対象プロセスにアタッチして対象プロセス内で発生するイベントを取得する。BPFはカーネルに組み込まれているので、バグ修正や新機能追加の恩恵をうけるにはカーネルのアップデートが必要。machineで実行されるプログラムで、バイトコードで表現される。Collection。moduleにコンパイルする。moduleには表現力に大きな違いがあるため、実質的にはC言語のサブセットとなっている。verifierによって弾かれる。関数のスタックが非常に小さい(512バイト)。moduleのverifier。kernel内で任意のコードを実行させるため安全性を確認する必要がある。オリジナルのBPFを拡張して汎用性を高めたもの。いえばオリジナルのBPFではなくeBPFのこと。