【问题标题】:TCP_NODELAY parameter implication on MSS and CPU utilisationTCP_NODELAY 参数对 MSS 和 CPU 利用率的影响
【发布时间】:2021-03-15 06:49:28
【问题描述】:
当我尝试使用 netperf 编写测试套件时,我必须通过 manual 在下面的行中遇到选项 -D
如果使用 -D 设置 TCP_NODELAY 会影响发送大小 (-m) 大于 MSS 的测试的吞吐量和/或服务需求,则表明 TCP/IP 堆栈实现 Nagle 算法可能 被破坏,也许是逐段解释 Nagle 算法,而不是按用户发送的正确用户发送
我的问题是 - 设置 TCP_DELAY 及其对吞吐量的影响如何确定 nagle 实现被破坏?有人可以帮助我对此进行合乎逻辑的解释吗?
【问题讨论】:
标签:
linux
sockets
unix
tcp
nagle
【解决方案1】:
从广义上讲,Nagle 是这样的:
-
是本次发送中的数据量,添加到任何排队等待的数据中
要发送,大于此的最大段大小 (MSS)
联系?如果答案是肯定的,那么现在发送数据,这么久
因为发送没有其他限制,例如拥塞
窗口或接收方的广告窗口。如果答案是否定的,
然后考虑下一步:
-
连接是否“空闲”?其他
换句话说,网络上是否没有未确认的数据。如果是这样的话,
然后立即发送用户发送中的数据。如果连接不
空闲,排队数据并等待。我们知道三个中的一个或多个
事情会发生导致数据被发送:
应用程序将继续进行发送调用,我们将获得一个 MSS 价值的数据来发送。
对于当前未确认的数据,将从远程收到确认,使连接再次“空闲”。
未确认数据的重传计时器将到期,我们可能会在重传时捎带此数据。
Nagle 的要点应该是在逐个用户发送的基础上进行评估。如果禁用它会导致更高的吞吐量且发送大小大于 MSS,则意味着该堆栈的 Nagle 实现正在逐个 TCP 段地执行。