跳到主要内容
英文版本为准

本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。

数字

ruststream-rumqttc 的基准测试数字测的是什么,以及不能从中得出哪些结论。

与裸客户端的对照​

同一行中的三个循环可以互相比较,因为它们在同一个进程中、交替地、对着同一台服务器运行。一行不能与另一个 Broker crate 公布的行比较:各种传输在每条消息上做的工作不同。

服务器运行在同一台机器上的容器中,走回环接口。没有网络延迟,同样的每条消息开销在时间中所占的比例,比面对跨网络的服务器时更大。应把该百分比读作已部署服务所付代价的上界。

标为 无法区分 的行,其各循环之间的差异小于各轮之间的波动。低于这一噪声的数字会显得具有从未测得的精度,因此不予公布。

受 Broker 限制 的行表示消费者在运行的大部分时间里都在等待服务器。本 crate 和运行时的工作于是发生在这段等待之内,测出的差异接近零。这是开销的下界,而不是对它的测量。QoS 1 投递需要一次往返,QoS 0 投递不需要,所以只有 QoS 1 那一行可能被标记。

代码的开销​

指令计数包含本 crate 的代码、它上面的运行时,以及 rumqttc 在服务线程上的工作:事件循环的读取、报文解码、分发和 PUBACK。由于服务器是真实的,它在各次运行之间会有少许变动。同样的计数在缓存未命中处要花更多时间,因此计数不等于时间。

每个数字都是稳态,即 500 次投递的运行与 1000 次投递的运行之差。连接、订阅以及它们背后的首批内存分配属于冷启动,只付一次。

它们不意味着什么​

一行就是一个订阅读取一个主题,消息体很小,服务器只有一台。它测量的是一次投递在本 crate 内部的开销,而不是 MQTT 能承载多少。

共享组、重叠的过滤器、一组工作分区和 QoS 2 各自回答不同的问题,这个对照不测量其中任何一个。代码图在同一测试环境上统计批处理器和应答。

这些数字是一台机器在某一天的快照,构建信息记录在旁边。它们在机器上没有其他基准测试时手动重新测量,平均负载记录在旁边。负载高的机器会拉大各轮之间的波动,落在波动范围内的一行记为 indistinguishable。