线程测试之间的延迟:Linux裸机与虚拟机上的QNX



我最近对这两种设置进行了延迟比较:a( Ubuntu 16.04运行在12核心主机上;b( 一个在笔记本电脑主机上运行VMware的访客QNX(分配给QNX VM的4个内核(-我目前没有更好的QNX设置。

测试场景:10个线程运行,每个线程每30ms向随机选择的接收线程发送一条消息——消息速率确实很低;消息机制是使用条件变量实现的,每个线程都有自己的专用rx-prod-consumer队列以及自己的条件变量和互斥体,因此队列之间没有干扰。我测量消息被构造/发送到接收线程获得消息之间的时间。平均值和std_dev最小-最大值都是为每个线程捕获的。

结果出人意料地支持QNX(尽管它是在虚拟机上运行的(。10美元对40美元。

对于Linux上的线程(秒(:mean=0.000038076 std_dev=2.7523e-05 min=0.000000254 max=0.000177410 sampleSize=1023对于线程QNX(秒(:mean=0.000011351 std_dev=0.000105937 min=0.000000000 max=0.000999987 sampleSize=969

我注意到QNX端的时钟没有Linux端那么精确(分辨率方面(,因为我确实看到可测量的最小延迟是0。

我只是想知道它是否符合其他人的经验——Linux线程条件唤醒平均需要40us吗?顺便说一句,如果QNX的时间精度是100微秒,Linux是纳米秒,这种差异会影响统计数据吗?谢谢

延迟测试对硬件的敏感度(以不同的方式(比我之前认为的要高。更新的12核CPU主机启用了超线程,它产生了40us的延迟数。我换了一台旧的4 CPU,禁用了超线程,延迟数降至15-16us。这与QNX虚拟机号码处于相同的驻球范围内。我希望我能在测试中使平台更加一致,以便在未来得到更确凿的答案。

新的Linux结果:平均值=0.000015819 std_dev=1.39205e-05最小值=0.000000503最大值=0.000117652 sampleSize=1528

最新更新