zeromq性能测试。什么是准确的延迟?

时间:2015-06-05 07:20:25

标签: zeromq

我正在使用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倍。为什么有区别?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题: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。这仍然看起来很大,而且它的代价是飙升一个核心。但我确实觉得我对问题的理解稍微好一些。任何见解都将不胜感激。