首页 文章

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

提问于
浏览
1

我正在使用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 . (我通过带有时间戳的打印日志获得结果)

有人可以解释这两者之间的区别吗?

EDIT: 我发现问题0mq: pubsub latency continually growing with messages?结果给出了几乎恒定的0.00015s延迟,即150us,与我的测试相同,是官方性能测试的10倍 . 为什么有区别?

1 回答

  • 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微秒 . 起初我以为连接正在重新 Build 在每条消息上,但事实并非如此 . 所以我把注意力转向接收器......

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

    通过添加ZMQ_NOBLOCK并在艰难的while循环中进行轮询,我将时间缩短到100us . 这仍然看起来很大,而且它的代价是飙升一个核心 . 但我确实觉得我对问题的理解稍微好一些 . 任何见解将不胜感激 .

相关问题