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

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

数字

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

与裸客户端的对照​

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

文件位于同一台机器上,从热的页缓存中读取。没有网络,也不等待设备,同样的每条消息开销在时间中所占的比例,比在较慢的磁盘上更大。应把该百分比读作已部署服务所付代价的上界。

重放这一行的负数并不表示客户端更快。本 crate 在单独的任务上预读,而裸循环在同一个任务里读取和处理。这是两个循环结构上的差异,而不是对本 crate 开销的测量。

受存储限制 的行表示裸客户端在运行的大部分时间里都在等待追加。本 crate 和运行时的工作于是发生在这段等待之内,测出的差异接近零。这是开销的下界,而不是对它的测量。

代码的开销​

指令计数包含本 crate 的代码、它上面的运行时,以及在服务线程上运行的那部分客户端代码。同样的计数在缓存未命中处要花更多时间,因此计数不等于时间。

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

应答追加到订阅所读的同一个文件中。读取者在读向下一条消息的途中会跳过它,应答这一行也统计了这部分读取。

它们不意味着什么​

一行就是一个订阅读取一个文件中的一个流键,消息体很小。它测量的是一次投递在本 crate 内部的开销,而不是磁盘能以多快的速度读取。

一个文件中的多个流键、一组工作分区,以及对照中的批处理器,各自回答不同的问题,这个对照不测量其中任何一个。代码图在同一个文件上统计批处理器和应答。

这些数字是一台机器在某一天的快照,构建信息记录在旁边。它们在一台只做这次运行的机器上手动重新测量:它们显示的差异小于共享机器的噪声。