首页 > 解决方案 > TCP_NODELAY 参数对 MSS 和 CPU 利用率的影响

问题描述

当我尝试使用 netperf 编写测试套件时,我必须仔细阅读手册,在该手册中我遇到了以下行以供选择-D

如果使用 -D 设置 TCP_NODELAY 会影响发送大小 (-m) 大于 MSS 的测试的吞吐量和/或服务需求,则表明 TCP/IP 堆栈的 Nagle 算法实现可能被破坏,可能解释了 Nagle 算法一个段一个段的基础,而不是正确的用户发送一个用户发送的基础

我的问题是 - 设置 TCP_DELAY 及其对吞吐量的影响如何确定 nagle 实现被破坏?有人可以帮助我对此进行合乎逻辑的解释吗?

标签: linuxsocketsunixtcpnagle

解决方案


从广义上讲,Nagle 类似于:

  1. 此发送中的数据量,添加到任何排队等待发送的数据中,是否大于此连接的最大分段大小 (MSS)?如果答案是肯定的,那么现在发送数据,只要发送没有其他限制,例如拥塞窗口或接收方的通告窗口。如果答案是否定的,那么考虑下一步:

  2. 连接是否“空闲”?换句话说,网络上是否没有未确认的数据。如果是这样,那么现在发送用户发送中的数据。如果连接不是空闲的,则将数据排队并等待。我们知道三件事中的一件或多件会导致数据被发送:

    应用程序将继续进行发送调用,我们将获得一个 MSS 价值的数据来发送。

    对于当前未确认的数据,将从远程收到确认,使连接再次“空闲”。

    未确认数据的重传计时器将到期,我们可能会在重传中捎带这些数据。

Nagle 的要点应该是在逐个用户发送的基础上进行评估。如果禁用它会导致更高的吞吐量和大于 MSS 的发送大小,这意味着该堆栈的 Nagle 实现正在逐个 TCP 段地执行 TCP 段。


推荐阅读