【问题标题】:What is the difference between "Interrupt coalescing" and the "Nagle algorithm"?“中断合并”和“Nagle 算法”有什么区别?
【发布时间】:2014-10-30 02:52:08
【问题描述】:

主要区别是什么?

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

  2. Nagle algorithm (socket options = TCP_NODELAY) - 合并来自同一连接发送数据包,即增加带宽,但增加发送延迟

    李>

【问题讨论】:

  • 他们有什么共同点?什么都想不出来。完全不相关。
  • @usr 他们有什么共同点?它们都通过合并操作/数据包来提高性能。有什么不同?第一次合并接收操作(TCP 和 UDP),但第二次合并发送操作(仅 TCP)。

标签: sockets linux-kernel latency low-latency


【解决方案1】:

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

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

所以中断合并的目的是支持更高的带宽利用率,而 Nagle 算法的目的实际上是产生更低的带宽(通过发送更少的数据包)。

【讨论】:

  • 你的意思是,Nagle 的算法实际上是在 NIC 上产生更小的数据流,但实际用户数据的带宽(吞吐量 - 最大可能的数据速率)会增加?跨度>
  • 是的。我正是这个意思。更少的数据:所以更多的东西可用于其他东西。带宽对于任何这些都不是真正的正确术语。仅当您将 1G 链路替换为 10G 链路时,带宽才会增加。 ;)
  • 是的,但是测量带宽的实用程序(sockperf、netperf、iperf)显示带宽的增长:)
猜你喜欢
  • 2010-11-03
  • 2011-02-11
  • 2011-01-26
  • 2012-03-25
  • 1970-01-01
  • 2010-12-26
  • 2021-02-16
  • 2017-07-11
  • 2011-03-10
相关资源
最近更新 更多