一、引言
Linux内核网络栈是操作系统中最复杂、最精密的子系统之一。一个数据包从网卡到达用户空间,历经硬中断、软中断、协议栈解析、Socket缓冲区、系统调用等多个层次,每一层都经过精心优化。本文将深度剖析这条完整路径,并探讨如何通过内核旁路和零拷贝技术突破性能瓶颈。
二、数据包到达:从硬中断到NAPI轮询
2.1 传统中断模式的问题
早期Linux网络处理采用纯中断模式:每收到一个数据包触发一次CPU中断。在高吞吐场景下(如10Gbps网卡每秒数百万数据包),中断风暴会导致系统无法响应其他任务,产生"活锁"(livelock)。
2.2 NAPI(New API)混合模式
Linux 2.6引入NAPI机制,将中断与轮询结合:
// NAPI 结构体核心字段(简化)
struct napi_struct {
struct list_head poll_list; // 全局轮询链表
int (*poll)(struct napi_struct *, int); // 轮询函数
int weight; // 单次处理配额(默认64)
unsigned long state; // NAPI_STATE_SCHED 等状态
};
// 驱动侧:中断触发后调度NAPI
static irqreturn_t nic_handler(int irq, void *data) {
napi_schedule(

发表评论 取消回复