Linux 4.15中ftrace显示napi_gro_receive在不同进程上下文是否正常?
napi_gro_receive()在和ksoftirq上下文执行是否符合预期?
这种现象完全符合Linux 4.15内核的行为逻辑,原因如下:
ksoftirq上下文是常规执行路径:网卡收到数据包触发硬中断后,硬中断处理函数会标记NAPI调度请求,随后NET_RX_SOFTIRQ软中断触发时,ksoftirqd进程会执行
napi_poll,进而调用napi_gro_receive,这是最常见的场景。上下文是内核优化后的路径 :Linux内核NAPI机制带有预算控制(默认64个数据包),当ksoftirqd处理完一轮预算后,如果网卡仍有未处理的数据包,且当前CPU处于idle状态,内核会直接在idle进程上下文继续执行napi_poll(避免频繁调度ksoftirqd进程带来的开销),此时napi_gro_receive就会运行在<idle>-0的上下文里。
你的ftrace配置通过set_graph_function追踪了所有带gro_receive的函数,因此捕获到这两种不同调用路径属于正常情况。
内容的提问来源于stack exchange,提问作者CarloC
相关产品推荐
相关产品推荐

