Val*_*Roy 2 linux-kernel bpf ebpf bcc-bpf
想法是用来测量返回处理的数据包数量(称为工作)的argdist延迟持续时间。napi_poll()执行延迟与处理的数据包数量的比率napi_poll()将以直方图的形式给出处理每个数据包所需的平均时间。
我正在使用以下命令
argdist -H 'r:c:napi_poll():u64:$latency/$retval#avg time per packet (ns)'
这最终给了我错误Failed to attach BPF to kprobe,在 dmesg 中我收到类似的消息Could not insert probe at napi_poll+0: -2
我只是好奇为什么当类似的技巧适用时我无法kretprobes附加?napi_poll()net_rx_action()
大多数情况下,Failed to attach BPF to kprobe错误是由内联函数引起的。正如Kprobes 文档(第 1 节Kprobes Features and Limitations)中所解释的,如果目标函数是内联的,Kprobes 将无法附加。由于napi_poll是 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
Run Code Online (Sandbox Code Playgroud)
在我的系统上,napi_poll是内联的,而net_rx_action不是。
此问题有多种解决方法,具体取决于您的目标。
inline属性来确保napi_poll不是内联的。napi_poll提供相同信息的调用函数。如果调用 by 的函数napi_poll提供了足够的信息并且自身未内联,则该函数也可以工作。