【问题标题】:zeromq performance test. What's the accurate latency?zeromq 性能测试。什么是准确的延迟?
【发布时间】:2015-06-05 07:20:25
【问题描述】:

我正在使用 zmq 跨进程传输消息,我想做一些性能测试来获得延迟和吞吐量。

官网给指导告诉How to Run Performance Tests

例如,我试过:

local_lat tcp://*:15213 200 100000
remote_lat tcp://127.0.0.1:15213 200 100000

并得到结果:

message size: 200 [B]
roundtrip count: 100000
average latency: 13.845 [us]

但是在 C++ 中尝试pub-sub example 时,我发现发送和接收之间的时间间隔约为 150us。 (我通过带时间戳的打印日志得到结果)

谁能解释这两者之间的区别?

编辑: 我发现了0mq: pubsub latency continually growing with messages?这个问题,结果给出了一个几乎恒定的延迟0.00015s,也就是150us,和我的测试一样,是官方性能测试的10倍。为什么有区别?

【问题讨论】:

  • StackOverflow 社区原则的一个重要而重要的特点是,成员必须提交一个 MCVE(一个最小完整可验证示例)代码/数据,以证明主题。您可能需要更新您的帖子以满足这一点,并对贡献成员表示尊重,他们是热衷于解决 MCVE 相关问题的专业人士。 无论如何,cssmlulu,享受成为这个伟大社区的积极成员,StackOverflow 无疑是。

标签: zeromq


【解决方案1】:

我也有同样的问题:ZeroMQ - pub / sub latency

我在示例代码上运行了 wireshark,它每秒发布一条 zeromq 消息。这是wireshark的输出:

145  10.900249     10.0.1.6 -> 10.0.1.6     TCP 89 5557→51723 [PSH, ACK] Seq=158 Ack=95 Win=408192 Len=33 TSval=502262367 TSecr=502261368
146  10.900294     10.0.1.6 -> 10.0.1.6     TCP 56 51723→5557 [ACK] Seq=95 Ack=191 Win=408096 Len=0 TSval=502262367 TSecr=502262367
147  11.901993     10.0.1.6 -> 10.0.1.6     TCP 89 5557→51723 [PSH, ACK] Seq=191 Ack=95 Win=408192 Len=33 TSval=502263367 TSecr=502262367
148  11.902041     10.0.1.6 -> 10.0.1.6     TCP 56 51723→5557 [ACK] Seq=95 Ack=224 Win=408064 Len=0 TSval=502263367 TSecr=502263367

如您所见,发送和确认每条消息大约需要 45 微秒。起初我以为每条消息都会重新建立连接,但事实并非如此。于是我把注意力转向了接收器……

while(true)
    if(subscriver.recv(&message, ZMQ_NOBLOCK)) {
        // print time
    }
}

通过添加 ZMQ_NOBLOCK 并在硬 while 循环中进行轮询,我将时间缩短到 100us。这似乎仍然很大,而且是以增加一个核心为代价的。但我确实觉得我对这个问题的理解稍微好一些。任何见解将不胜感激。

【讨论】:

  • 100us 接缝类似于我的实验。但你所说的“尖刺一个核心的价格”是什么意思?
  • 行:while(true) { 将以 100% 运行 CPU 内核之一。
  • 另外,我深入分析了 zeromq 代码并获得了一些见解。你用的是mac吗?
猜你喜欢
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
相关资源
最近更新 更多