“Interrupt coalescing”和“Nagle算法”有什么区别?

3

它们有什么共同点?想不出来。完全没有关联。 - usr
@usr 它们有什么共同点?它们都通过合并操作/数据包来提高性能。有什么区别?第一个合并接收操作(TCP和UDP),但第二个合并发送操作(仅限TCP)。 - Alex
1个回答

3
中断合并涉及网络驱动程序:其思想是避免每次出现网络数据包时都重新调用中断处理程序。相反,在接收到数据包后,网卡会等待收到M个数据包或N微秒过去后才生成中断。然后驱动程序可以一次处理多个数据包。(否则,对于现代 gigabit 和 10-gigabit 适配器,处理器需要每秒处理数十万甚至数百万个中断,这可能会阻止系统能够完成其他任务。)正如您的链接指出的那样,额外的延迟成本可能会产生(或者至少可能会产生),因为操作系统不会在最早可能的时刻开始处理接收到的数据包。
Nagle 算法专注于通过将多个数据包的有效负载数据聚合到一个数据包中来减少发送的数据包数量。典型的例子是 telnet 会话。如果没有 Nagle,每次按下键时,系统都必须创建一个完整的新数据包(以太网上最小为 64 字节)来发送一个字节。
因此,中断合并的目的是支持更大的带宽利用率,而 Nagle 算法的目的实际上是通过发送较少的数据包来降低带宽利用率。

你的意思是,Nagle算法实际上是为了在NIC上产生更小的数据流,但实际用户数据的带宽(吞吐量-最大可能数据速率)会增加? - Alex
是的,这就是我的意思。数据越少,就有更多的空间用于其他东西。带宽并不是任何一个方面的正确术语。只有当你用10G链接替换1G链接时,带宽才会增加。;) - Gil Hamilton
是的,但衡量带宽的实用工具(sockperf、netperf、iperf)显示出了带宽的增长。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接