You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法通过ftrace追踪指定函数dev_gro_receive?

ftrace无法追踪dev_gro_receive()的常见原因
  • 函数被内联编译:内核编译时,若dev_gro_receive()被编译器自动优化为内联函数(或代码中显式标记inline),ftrace的function_graph追踪无法捕获这类函数——因为内联函数不会以独立的函数调用节点存在于指令流中。而bpftrace基于eBPF的kprobe机制,即使函数内联也能通过探针触发捕获。可执行cat /proc/kallsyms | grep dev_gro_receive验证:若输出无对应符号或符号类型异常,大概率是内联导致。

  • 函数不在ftrace支持的追踪列表中:ftrace仅能追踪内核编译时开启了ftrace钩子的函数。执行cat /sys/kernel/tracing/available_filter_functions | grep dev_gro_receive,若无结果,说明该函数未被添加到ftrace的可追踪集合,可能是编译内核时未开启相关ftrace选项,或函数被特殊编译处理跳过了钩子注入。

  • 追踪范围限制:若ftrace设置了特定PID或CPU过滤,而dev_gro_receive()在受限范围外的上下文(如软中断、内核线程)执行,就不会被记录。检查cat /sys/kernel/tracing/set_ftrace_pid,若输出非0则仅追踪指定进程;检查cat /sys/kernel/tracing/set_ftrace_cpu,若输出非全CPU列表则仅追踪指定CPU。

  • trace buffer被覆盖:dev_gro_receive()属于网络路径高频调用函数,若ftrace的buffer容量过小,其调用记录可能被后续高频出现的idle_cpu()等函数记录覆盖。可先增大buffer:echo 1024000 > /sys/kernel/tracing/buffer_size_kb,再清空trace:echo > /sys/kernel/tracing/trace,触发网络流量后重新查看。

内容的提问来源于stack exchange,提问作者user2233706

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:03:17