2014-09-05 129 views
3

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

  1. Interrupt coalescing (ethtool -C eth1 rx-usecs 0) - 聚结接收分组从不同连接,即增加bandwitdh,但增加的等待时间接收

  2. Nagle algorithm (socket options = TCP_NODELAY) - 聚结发送分组从相同的连接,即增加bandwitdh,但增加发送的等待时间

+0

他们有什么共同点?想不出任何事情。完全不相关。 – usr 2014-09-06 23:24:42

+0

@usr他们有什么共同点?它们都通过合并操作/数据包来提高性能。有什么不同?首先合并接收操作(TCP和UDP),但第二次合并发送操作(仅限TCP)。 – Alex 2014-09-12 11:55:40

回答

3

中断合并涉及网络驱动程序:其思想是避免每次出现网络数据包时重新调用中断处理程序。相反,在接收到一个数据包之后,NIC等待直到接收到M个数据包,或者在产生中断之前经过N微秒。然后驱动程序可以一次处理多个数据包。 (否则,在现代千兆和万兆适配器的情况下,处理器每秒需要处理数十万甚至数百万个中断,这可能会阻止系统完成其他任务。)正如您的链接指出的那样, (或至少可能)额外等待时间的成本,因为OS在最早的可能时刻不开始处理接收的分组。

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

因此中断合并的目的是为了支持更大带宽利用率,同时Nagle算法的目的实际上是产生更低的带宽(通过发送更少的数据包)。

+0

您的意思是,Nagle的算法实际上是在NIC上产生更小的数据流,但实际用户数据的带宽(吞吐量 - 最大可能数据速率**)增加了? – Alex 2014-09-06 19:46:14

+0

是的。我正是这个意思。更少的数据:更多可用于其他的东西。带宽并不是真正适合这一切的正确术语。例如,如果用10G链路替换1G链路,带宽只会增加。 ;) – 2014-09-18 15:06:34

+0

是的,但测量带宽的工具(sockperf,netperf,iperf)显示**带宽的增长** :) – Alex 2014-09-18 15:51:12

相关问题