TWOBUFQUEUE · 文档

性能报告怎么看

这里分别测两件事:生产者发送消息有多快,以及连续发送一批消息后,生产者自己的业务会被拖慢多少。两种结果回答不同问题,应分别阅读。

中文首页 · 全部报告 · 完整测量证据

本页目录

一、想了解哪种性能

你关心什么 看哪份报告
连续循环提交很多条消息 WriteSession 与开源队列对比
允许一批消息再发布 仅块交接发布的对比
每条消息都发布写入位置 每条发布的对比
发送后,核心业务还能不能跑得快 连续发送对业务性能的影响

前三份使用 256 MiB 第二层/开源槽位容量、空回调、三次独立测量。每份报告给 8/16/32/64 B 消息选择同一组 TwoBufQueue 参数;不同报告之间参数可能不同,不能把差值看成仅改变一个开关的收益。

二、写入性能表中的数字

指标 表示什么 怎么比较
吞吐 M条/s 一秒可提交多少百万条消息 越大越好
p50 ns 50% 的计时组,其平均每次写入耗时不超过此值 越小越好,表示典型开销
p99 / p999 ns 99% / 99.9% 的计时组,其平均每次写入耗时不超过此值 越小越好,观察慢组
背压% 被统计为遇到背压的消息数 ÷ 总消息数 观察写入是否受到容量不足影响

每组计时 1,000 次写入,再除以 1,000。这些分位数属于“组平均写入开销”,不是单次调用的延时,也不是消息发送到回调之间的时间。三次独立测量各算指标,再取平均。

写入计时包含申请块、换块,以及测量期间的等待;每轮发送后的排空在计时外。复制线程和消费线程在发送期间也在运行。

三、业务性能表中的数字

流程是:正常执行业务函数 → 连续发送一批消息 → 立刻执行同样的业务函数。每批从零积压开始,消费者持续运行,测量结束后才在计时外排空。

固定使用 32 B 消息、48 KiB 业务数据、64 次回调循环。TwoBufQueue 第一层 16 KiB、第二层 256 MiB;开源队列的槽位容量为 256 MiB。每批发送 2/4/8/16 MiB。

表格列 含义
耗时 ns/次 发送后业务执行的组平均 p50,越低越好
比值 发送后业务耗时 ÷ 正常参考耗时 13 ns

业务每组调用 16 次;各轮计算 p50 后对三轮取平均。它说明队列发送对后续业务的影响,不是队列写入开销。旧的预填大积压实验从约 198–205 MiB 积压开始,与当前报告起点不同。

四、参数与环境为什么要一起看

第一层和第二层是两项独立容量。还应看消息长度、块大小、发布策略、当前块扫描、回调负载、线程数量和调度方式。它们都可能显著改变结果。

保存的本机报告明确列出硬件、系统、编译器和完整初始化参数;本机用高 QoS,未硬绑核。不同机器需要自行测量,历史报告不能直接替换当前配置的结果。外部消息的复制方式也影响开源队列成绩,完整调用方式见测量证据。

五、在自己的机器重现

业务影响测试可以从项目根目录一次运行:

Shell
python3 benchmarks/burst/run_burst_empty.py --profile docs/performance_data/burst_from_empty_20261013/selected_config.json

程序会运行测试并保存结果、参数与校验数据。它需要已准备的性能测试构建和固定版本依赖;安装、构建步骤见业务测试说明。

普通写入、Session 和参数遍历见完整可调测试说明。报告附带原始数据与源码哈希,压缩数据可以用 python3 tools/unpack_performance_data.py 还原。重新生成图表只读取保存的数据,不会重新做性能测试。