2.3. NAPI 轮询
新的 API (NAPI)是设备驱动程序数据包处理框架的扩展,以提高传入网络数据包的效率。硬中断非常昂贵,因为它们通常会导致上下文从内核空间切换到用户空间,然后再切换回来,并且不能中断自己。即使中断合并,中断处理器也会完全垄断一个 CPU 核。使用 NAPI ,驱动程序可以使用轮询模式,而不是内核为接收的每个数据包进行硬中断。
在正常操作下,内核会发出初始硬中断,后跟一个软中断请求(SoftIRQ)处理程序,该处理程序使用 NAPI 例程轮询网卡。为防止 SoftIRQ 垄断一个 CPU 核,轮询例程有一个确定 SoftIRQ 可以使用的 CPU 时间的预算。完成 SoftIRQ 轮询例程后,内核会退出例程,并将其安排在稍后运行,以重复从网卡接收数据包的过程。