“中断合并”和“Nagle算法”有什么区别?

时间:2014-09-05 07:51:25

标签: sockets linux-kernel latency low-latency

主要区别是什么?

  1. Interrupt coalescing (ethtool -C eth1 rx-usecs 0) - 合并来自不同连接收到的数据包,即增加bandwitdh,但会增加接收的延迟

    < / LI>
  2. Nagle algorithm (socket options = TCP_NODELAY) - 合并来自相同连接已发送数据包,即增加bandwitdh,但会增加发送的延迟

1 个答案:

答案 0 :(得分:3)

中断合并涉及网络驱动程序:我们的想法是避免每次网络数据包出现时重新调用中断处理程序。相反,在收到数据包后,NIC会等待,直到收到M个数据包或者直到N微秒已经过去才产生中断。然后驱动程序可以一次处理许多数据包。 (否则,对于现代千兆位和10千兆位适配器,处理器需要每秒数十万或数百万次中断,这可能会阻止系统完成其他任务。)正如您的链接指出的那样,有(或者至少可能是)额外延迟的成本,因为操作系统不会在尽可能早的时刻开始处理接收到的数据包。

Nagle的算法专注于减少通过将来自多个数据包的有效载荷数据合并为一个而发送的数据包的数量。典型的例子是telnet会话。如果没有Nagle,每次按一个键,系统都必须创建一个全新的数据包(在以太网上最少64个字节)来发送一个字节。

因此,中断合并的目的是支持更大的带宽利用率,而Nagle的算法的目的实际上是产生更低的带宽(通过发送更少的带宽)分组)。