在IRQ合并之前,NAPI有哪些优势?

众所周知,有两种方法可以避免在高负载networking中出现硬件中断的一些开销,当硬件中断太多时,切换到它们需要很多时间。 程序风格的performance和select方法是非常重要的。

  1. NAPI(新API) – 不使用硬件中断 ,每隔一段时间轮询以太网设备。 Linux内核默认使用中断驱动模式,当进入的数据包stream量超过一定的阈值时,只能切换到轮询模式。

http://en.wikipedia.org/wiki/New_API内核可以定期检查传入networking数据包的到达而不中断 ,从而消除了中断处理的开销。

  1. 中断合并 – 使用硬件中断 ,但是如果发生中断,则禁止中断并在一段时间内开始轮询 ,之后轮询终止并且中断被激活。

https://en.wikipedia.org/wiki/Interrupt_coalescing一种技术,其中通常会触发硬件中断的事件被阻止直到一定数量的工作挂起,或超时计时器触发。

两种方法都没有明显的中断成本 – 这对于默认的中断驱动模式是有利的。

但是第二种方法 – 中断合并更合理,因为它:

  • 延迟较less – 一旦包到达,立即尝试立即处理中断,或在最近发生中断时轮询。 对面的NAPI将不会立即处理该帧,而是会等待下一轮的一定时间。

  • 较less的CPU使用率 – 仅在至less有一个数据包已经到达的情况下才开始轮询。 但是,即使帧没有收到,也不是徒劳地进行民意调查,就像做了NAPI一样。

在IRQ合并之前,NAPI有哪些优势?

Solutions Collecting From Web of "在IRQ合并之前,NAPI有哪些优势?"

我认为NAPI是中断合并的一种形式。 我想你的问题可能源于对NAPI的误解。 首先,中断涉及NAPI。 另外,NAPI的投票实际上不是“徒劳的”。 请记住,对于NAPI,这个想法是高吞吐量流量突发。 NAPI只在“数据包接收中断”发生后才“启动”。

以下是NAPI应该如何使用的简要概述:

内核会启动使用NAPI的网络设备驱动程序检测到的“数据包接收”中断。 然后,网络设备驱动程序禁用与接收数据包和使用NAPI 相关的中断 ,通知Linux网络子系统轮询设备驱动程序。 轮询功能由设备驱动程序实现,并传递给网络子系统,并包含设备驱动程序的数据包处理程序。 收到足够的数据包或达到超时后,数据包接收中断将重新启用,并且所有事件都会重新开始。

所以NAPI基本上只是Linux联网子系统中的一个集中API,用于支持中断合并以减少接收活锁情况。 NAPI为设备驱动程序开发人员提供了一个干净的中断合并框架。 NAPI并不是一直运行,而只是在流量被实际接收时发生,这基本上是一个中断合并计划。至少在我的书中。

注意 :这全部在使用NAPI的网络设备驱动程序的上下文中,但事实上NAPI可以用于任何类型的中断。 这也是NAPI的好处之一。

如果我的理解有任何错误,请随时指出!