我有两台 Windows XP SP3 机器,我试图将 3k ZMQ 消息从一台机器发送到另一台机器。这些都是相当现代的系统(带有 5100 芯片组的双四核至强和带有 5500 芯片组的双六核至强),带有服务器级英特尔千兆以太网卡。
两台机器是点对点连接的,中间没有交换机或路由器。
使用 pcttcp 进行性能比较,我能够通过 TCP 从一台机器向另一台机器发送 70MB/s(56% 的利用率)。使用 ZMQ PUSH/PULL,我只能在两者之间获得 ~28MB/s。
使用同一台机器上的发送器和接收器(两者中较慢的机器)我能够达到 97MB/s 的速率。(双十六进制核心为 220MB/s)
PUSH/PULL 通道的两端都设置了 HWM。如果 HWM 大小设置为低(约 150 条消息)而不是像 1024 这样的较大值,它的性能会稍微好一些。
我尝试了 6000 字节的巨型帧,但情况更糟。(尽管@72MB/s,pcttcp 的表现略好)
我尝试将 TcpWindowSize 设置为更大的值,但它似乎也变得更糟。ZMQ 喜欢较小的尺寸,pcttcp 没有改变。TcpWindowSize 现在设置为 32K
其他参数:
- TcpAckFrequency = 1 // 没有这个就不行。
- Tcp1323Opts = 1
- 接收端缩放启用
我应该如何找到瓶颈?我应该期望通过 TCP 和 ZMQ 性能实现什么?ZeroMQ 网站性能部分详细介绍了吞吐量接近 TCP (95%+) 的测试。
任何性能提示/智慧(除了使用 linux,;-) )将不胜感激。
谢谢!!!
另一个线索:如果我在两个系统之间设置多个发送器/接收器对(相同方向,不同端口),我能够实现更高的聚合率。(总共约 42MB/s,三个)