TWOBUFQUEUE / PERFORMANCE NOTES

256 MiB 缓存 · 回调时间校准 · 单块 Session 双重循环

固定长度、不写长度前缀的 TwoBufQueue,与三种开源 SPSC 队列对比。TwoBufQueue 包含完整第二层复制与独立回调线程;第三方使用原生消费线程逐条回调。

10 百万条 / 次5 次平均 / 指标8 B / 16 B / 32 B / 64 Bpublish_count = 4294967295不逐条 flush · 轮末计时外交接高 QoS · 未硬绑核

先看负载复制的敏感性

8 MiB、空回调的独立 A/B:每次 1,000 万条,5 次平均;只改外部 Payload 复制构造,完整校验通过。

这是此前两种复制方式的独立实验,未使用本次新增的写预取;不计入本轮主表运行次数;记录时间:2026-10-11T00:16:44.565737+08:00。

本次正式表格固定采用 完整负载复制;rigtorp 可选目标写预取,ReaderWriterQueue 可选先清零再 memcpy。仅改变复制构造就能显著改变部分开源队列的结果。后面的差距包含负载类型与编译器代码生成的影响,不能将它全部算成队列算法的优势。具体处理器层面的原因尚未确定;默认复制构造的额外校验也未消除异常。
实现 / 长度成员初始化 · p50 ns构造函数体 memcpy · p50 ns
ReaderWriterQueue · 8 B1.2922.192
rigtorp/SPSCQueue · 8 B22.1002.625
atomic_queue · 8 B5.4335.475
ReaderWriterQueue · 16 B9.4001.292
rigtorp/SPSCQueue · 16 B23.4752.658
atomic_queue · 16 B6.8586.842
ReaderWriterQueue · 32 B19.6331.675
rigtorp/SPSCQueue · 32 B23.4923.233
atomic_queue · 32 B8.4508.667
ReaderWriterQueue · 64 B2.9673.500
rigtorp/SPSCQueue · 64 B20.9834.317
atomic_queue · 64 B10.66710.592

两个版本的默认成员都有 bytes{};构造函数体 memcpy 版本会先执行默认初始化。全部试验保留,没有按队列分别选择复制方式。对照汇总 · 144 次原始记录 · 对照源码

按消息长度查看吞吐

条形长度仅在同一消息长度内比较。单位 M条/s = 每秒百万条消息。

160 次正式测量16 次负载校验消息计数 / FIFO 校验通过写入失败为 0p999 样本量提示

TwoBufQueue 的第一层与第二层各 256 MiB,合计 512 MiB;三种开源 SPSC 请求 256 MiB。ReaderWriterQueue 会按内部块容量略微取整。

逐长度以 TwoBufQueue 的吞吐测量为基准,以整轮回调区间达到写线程时间的 2~3 倍为校准目标,未达到时保留实际值;该长度的四个实现使用同一循环次数。其他实现写入速度不同,其时间比可以不在 2~3 倍内。

逐长度校准结果:8 B:1 次循环,校准时间比 3.09×(目标未达到);16 B:1 次循环,校准时间比 2.17×;32 B:2 次循环,校准时间比 1.95×(目标未达到);64 B:4 次循环,校准时间比 2.38×。

本次是普通 write 与单块 Session 的同参数对照,没有重新寻优。吞吐和各延时指标使用同一构造配置。

同缓存的两份报告共享本次实测的开源对照数据;没有使用历史成绩。

每层数据池严格为 256 MiB;原生队列的保留槽与 rigtorp 首尾 padding 纳入这个 payload 存储预算,队列元数据和输入另计。

Session 正常遇到块满返回 insufficient_space,次数记入 session_block_exhaustions;这不是背压或丢消息。池/队列受压通过 Writer 内部压力统计报告。

rigtorp_write_prefetch 在完整参数中记录;开关在测试开始前选择模板,普通复制和带提示构造都只复制一次完整负载,不额外写零。atomic_queue 保持原有调用。

ReaderWriterQueue 16/32 B 使用 copy_after_zero:队列槽位默认清零后 memcpy 一次完整负载;8/64 B 保留成员复制。清零和复制均在写入计时内。各实现的调用端优化在行标签和完整参数中公开,不能把所有差异归因于队列算法。

get_current_session → 内层逐条写 → 空间不足退出 → 外层 get_next_session。获取、等待、换块与 Session 状态归还包含在写入计时中。分组延时跨块继续计时,没有在块边界提前结束计时组。

不主动 flush;flush 只发布位置,不切换 block。每轮尾部在计时外 finish_block,最后一轮 finish,关闭 current 扫描也能收齐尾部。

回调循环以普通 write 校准后固定,同一长度的 Session 和全部开源实现都使用相同次数;Session 写端变快时,实际回调/写入时间比可以超过 3。

本轮全部重新测量于提交 f698f25:只取消测试框架六个 lambda 的强制内联,Writer::write 的内联和库代码保持原样。8 B 回退的对照、历史源码与结论边界见 docs/performance_data/twobufqueue_8b_regression_20261011;本轮没有使用历史成绩替换。

本轮合计 400 次独立正式测量、40 次完整负载/FIFO 校验、45 次回调校准;同缓存的普通 write 与 Session 共享本轮开源数据,因此四份报告显示的运行次数不可直接相加。

本轮 8/16/32/64 B 的回调循环固定为 1/1/2/4 次,普通 write 校准时间比分别约 3.09/2.17/1.95/2.38;8 B 与 32 B 略超出 2~3 倍目标范围,保留实际结果,不再挑选测量。

消息长度
8 B吞吐 · M条/s
TwoBufQueue
2,383.59
ReaderWriterQueue
817.50
rigtorp/SPSCQueue
301.97
atomic_queue
189.63
16 B吞吐 · M条/s
TwoBufQueue
1,089.93
ReaderWriterQueue
572.91
rigtorp/SPSCQueue
293.66
atomic_queue
121.32
32 B吞吐 · M条/s
TwoBufQueue
456.44
ReaderWriterQueue
397.57
rigtorp/SPSCQueue
182.68
atomic_queue
80.03
64 B吞吐 · M条/s
TwoBufQueue
299.51
ReaderWriterQueue
104.86
rigtorp/SPSCQueue
122.45
atomic_queue
73.80

吞吐与写入耗时

每个指标先按单次运行计算,再取 5 次算术平均。TwoBufQueue 整行加粗并加边框。

实现吞吐
M条/s · 下方为范围
有效负载
GB/s
p50
ns / 次
p99
ns / 次
p999
ns / 次
回调区间 / 写入
墙钟时间比
回调循环
次 / 消息
分轮
轮 / 运行
8 B回调循环 1 次 · 每次 1 轮 · 10,000,000 条
TwoBufQueueWriteSession · 固定长度写2,383.591,961.22 – 2,772.1019.0690.3752.0424.3256.84×11
ReaderWriterQueue成员初始化复制817.50783.84 – 858.576.5401.3002.1923.7333.28×11
rigtorp/SPSCQueue成员复制+目标写预取301.97286.81 – 325.822.4163.0755.91710.9671.00×11
atomic_queue成员初始化复制189.63178.89 – 196.801.5175.10020.21733.2251.20×11
16 B回调循环 1 次 · 每次 1 轮 · 10,000,000 条
TwoBufQueueWriteSession · 固定长度写1,089.93941.58 – 1,321.9917.4390.6422.7007.2583.91×11
ReaderWriterQueue先清零,再 memcpy572.91392.34 – 771.099.1671.89210.908136.1422.58×11
rigtorp/SPSCQueue成员复制+目标写预取293.66274.34 – 310.424.6993.1585.9509.3251.00×11
atomic_queue成员初始化复制121.32103.68 – 128.551.9416.09216.66729.0671.00×11
32 B回调循环 2 次 · 每次 2 轮 · 10,000,000 条
TwoBufQueueWriteSession · 固定长度写456.44166.47 – 658.4914.6061.6336.40015.8422.46×22
ReaderWriterQueue先清零,再 memcpy397.57330.33 – 508.4612.7222.5089.30839.6922.17×22
rigtorp/SPSCQueue成员复制+目标写预取182.68150.68 – 210.645.8464.57514.19279.4081.00×22
atomic_queue成员初始化复制80.0374.14 – 85.242.5619.50828.14246.5921.00×22
64 B回调循环 4 次 · 每次 3 轮 · 10,000,000 条
TwoBufQueueWriteSession · 固定长度写299.51261.11 – 360.6119.1682.99214.825154.8752.58×43
ReaderWriterQueue成员初始化复制104.8669.74 – 148.566.7115.73344.217271.5171.19×43
rigtorp/SPSCQueue成员复制+目标写预取122.45120.66 – 125.467.8377.93313.05824.3751.00×43
atomic_queue成员初始化复制73.8070.04 – 80.204.72312.08337.467207.9421.00×43

p50 / p99 / p999 是“每组 1000 次成功写入的平均耗时”的分位数,不是单条消息端到端延时,也不是单次 write 的分位数。吞吐使用独立的未逐组计时运行。GB/s 按业务净负载计算。时间比 = 各轮首条回调开始至末条回调结束的耗时之和 ÷ 各轮写线程发送耗时之和,再对运行取平均;它包含分发、等待数据和调度,不是每次回调函数 CPU 耗时之和。

回调时间与背压

与吞吐表使用同一批正式运行。时间、次数按运行取平均;峰值 RSS 为这组运行的最大值。

实现写线程
ms
回调区间
ms
受压消息
条 / 次运行
失败尝试
次 / 运行
重试时间
ms
Writer 压力
内部事件
复制层拒绝
内部事件
峰值 RSS
MiB
8 B正式吞吐运行的逐次平均;RSS 为本组最大值
TwoBufQueue4.2628.770.00.00.00000395.6
ReaderWriterQueue12.2540.110.00.00.000——367.2
rigtorp/SPSCQueue33.1933.190.00.00.000——333.9
atomic_queue52.8063.400.00.00.000——365.9
16 B正式吞吐运行的逐次平均;RSS 为本组最大值
TwoBufQueue9.3136.050.00.00.00000544.8
ReaderWriterQueue18.8945.270.00.00.000——427.7
rigtorp/SPSCQueue34.1534.150.00.00.000——410.3
atomic_queue82.9583.150.00.00.000——426.3
32 B正式吞吐运行的逐次平均;RSS 为本组最大值
TwoBufQueue28.3659.110.00.00.00000583.4
ReaderWriterQueue25.8955.020.00.00.000——471.9
rigtorp/SPSCQueue55.7355.730.00.00.000——462.5
atomic_queue125.32125.360.00.00.000——470.5
64 B正式吞吐运行的逐次平均;RSS 为本组最大值
TwoBufQueue33.8686.350.00.00.00000591.5
ReaderWriterQueue101.30118.190.00.00.000——590.7
rigtorp/SPSCQueue81.6881.680.00.00.000——462.5
atomic_queue135.86136.070.00.00.000——466.6

受压消息至少经历一次 try 写入失败;失败尝试含重复重试,最终仍全部写入。Writer 与复制层内部事件仅 TwoBufQueue 提供,其他实现显示“—”,不能把“—”解释为 0。回调区间含分发、轮内等待及调度,时间比大于 1 本身不等于写端背压。RSS 包含进程开销,不等于缓存容量。

逐次测量值

展开查看全部 5 次吞吐及分位数。没有剔除异常值,也没有将多个运行的样本合并计算分位数。

8 B5 次原始值 · 回调循环 1 次
实现 / 指标第 1 次第 2 次第 3 次第 4 次第 5 次平均
TwoBufQueue吞吐 M条/s2,647.8381,961.2172,772.0992,157.9822,378.8052,383.588
TwoBufQueuep50 ns0.5830.3750.3330.2920.2920.375
TwoBufQueuep99 ns3.6672.0831.7081.4171.3332.042
TwoBufQueuep999 ns11.0003.7502.8332.2501.7924.325
ReaderWriterQueue吞吐 M条/s783.845840.142858.566797.955806.978817.497
ReaderWriterQueuep50 ns1.3331.2921.2921.2921.2921.300
ReaderWriterQueuep99 ns3.0831.8751.9171.8332.2502.192
ReaderWriterQueuep999 ns7.3752.2082.3332.2504.5003.733
rigtorp/SPSCQueue吞吐 M条/s325.818294.533290.055312.630286.807301.969
rigtorp/SPSCQueuep50 ns3.2503.0833.0422.9583.0423.075
rigtorp/SPSCQueuep99 ns7.5004.8334.6675.9586.6255.917
rigtorp/SPSCQueuep999 ns12.2088.6259.12511.25013.62510.967
atomic_queue吞吐 M条/s196.798190.486186.917178.889195.059189.630
atomic_queuep50 ns5.4585.2085.0424.8754.9175.100
atomic_queuep99 ns10.3757.37536.79236.25010.29220.217
atomic_queuep999 ns33.91718.12539.33338.20836.54233.225
16 B5 次原始值 · 回调循环 1 次
实现 / 指标第 1 次第 2 次第 3 次第 4 次第 5 次平均
TwoBufQueue吞吐 M条/s998.6771,041.237941.5751,146.1541,321.9861,089.926
TwoBufQueuep50 ns0.5420.7500.7080.5830.6250.642
TwoBufQueuep99 ns1.2083.3752.7923.9172.2082.700
TwoBufQueuep999 ns1.5428.3759.5428.1678.6677.258
ReaderWriterQueue吞吐 M条/s393.225660.139392.340647.766771.092572.912
ReaderWriterQueuep50 ns2.4581.2921.2501.3753.0831.892
ReaderWriterQueuep99 ns27.3752.5422.2922.75019.58310.908
ReaderWriterQueuep999 ns354.9585.8333.0838.708308.125136.142
rigtorp/SPSCQueue吞吐 M条/s306.434274.880302.219274.338310.421293.658
rigtorp/SPSCQueuep50 ns3.1253.1673.1253.1673.2083.158
rigtorp/SPSCQueuep99 ns4.9178.4175.0425.5005.8755.950
rigtorp/SPSCQueuep999 ns8.16711.2929.2088.3759.5839.325
atomic_queue吞吐 M条/s125.365121.402103.676128.547127.603121.319
atomic_queuep50 ns5.8756.0836.0006.1256.3756.092
atomic_queuep99 ns16.04215.00014.29215.54222.45816.667
atomic_queuep999 ns21.95821.70816.50034.66750.50029.067
32 B5 次原始值 · 回调循环 2 次
实现 / 指标第 1 次第 2 次第 3 次第 4 次第 5 次平均
TwoBufQueue吞吐 M条/s327.027636.895166.473658.487493.308456.438
TwoBufQueuep50 ns1.8331.7081.6251.5421.4581.633
TwoBufQueuep99 ns6.5835.50010.3755.2924.2506.400
TwoBufQueuep999 ns17.29219.29217.95813.91710.75015.842
ReaderWriterQueue吞吐 M条/s508.457349.990330.329346.929452.140397.569
ReaderWriterQueuep50 ns1.9173.1671.9582.1253.3752.508
ReaderWriterQueuep99 ns4.29212.0006.6677.54216.0429.308
ReaderWriterQueuep999 ns7.37518.45811.83322.333138.45839.692
rigtorp/SPSCQueue吞吐 M条/s210.642160.458150.679207.355184.267182.680
rigtorp/SPSCQueuep50 ns4.1254.1254.4585.9174.2504.575
rigtorp/SPSCQueuep99 ns6.1676.29213.20832.91712.37514.192
rigtorp/SPSCQueuep999 ns8.08311.37518.542341.62517.41779.408
atomic_queue吞吐 M条/s84.32985.24180.07274.14276.37580.032
atomic_queuep50 ns8.7089.7509.08310.9179.0839.508
atomic_queuep99 ns26.58327.79228.66730.70826.95828.142
atomic_queuep999 ns33.87558.95854.33348.91736.87546.592
64 B5 次原始值 · 回调循环 4 次
实现 / 指标第 1 次第 2 次第 3 次第 4 次第 5 次平均
TwoBufQueue吞吐 M条/s264.775299.385261.113360.615311.638299.505
TwoBufQueuep50 ns2.9582.5833.3753.3332.7082.992
TwoBufQueuep99 ns12.8758.75023.87515.87512.75014.825
TwoBufQueuep999 ns25.20817.958683.70827.12520.375154.875
ReaderWriterQueue吞吐 M条/s95.81069.739113.291148.56296.918104.864
ReaderWriterQueuep50 ns4.4176.6675.2084.9177.4585.733
ReaderWriterQueuep99 ns9.625115.25021.04214.70860.45844.217
ReaderWriterQueuep999 ns14.500772.33338.20837.417495.125271.517
rigtorp/SPSCQueue吞吐 M条/s120.663121.452121.275125.464123.387122.449
rigtorp/SPSCQueuep50 ns7.8758.0008.0007.9587.8337.933
rigtorp/SPSCQueuep99 ns11.33313.50012.70815.83311.91713.058
rigtorp/SPSCQueuep999 ns17.12521.37531.08334.66717.62524.375
atomic_queue吞吐 M条/s71.00276.26071.50680.20170.03673.801
atomic_queuep50 ns13.04211.95811.20811.75012.45812.083
atomic_queuep99 ns29.08332.83326.12527.41771.87537.467
atomic_queuep999 ns58.58373.25056.20862.125789.542207.942

波动较大的吞吐组:8 B · TwoBufQueue:1,961.22–2,772.10 M条/s;16 B · TwoBufQueue:941.58–1,321.99 M条/s;16 B · ReaderWriterQueue:392.34–771.09 M条/s;32 B · TwoBufQueue:166.47–658.49 M条/s;32 B · ReaderWriterQueue:330.33–508.46 M条/s;32 B · rigtorp/SPSCQueue:150.68–210.64 M条/s;64 B · TwoBufQueue:261.11–360.61 M条/s;64 B · ReaderWriterQueue:69.74–148.56 M条/s。所有测量均保留,未删除低值。

测试口径与复现信息

固定本次参数进行对比;本报告没有执行全参数寻优,也不声称全局最优。

发送、复制与排空

TwoBufQueue:Writer → 复制线程 → 第二层缓存 → 独立回调线程,逐消息调用回调。

按长度使用冻结的发布测试参数;同缓存普通 write 与 Session 使用完全相同的块大小、池容量和读端参数。完整参数如下。四种实现正式写入次数与净负载长度相同。

每轮上限按缓存的 80% / 消息字节数计算。TwoBufQueue 不扫描当前块,publish_count 为 UINT32_MAX;停止发送计时后调用 finish_block 交接当前块,再等待本轮全部回调完成。预热也在计时外交接,最终尾部统一 finish。没有增加额外消息,原生 SPSC 每条已发布,轮末无需额外交接。

两份报告同时改变缓存大小与回调工作量,不能将两组差异全部归因于缓存;比较容量影响需另做相同回调负载的对照。

不逐条 flush · 轮末计时外交接;publish_count 固定为 4294967295。仅预触碰写端数据页,第二层数据页没有额外预触碰。

吞吐和分组延时均在计时前准备整轮输入;每条消息的全部字都随序号变化;四种实现使用同一完整负载;队列内仍复制一次完整负载;各行标明成员复制、目标写预取或先清零再 memcpy,完整参数记录实际选择;先清零的额外存储也包含在计时中。输入缓冲单独计算,不算队列容量,也不保证常驻 L1。

时钟、调度与限制

本机为 macOS-14.4.1-arm64-arm-64bit / arm64,Release 优化构建。

计时器:mach_absolute_time;每组 1000 次写入。组均值刻度约 0.0417 ns / 次。

写线程调度:高 QoS · 未硬绑核。调度打断和其他系统活动仍可能影响结果;复制与回调线程保留自身调度策略。

吞吐只累计写线程发送时间;排空在计时之外。并发复制 / 回调仍可能争用缓存和带宽,因此不是持续端到端吞吐。

p999 仅供观察:每次延时测量约有 9,999–10,000 个组均值样本,少于框架建议的 100,000 个。p999 的尾部覆盖有限,不能据此做稳定的尾延时承诺。p999 表示 99.9% 分位数;平均值不代表置信区间。
完整构造参数 · 每种长度 / 实现 / 优化指标
{
  "8 B / two_buf_queue": {
    "transport": "two_buf_queue",
    "mode": "throughput",
    "payload_bytes": 8,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 1,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 1048576,
    "source_pool_min": 256,
    "source_pool_max": 256,
    "source_queue_capacity": 1024,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 1048576,
    "output_frame_capacity": 1,
    "output_pool_min": 256,
    "output_pool_max": 256,
    "output_queue_capacity": 1024,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 10000,
    "rescan_interval_ns": 1000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 0,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 1000,
    "spsc_idle_sleep_ns": 0,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": true,
    "rigtorp_write_prefetch": false,
    "readerwriterqueue_copy_after_zero": false
  },
  "8 B / readerwriterqueue": {
    "transport": "readerwriterqueue",
    "mode": "throughput",
    "payload_bytes": 8,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 1,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 1048576,
    "source_pool_min": 256,
    "source_pool_max": 256,
    "source_queue_capacity": 1024,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 1048576,
    "output_frame_capacity": 1024,
    "output_pool_min": 256,
    "output_pool_max": 256,
    "output_queue_capacity": 1024,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 1000,
    "rescan_interval_ns": 1000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 33488385,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 0,
    "spsc_idle_sleep_ns": 10000,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": false,
    "rigtorp_write_prefetch": false,
    "readerwriterqueue_copy_after_zero": false
  },
  "8 B / rigtorp": {
    "transport": "rigtorp",
    "mode": "throughput",
    "payload_bytes": 8,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 1,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 1048576,
    "source_pool_min": 256,
    "source_pool_max": 256,
    "source_queue_capacity": 1024,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 1048576,
    "output_frame_capacity": 1024,
    "output_pool_min": 256,
    "output_pool_max": 256,
    "output_queue_capacity": 1024,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 1000,
    "rescan_interval_ns": 1000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 33554415,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 0,
    "spsc_idle_sleep_ns": 1000,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": false,
    "rigtorp_write_prefetch": true,
    "readerwriterqueue_copy_after_zero": false
  },
  "8 B / atomic_queue": {
    "transport": "atomic_queue",
    "mode": "throughput",
    "payload_bytes": 8,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 1,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 1048576,
    "source_pool_min": 256,
    "source_pool_max": 256,
    "source_queue_capacity": 1024,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 1048576,
    "output_frame_capacity": 1024,
    "output_pool_min": 256,
    "output_pool_max": 256,
    "output_queue_capacity": 1024,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 1000,
    "rescan_interval_ns": 1000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 33554432,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 1000,
    "spsc_idle_sleep_ns": 10000,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": false,
    "rigtorp_write_prefetch": false,
    "readerwriterqueue_copy_after_zero": false
  },
  "16 B / two_buf_queue": {
    "transport": "two_buf_queue",
    "mode": "throughput",
    "payload_bytes": 16,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 1,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 262144,
    "source_pool_min": 1024,
    "source_pool_max": 1024,
    "source_queue_capacity": 4096,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 262144,
    "output_frame_capacity": 1024,
    "output_pool_min": 1024,
    "output_pool_max": 1024,
    "output_queue_capacity": 4096,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 1000,
    "rescan_interval_ns": 5000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 0,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 1000,
    "spsc_idle_sleep_ns": 0,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": true,
    "rigtorp_write_prefetch": false,
    "readerwriterqueue_copy_after_zero": false
  },
  "16 B / readerwriterqueue": {
    "transport": "readerwriterqueue",
    "mode": "throughput",
    "payload_bytes": 16,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 1,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 1048576,
    "source_pool_min": 256,
    "source_pool_max": 256,
    "source_queue_capacity": 1024,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 1048576,
    "output_frame_capacity": 1024,
    "output_pool_min": 256,
    "output_pool_max": 256,
    "output_queue_capacity": 1024,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 1000,
    "rescan_interval_ns": 5000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 16743937,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 0,
    "spsc_idle_sleep_ns": 10000,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": false,
    "rigtorp_write_prefetch": false,
    "readerwriterqueue_copy_after_zero": true
  },
  "16 B / rigtorp": {
    "transport": "rigtorp",
    "mode": "throughput",
    "payload_bytes": 16,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 1,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 1048576,
    "source_pool_min": 256,
    "source_pool_max": 256,
    "source_queue_capacity": 1024,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 1048576,
    "output_frame_capacity": 1024,
    "output_pool_min": 256,
    "output_pool_max": 256,
    "output_queue_capacity": 1024,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 1000,
    "rescan_interval_ns": 5000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 16777207,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 0,
    "spsc_idle_sleep_ns": 1000,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": false,
    "rigtorp_write_prefetch": true,
    "readerwriterqueue_copy_after_zero": false
  },
  "16 B / atomic_queue": {
    "transport": "atomic_queue",
    "mode": "throughput",
    "payload_bytes": 16,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 1,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 1048576,
    "source_pool_min": 256,
    "source_pool_max": 256,
    "source_queue_capacity": 1024,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 1048576,
    "output_frame_capacity": 1024,
    "output_pool_min": 256,
    "output_pool_max": 256,
    "output_queue_capacity": 1024,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 1000,
    "rescan_interval_ns": 5000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 16777216,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 0,
    "spsc_idle_sleep_ns": 10000,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": false,
    "rigtorp_write_prefetch": false,
    "readerwriterqueue_copy_after_zero": false
  },
  "32 B / two_buf_queue": {
    "transport": "two_buf_queue",
    "mode": "throughput",
    "payload_bytes": 32,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 2,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 65536,
    "source_pool_min": 4096,
    "source_pool_max": 4096,
    "source_queue_capacity": 16384,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 65536,
    "output_frame_capacity": 1,
    "output_pool_min": 4096,
    "output_pool_max": 4096,
    "output_queue_capacity": 16384,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 10000,
    "rescan_interval_ns": 5000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 0,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 1000,
    "spsc_idle_sleep_ns": 0,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": true,
    "rigtorp_write_prefetch": false,
    "readerwriterqueue_copy_after_zero": false
  },
  "32 B / readerwriterqueue": {
    "transport": "readerwriterqueue",
    "mode": "throughput",
    "payload_bytes": 32,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 2,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 65536,
    "source_pool_min": 4096,
    "source_pool_max": 4096,
    "source_queue_capacity": 16384,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 65536,
    "output_frame_capacity": 64,
    "output_pool_min": 4096,
    "output_pool_max": 4096,
    "output_queue_capacity": 16384,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 10000,
    "rescan_interval_ns": 5000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 8371713,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 0,
    "spsc_idle_sleep_ns": 1000,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": false,
    "rigtorp_write_prefetch": false,
    "readerwriterqueue_copy_after_zero": true
  },
  "32 B / rigtorp": {
    "transport": "rigtorp",
    "mode": "throughput",
    "payload_bytes": 32,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 2,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 65536,
    "source_pool_min": 4096,
    "source_pool_max": 4096,
    "source_queue_capacity": 16384,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 65536,
    "output_frame_capacity": 64,
    "output_pool_min": 4096,
    "output_pool_max": 4096,
    "output_queue_capacity": 16384,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 10000,
    "rescan_interval_ns": 5000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 8388603,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 0,
    "spsc_idle_sleep_ns": 1000,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": false,
    "rigtorp_write_prefetch": true,
    "readerwriterqueue_copy_after_zero": false
  },
  "32 B / atomic_queue": {
    "transport": "atomic_queue",
    "mode": "throughput",
    "payload_bytes": 32,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 2,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 65536,
    "source_pool_min": 4096,
    "source_pool_max": 4096,
    "source_queue_capacity": 16384,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 65536,
    "output_frame_capacity": 64,
    "output_pool_min": 4096,
    "output_pool_max": 4096,
    "output_queue_capacity": 16384,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 10000,
    "rescan_interval_ns": 5000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 8388608,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 0,
    "spsc_idle_sleep_ns": 10000,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": false,
    "rigtorp_write_prefetch": false,
    "readerwriterqueue_copy_after_zero": false
  },
  "64 B / two_buf_queue": {
    "transport": "two_buf_queue",
    "mode": "throughput",
    "payload_bytes": 64,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 4,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 1048576,
    "source_pool_min": 256,
    "source_pool_max": 256,
    "source_queue_capacity": 1024,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 1048576,
    "output_frame_capacity": 1,
    "output_pool_min": 256,
    "output_pool_max": 256,
    "output_queue_capacity": 1024,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 10000,
    "rescan_interval_ns": 30000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 0,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 1000,
    "spsc_idle_sleep_ns": 0,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": true,
    "rigtorp_write_prefetch": false,
    "readerwriterqueue_copy_after_zero": false
  },
  "64 B / readerwriterqueue": {
    "transport": "readerwriterqueue",
    "mode": "throughput",
    "payload_bytes": 64,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 4,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 262144,
    "source_pool_min": 1024,
    "source_pool_max": 1024,
    "source_queue_capacity": 4096,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 262144,
    "output_frame_capacity": 64,
    "output_pool_min": 1024,
    "output_pool_max": 1024,
    "output_queue_capacity": 4096,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 10000,
    "rescan_interval_ns": 5000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 4185601,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 0,
    "spsc_idle_sleep_ns": 1000,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": false,
    "rigtorp_write_prefetch": false,
    "readerwriterqueue_copy_after_zero": false
  },
  "64 B / rigtorp": {
    "transport": "rigtorp",
    "mode": "throughput",
    "payload_bytes": 64,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 4,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 262144,
    "source_pool_min": 1024,
    "source_pool_max": 1024,
    "source_queue_capacity": 4096,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 262144,
    "output_frame_capacity": 64,
    "output_pool_min": 1024,
    "output_pool_max": 1024,
    "output_queue_capacity": 4096,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 10000,
    "rescan_interval_ns": 5000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 4194301,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 0,
    "spsc_idle_sleep_ns": 0,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": false,
    "rigtorp_write_prefetch": true,
    "readerwriterqueue_copy_after_zero": false
  },
  "64 B / atomic_queue": {
    "transport": "atomic_queue",
    "mode": "throughput",
    "payload_bytes": 64,
    "messages": 10000000,
    "warmup_messages": 50000,
    "callback_iterations": 4,
    "verify_payload": false,
    "prepared_input": true,
    "variable_payload": true,
    "prepared_input_limit_bytes": 268435456,
    "measure_callback_time": true,
    "producer_interval_ns": 0,
    "source_block_size": 262144,
    "source_pool_min": 1024,
    "source_pool_max": 1024,
    "source_queue_capacity": 4096,
    "writer_backpressure": "drop",
    "writer_spin_count": 1000,
    "writer_wait_timeout_ms": 5000,
    "output_block_size": 262144,
    "output_frame_capacity": 64,
    "output_pool_min": 1024,
    "output_pool_max": 1024,
    "output_queue_capacity": 4096,
    "cancel_claim_mode": "tail",
    "output_mode": "spsc",
    "output_reader_mode": "wait_signal",
    "output_reader_count": 1,
    "output_retry_wait_us": 1000,
    "output_enable_stats": false,
    "is_scan_current": false,
    "reader_spin_count": 10000,
    "rescan_interval_ns": 5000000,
    "rescan_max_interval_ns": 30000000,
    "consumer_cpu": -1,
    "producer_cpu": -1,
    "producer_qos": "user_interactive",
    "round_storage_bytes": 214748364,
    "spsc_buffer_bytes": 268435456,
    "prefault_producer_buffers": true,
    "finish_timeout_ms": 5000,
    "work_wait_min_ms": 1,
    "finish_retry_ms": 1,
    "publish_count": 4294967295,
    "spsc_capacity": 4194304,
    "retry_yield_every": 1024,
    "spsc_idle_spins": 0,
    "spsc_idle_sleep_ns": 10000,
    "timer": "auto",
    "sample_every": 32,
    "max_samples": 1000000,
    "latency_batch_size": 1000,
    "timer_calibration_samples": 16384,
    "call_batch_size": 256,
    "random_seed": 42,
    "timeout_seconds": 180,
    "buffer_budget_bytes": 536870912,
    "use_write_session": false,
    "rigtorp_write_prefetch": false,
    "readerwriterqueue_copy_after_zero": false
  }
}
生成于 2026-10-11T11:00:47.224397+08:00 · 共 160 次正式运行,16 次负载校验,45 次回调校准。
编译器:Clang 18.1.8
被测程序 SHA-256:a229326cc6898487c8603758696f23484e0a611e6a2f51e4b580528a0a3909c7

第三方原文件按 benchmarks/spsc/spsc_dependencies.json 校验,未修改队列实现;外部 Payload 的复制策略为 完整负载复制;rigtorp 可选目标写预取,ReaderWriterQueue 可选先清零再 memcpy,复制完整负载。逐次命令、配置、校验结果与内部计数保存在 raw.jsonl。