想法是使用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()
?
答案 0 :(得分: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
在我的系统上,napi_poll
是内联的,而net_rx_action
则不是。
此问题有几种解决方法,具体取决于您的目标。
inline
attribute确保内联napi_poll
。napi_poll
调用函数。 napi_poll
调用的函数如果提供了足够的信息并且没有内联,也可以工作。