启用TCP_节点延迟的Linux环回性能
最近,我在运行一些性能测试时偶然发现了一个有趣的TCP性能问题,这些测试比较了网络性能和环回性能。在我的例子中,网络性能超过了环回性能(1Gig网络,相同子网)。在我处理的情况下,延迟是至关重要的,因此启用了TCP_节点延迟。我们提出的最好的理论是,TCP拥塞控制正在阻止数据包。我们做了一些数据包分析,我们可以肯定地看到数据包被持有,但原因并不明显。现在的问题是 1) 在什么情况下,以及为什么通过环回进行通信会比通过网络进行通信慢 2) 当尽可能快地发送时,为什么切换TCP_节点延迟对环回上的最大吞吐量的影响比网络上的影响大得多 3) 我们如何检测和分析TCP拥塞控制作为性能不佳的潜在解释 4) 关于这种现象的原因,有人有其他的理论吗?如果是,有什么方法来证明这一理论启用TCP_节点延迟的Linux环回性能,linux,networking,tcp,loopback,Linux,Networking,Tcp,Loopback,最近,我在运行一些性能测试时偶然发现了一个有趣的TCP性能问题,这些测试比较了网络性能和环回性能。在我的例子中,网络性能超过了环回性能(1Gig网络,相同子网)。在我处理的情况下,延迟是至关重要的,因此启用了TCP_节点延迟。我们提出的最好的理论是,TCP拥塞控制正在阻止数据包。我们做了一些数据包分析,我们可以肯定地看到数据包被持有,但原因并不明显。现在的问题是 1) 在什么情况下,以及为什么通过环回进行通信会比通过网络进行通信慢 2) 当尽可能快地发送时,为什么切换TCP_节点延迟对环回上的最
这里是一些简单的点到点C++应用程序生成的示例数据:
Transport Message Size (bytes) TCP NoDelay Send Buffer (bytes) Sender Host Receiver Host Throughput (bytes/sec) Message Rate (msgs/sec) TCP 128 On 16777216 HostA HostB 118085994 922546 TCP 128 Off 16777216 HostA HostB 118072006 922437 TCP 128 On 4096 HostA HostB 11097417 86698 TCP 128 Off 4096 HostA HostB 62441935 487827 TCP 128 On 16777216 HostA HostA 20606417 160987 TCP 128 Off 16777216 HostA HostA 239580949 1871726 TCP 128 On 4096 HostA HostA 18053364 141041 TCP 128 Off 4096 HostA HostA 214148304 1673033 UnixStream 128 - 16777216 HostA HostA 89215454 696995 UnixDatagram 128 - 16777216 HostA HostA 41275468 322464 NamedPipe 128 - - HostA HostA 73488749 574130 传输消息大小(字节)TCP节点延迟发送缓冲区(字节)发送方主机接收方主机吞吐量(字节/秒)消息速率(msgs/秒) 16777216主机上的TCP 128主机A主机B 118085994 922546 TCP 128关闭16777216主机A主机B 118072006 922437 4096主机上的TCP 128主机B 11097417 86698 TCP 128关闭4096主机A主机B 62441935 487827 16777216主机上的TCP 128主机主机20606417 160987 TCP 128关闭16777216主机主机239580949 1871726 4096主机上的TCP 128主机A 18053364 141041 TCP 128关闭4096主机主机主机214148304 1673033 UnixStream 128-16777216 HostA HostA 89215454 696995 UnixDatagram 128-16777216主机主机41275468 322464 命名管道128——霍斯塔霍斯塔73488749 574130 以下是更多有用的信息:- 我只看到这个小问题 信息
- HostA和HostB都有相同的 硬件套件(XeonX5550@2.67GHz,共32个核/128千兆内存/1千兆网卡)
- 操作系统是RHEL 5.4内核(2.6.18-164.2.1.el5)
- 每个包的开销是固定的(对于mac+ip+tcp报头),负载越小,开销就越大
- 许多NIC限制都与未完成数据包的数量有关,这意味着当使用较小的数据包时,您将使用更少的数据遇到NIC瓶颈
- 网络本身取决于数据包开销,因此您可以通过网络传输的最大数据量也取决于数据包的大小