eBPFはおそらくあなたが望むものです。まだ見つからない場合は、bcc ( BPF Compiler Collection ) ツールで提供されている例を参照してください。
特に、サンプル ツールargdist
は実際に kprobes に依存しており、興味深いものになる可能性があります。
argdist は、指定した関数をプローブし、パラメーター値をヒストグラムまたは頻度カウントに収集します。これを使用して、特定のパラメーターが取る値の分布を理解したり、デバッガーを接続せずに興味深いパラメーターをフィルター処理して出力したり、さまざまな関数の一般的な実行統計を取得したりできます。
たとえば、アプリケーションで一般的な割り当てサイズを見つけたいとします。
# ./argdist -p 2420 -C 'p:c:malloc(size_t size):size_t:size'
[01:42:29]
p:c:malloc(size_t size):size_t:size
COUNT EVENT
[01:42:30]
p:c:malloc(size_t size):size_t:size
COUNT EVENT
[…]
( argdist の例からの抜粋は、 を使用しています)。
記録として、これまでに eBPF で見つけたほとんどの例は、これらの場所のいずれかにありました。
- Linux
linux/samples/bpf
カーネル ソース内。
bcc/tools
bccのディレクトリにあります。
- (ネットワークの例については、iproute2 パッケージ ソースのディレクトリの
tc
下にあります。)iproute2/examples/tc