众所周知,有两种方法可以避免高负载网络中硬件中断的一些开销,当硬件中断过多时,切换到它们会花费太多时间。这对于性能和选择编程风格的方法非常重要。NAPI 与自适应中断
- NAPI(新 API)-不使用硬件中断, 和民意调查每隔一定时间对以太网设备进行一次轮询。Linux 内核默认使用中断驱动模式,只有当传入数据包的流量超过某个阈值时才切换到轮询模式。
http://en.wikipedia.org/wiki/New_API 内核可以定期检查用于接收网络数据包不受干扰,从而消除了中断处理的开销。
https://en.wikipedia.org/wiki/Interrupt_coalescing一种技术,其中事件通常会触发硬件中断被阻止, 任何一个直到达到一定数量工作尚未完成,或超时计时器触发。
这两种方法都没有显著的中断成本——这是默认中断驱动模式的优势。
但第二种方法——中断合并更为合理,因为:
更少的延迟- 一旦数据包到达,中断发生时立即尝试处理,或者如果中断最近发生,则轮询它。相反的 NAPI 不会立即处理该帧,而是等待一段时间进行下一次轮询。
更少的 CPU 使用率- 仅当至少有一个数据包已经到达时才启动轮询。但即使没有收到帧,轮询也不会是徒劳的,就像 NAPI 一样。
IRQ Coalesce 之前的 NAPI 有什么优点?