gpt4 book ai didi

linux-kernel - 无法使用密件抄送工具将 eBPF `kretprobes` 附加到 `napi_poll()`

转载 作者:行者123 更新时间:2023-12-02 20:33:12 24 4
gpt4 key购买 nike

想法是使用argdist来测量napi_poll()的延迟持续时间,它返回已处理的数据包数量(称为工作)。 napi_poll() 的执行延迟与处理的数据包数量之比将以直方图的形式给出处理每个数据包所需的平均时间。

我正在使用以下命令

argdist -H 'r:c:napi_poll():u64:$latency/$retval#每个数据包的平均时间 (ns)'
最终给我错误 Failed to Attach BPF to kprobe 并且在 dmesg 中我收到类似 Could not insertprobe at napi_poll+0: -2

的消息

我只是好奇为什么当类似的技巧适用于 net_rx_action() 时我无法将 kretprobes 附加到 napi_poll()

最佳答案

大多数情况下,Failed to Attach BPF to kprobe 错误是由内联函数引起的。正如 Kprobes documentation 中所述(Kprobes 功能和限制部分),如果目标函数被内联,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 则不是。


根据您的目标,此问题有多种解决方法。

  1. 如果您不介意重新编译内核,可以使用 Linux inline attribute确保 napi_poll 未内联。
  2. 如果您无法更改内核,通常的解决方法是找到提供相同信息的 napi_poll 调用函数。如果 napi_poll 调用的函数提供了足够的信息并且本身未内联,那么它也可以工作。

关于linux-kernel - 无法使用密件抄送工具将 eBPF `kretprobes` 附加到 `napi_poll()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47963531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com