2017-12-24 43 views
1

​​を使用して、処理されたパケットの数(作業と呼ばれる)を返す待ち時間をnapi_poll()として測定します。 napi_poll()の実行待ち時間の処理されたパケット数に対する比率は、ヒストグラムの形式で各パケットを処理するのに要した平均時間を示します。私は、コマンドbccツールを使用してeBPF `kretprobes`を` napi_poll() `に添付できません

argdist -H 'r:c:napi_poll():u64:$latency/$retval#avg time per packet (ns)' 私はFailed to attach BPF to kprobeをエラー与えてしまう とdmesgの中で私はkretprobesnapi_poll()に似トリック作品を添付することはできませんなぜ私がCould not insert probe at napi_poll+0: -2

のようなメッセージがちょうど骨董取得以下の使用しています

net_rx_action()

+0

シンプルなツールで試してみたいですか?例えば、 'funccount napi_poll'です。私のシステムでは、 'napi_poll'は動作しませんが、' net_rx_action'は動作します。たぶん1つはインラインで、もう1つはインラインではないからです。 – pchaigno

+0

私は他の方法でやってみて、napi_pollは決して働かなかったので、あなたは関数のインライン - ネストについて正しいと思います。 –

+0

提案で完全な回答を書くつもりですが、残念ながら、その機能を傍受することができない場合はあまりできません。 – pchaigno

答えて

2

ほとんどの場合、Failed to attach BPF to kprobeエラーはインライン関数によって発生します。 Kprobes documentation(セクションKprobes Features and Limitations)で説明したように、ターゲット関数がインライン展開されているとKprobesはアタッチできません。 napi_poll is static以降、コンパイル時にインライン化されている可能性があります。

napi_pollがインラインかされなかった場合は、カーネルシンボルにチェックすることができます。私のシステムで

$ cat /boot/System.map-`uname -r` | grep " napi_poll" 
$ 
$ cat /boot/System.map-`uname -r` | grep " net_rx_action" 
ffffffff817d8110 t net_rx_action 

net_rx_actionがない間napi_pollがインライン化されます。


目的に応じていくつかの回避策があります。

  1. あなたのカーネルを再コンパイル気にしない場合は、napi_pollがインライン化されていないことを確認するためにLinux inline attributeを使用することができます。
  2. カーネルを変更できない場合は、同じ情報を提供するnapi_pollの呼び出し関数を見つけるのが通常の回避策です。 napi_pollによって呼び出される関数は、十分な情報を提供し、インライン化されていない場合にも機能します。
関連する問題