发送1 MiB,业务尾部耗时能否降低?

本次未验证到三轮p99、p999均稳定改善的策略。保留全部结果,继续使用原参数。

固定48 KiB业务工作集、32 B消息、每条回调64次循环。TwoBufQueue第一层16 KiB(4×4 KiB),第二层及开源槽位存储256 MiB。扫描关闭、publish为最大值,回调持续运行,目标积压80%。写线程高QoS,后台维持原调度,未硬绑核。

性能结果

每轮发送2,500批,每批1 MiB(32,768条)。发送后立即执行64次业务,每16次计时一组,共10,000组/轮。每轮独立统计分位数,再对三轮取平均;所有数值越小越好。

queue / 重试策略p50p99p999前耗时
TwoBufQueue · 每1,024次重试yield15.6116.3513.914.7
TwoBufQueue · 重试不yield17.4104.2348.114.9
TwoBufQueue · 每65,536次重试yield15.6108.5478.314.7
ReaderWriterQueue23.488.5422.714.3
rigtorp::SPSCQueue13.076.4248.313.9
atomic_queue38.276.4268.214.1

单位:ns/次。后耗时为每16次业务的组均值分位数。重试策略只在写入暂时失败时生效;等待发生在发送阶段,未直接计入后业务时间。

三轮原值、写入时间与验证

改动仅使retry_yield_every参数在突发测试中实际生效:0关闭主动yield;成功写入、消息内容、回调及计时窗口均保持一致。没有过滤慢样本。

[
  {
    "queue": "TwoBufQueue_yield1024",
    "per_run": [
      {
        "queue": "TwoBufQueue_yield1024",
        "run": 1,
        "samples": 10000,
        "before_ns": 14.46458333332224,
        "p50": 15.625,
        "p99": 109.375,
        "p999": 377.604166667,
        "write_ms": 345.86933333334053,
        "bp_percent": 0.017545166015625
      },
      {
        "queue": "TwoBufQueue_yield1024",
        "run": 2,
        "samples": 10000,
        "before_ns": 14.84999999998928,
        "p50": 15.625,
        "p99": 98.9583333333,
        "p999": 291.666666667,
        "write_ms": 332.48412499999307,
        "bp_percent": 0.013189697265625
      },
      {
        "queue": "TwoBufQueue_yield1024",
        "run": 3,
        "samples": 10000,
        "before_ns": 14.679166666655961,
        "p50": 15.625,
        "p99": 140.625,
        "p999": 872.395833333,
        "write_ms": 416.6512916667625,
        "bp_percent": 0.031781005859374996
      }
    ],
    "before_ns": 14.664583333322494,
    "p50": 15.625,
    "p99": 116.31944444443333,
    "p999": 513.888888889,
    "write_ms": 365.0015833333654,
    "bp_percent": 0.020838623046874998
  },
  {
    "queue": "TwoBufQueue_yield0",
    "per_run": [
      {
        "queue": "TwoBufQueue_yield0",
        "run": 1,
        "samples": 10000,
        "before_ns": 14.613541666656241,
        "p50": 15.625,
        "p99": 96.3541666667,
        "p999": 174.479166667,
        "write_ms": 341.6935416666763,
        "bp_percent": 0.025716552734375002
      },
      {
        "queue": "TwoBufQueue_yield0",
        "run": 2,
        "samples": 10000,
        "before_ns": 15.2927083333238,
        "p50": 20.8333333333,
        "p99": 117.1875,
        "p999": 718.75,
        "write_ms": 383.39629166669,
        "bp_percent": 0.043779296875
      },
      {
        "queue": "TwoBufQueue_yield0",
        "run": 3,
        "samples": 10000,
        "before_ns": 14.7249999999884,
        "p50": 15.625,
        "p99": 98.9583333333,
        "p999": 151.041666667,
        "write_ms": 327.575999999977,
        "bp_percent": 0.013990478515624998
      }
    ],
    "before_ns": 14.877083333322814,
    "p50": 17.3611111111,
    "p99": 104.16666666666667,
    "p999": 348.090277778,
    "write_ms": 350.8886111111144,
    "bp_percent": 0.027828776041666666
  },
  {
    "queue": "TwoBufQueue_yield65536",
    "per_run": [
      {
        "queue": "TwoBufQueue_yield65536",
        "run": 1,
        "samples": 10000,
        "before_ns": 14.52812499998928,
        "p50": 15.625,
        "p99": 106.770833333,
        "p999": 481.770833333,
        "write_ms": 344.4458333333438,
        "bp_percent": 0.015026855468750001
      },
      {
        "queue": "TwoBufQueue_yield65536",
        "run": 2,
        "samples": 10000,
        "before_ns": 15.01354166665644,
        "p50": 15.625,
        "p99": 114.583333333,
        "p999": 664.0625,
        "write_ms": 392.0012916666472,
        "bp_percent": 0.028759765625
      },
      {
        "queue": "TwoBufQueue_yield65536",
        "run": 3,
        "samples": 10000,
        "before_ns": 14.423958333322,
        "p50": 15.625,
        "p99": 104.166666667,
        "p999": 289.0625,
        "write_ms": 334.71512499999295,
        "bp_percent": 0.012691650390625002
      }
    ],
    "before_ns": 14.655208333322573,
    "p50": 15.625,
    "p99": 108.50694444433333,
    "p999": 478.298611111,
    "write_ms": 357.054083333328,
    "bp_percent": 0.018826090494791666
  },
  {
    "queue": "ReaderWriterQueue",
    "per_run": [
      {
        "queue": "ReaderWriterQueue",
        "run": 1,
        "samples": 10000,
        "before_ns": 15.1593749999886,
        "p50": 23.4375,
        "p99": 130.208333333,
        "p999": 718.75,
        "write_ms": 2658.5720833333503,
        "bp_percent": 0.0
      },
      {
        "queue": "ReaderWriterQueue",
        "run": 2,
        "samples": 10000,
        "before_ns": 13.87812499998668,
        "p50": 23.4375,
        "p99": 67.7083333333,
        "p999": 382.8125,
        "write_ms": 2928.9801666667295,
        "bp_percent": 0.0
      },
      {
        "queue": "ReaderWriterQueue",
        "run": 3,
        "samples": 10000,
        "before_ns": 13.7281249999856,
        "p50": 23.4375,
        "p99": 67.7083333333,
        "p999": 166.666666667,
        "write_ms": 2963.7682499998714,
        "bp_percent": 0.0
      }
    ],
    "before_ns": 14.255208333320294,
    "p50": 23.4375,
    "p99": 88.54166666653335,
    "p999": 422.7430555556667,
    "write_ms": 2850.4401666666504,
    "bp_percent": 0.0
  },
  {
    "queue": "rigtorp",
    "per_run": [
      {
        "queue": "rigtorp",
        "run": 1,
        "samples": 10000,
        "before_ns": 13.84999999998544,
        "p50": 13.0208333333,
        "p99": 65.1041666667,
        "p999": 119.791666667,
        "write_ms": 4340.529125000086,
        "bp_percent": 0.0
      },
      {
        "queue": "rigtorp",
        "run": 2,
        "samples": 10000,
        "before_ns": 13.9385416666524,
        "p50": 13.0208333333,
        "p99": 75.5208333333,
        "p999": 289.0625,
        "write_ms": 4308.182208333193,
        "bp_percent": 0.0
      },
      {
        "queue": "rigtorp",
        "run": 3,
        "samples": 10000,
        "before_ns": 13.983333333318841,
        "p50": 13.0208333333,
        "p99": 88.5416666667,
        "p999": 335.9375,
        "write_ms": 4276.465541666649,
        "bp_percent": 0.0
      }
    ],
    "before_ns": 13.923958333318893,
    "p50": 13.0208333333,
    "p99": 76.3888888889,
    "p999": 248.263888889,
    "write_ms": 4308.392291666642,
    "bp_percent": 0.0
  },
  {
    "queue": "atomic_queue",
    "per_run": [
      {
        "queue": "atomic_queue",
        "run": 1,
        "samples": 10000,
        "before_ns": 14.18020833332044,
        "p50": 36.4583333333,
        "p99": 67.7083333333,
        "p999": 161.458333333,
        "write_ms": 534.80295833333,
        "bp_percent": 0.0
      },
      {
        "queue": "atomic_queue",
        "run": 2,
        "samples": 10000,
        "before_ns": 14.34999999998736,
        "p50": 39.0625,
        "p99": 96.3541666667,
        "p999": 531.25,
        "write_ms": 574.6475000000029,
        "bp_percent": 0.0
      },
      {
        "queue": "atomic_queue",
        "run": 3,
        "samples": 10000,
        "before_ns": 13.80104166665208,
        "p50": 39.0625,
        "p99": 65.1041666667,
        "p999": 111.979166667,
        "write_ms": 525.8597083333368,
        "bp_percent": 0.0
      }
    ],
    "before_ns": 14.110416666653293,
    "p50": 38.19444444443333,
    "p99": 76.3888888889,
    "p999": 268.2291666666667,
    "write_ms": 545.1033888888899,
    "bp_percent": 0.0
  }
]
复现与参数明细
python3 benchmarks/burst/run_burst_tail_1m.py --profile docs/performance_data/burst_tail_1m_20261012/selected_config.json

一个命令完成构建、六个条件、三轮完整采样及报告;不需要额外采样。

全部统计 · 运行清单 · 初始化参数

{
  "business_kib": [
    24,
    48,
    96
  ],
  "bursts_mib": [
    1
  ],
  "runs": 3,
  "selection_repeats": 8,
  "samples_per_run": 10000,
  "callback_candidates": [
    16,
    32,
    64,
    128,
    256
  ],
  "process_timeout": 900,
  "fixed_callback_iterations": 0,
  "selected_business_kib": 48,
  "callback_iterations": 64,
  "final_window_repeats": 2500,
  "writer_pool_total_bytes": 16384,
  "reader_pool_total_bytes": 268435456,
  "native_slot_storage_bytes": 268435456,
  "payload_bytes": 32,
  "business_accesses": 8,
  "business_warm_queries": 512,
  "pre_queries": 16,
  "post_queries": 64,
  "group_queries": 16,
  "quantiles": "perrunnearest-rank,then3runarithmeticmean",
  "selection_rule": "use median-window relative advantages over all burst sizes and runs; among candidates within2%of best score choose most wins, lower run variability, then smaller working set",
  "machine": {
    "cpu": "Apple Silicon (arm64)",
    "os": "macOS-14.4.1-arm64-arm-64bit",
    "producer_qos": "user_interactive",
    "hard_affinity": false
  },
  "regular_apis": {
    "ReaderWriterQueue": "try_enqueue+membercopy",
    "rigtorp": "try_push;noaddedprefetch",
    "atomic_queue": "SPSCtry_push"
  },
  "producer_qos": "user_interactive on macOS",
  "producer_cpu": -1,
  "publish_count": 4294967295,
  "scan_current": false,
  "queue_parameters": {
    "baseline": {
      "transport": "two_buf_queue",
      "mode": "throughput",
      "payload_bytes": 32,
      "messages": 10000000,
      "warmup_messages": 0,
      "callback_iterations": 64,
      "verify_payload": true,
      "prepared_input": false,
      "variable_payload": true,
      "prepared_input_limit_bytes": 268435456,
      "measure_callback_time": false,
      "producer_interval_ns": 0,
      "source_block_size": 4096,
      "source_pool_min": 4,
      "source_pool_max": 4,
      "source_queue_capacity": 16,
      "writer_backpressure": "drop",
      "writer_spin_count": 1000,
      "writer_wait_timeout_ms": 5000,
      "output_block_size": 4096,
      "output_frame_capacity": 4,
      "output_pool_min": 65536,
      "output_pool_max": 65536,
      "output_queue_capacity": 65538,
      "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": 1000000,
      "consumer_cpu": -1,
      "producer_cpu": -1,
      "producer_qos": "user_interactive",
      "round_storage_bytes": 214748320,
      "fixed_round_boundaries": true,
      "spsc_buffer_bytes": 268435456,
      "prefault_producer_buffers": true,
      "finish_timeout_ms": 120000,
      "work_wait_min_ms": 1,
      "finish_retry_ms": 1,
      "publish_count": 4294967295,
      "use_write_session": false,
      "rigtorp_write_prefetch": true,
      "readerwriterqueue_copy_after_zero": false,
      "spsc_capacity": 0,
      "retry_yield_every": 1024,
      "spsc_idle_spins": 1000,
      "spsc_idle_sleep_ns": 0,
      "timer": "auto",
      "sample_every": 256,
      "max_samples": 100000,
      "latency_batch_size": 1000,
      "timer_calibration_samples": 16384,
      "call_batch_size": 256,
      "random_seed": 42,
      "timeout_seconds": 900,
      "buffer_budget_bytes": 536870912
    },
    "TwoBufQueue": {
      "transport": "two_buf_queue",
      "mode": "throughput",
      "payload_bytes": 32,
      "messages": 10000000,
      "warmup_messages": 0,
      "callback_iterations": 64,
      "verify_payload": true,
      "prepared_input": false,
      "variable_payload": true,
      "prepared_input_limit_bytes": 268435456,
      "measure_callback_time": false,
      "producer_interval_ns": 0,
      "source_block_size": 4096,
      "source_pool_min": 4,
      "source_pool_max": 4,
      "source_queue_capacity": 16,
      "writer_backpressure": "drop",
      "writer_spin_count": 1000,
      "writer_wait_timeout_ms": 5000,
      "output_block_size": 4096,
      "output_frame_capacity": 4,
      "output_pool_min": 65536,
      "output_pool_max": 65536,
      "output_queue_capacity": 65538,
      "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": 1000000,
      "consumer_cpu": -1,
      "producer_cpu": -1,
      "producer_qos": "user_interactive",
      "round_storage_bytes": 214748320,
      "fixed_round_boundaries": true,
      "spsc_buffer_bytes": 268435456,
      "prefault_producer_buffers": true,
      "finish_timeout_ms": 120000,
      "work_wait_min_ms": 1,
      "finish_retry_ms": 1,
      "publish_count": 4294967295,
      "use_write_session": false,
      "rigtorp_write_prefetch": true,
      "readerwriterqueue_copy_after_zero": false,
      "spsc_capacity": 0,
      "retry_yield_every": 1024,
      "spsc_idle_spins": 1000,
      "spsc_idle_sleep_ns": 0,
      "timer": "auto",
      "sample_every": 256,
      "max_samples": 100000,
      "latency_batch_size": 1000,
      "timer_calibration_samples": 16384,
      "call_batch_size": 256,
      "random_seed": 42,
      "timeout_seconds": 900,
      "buffer_budget_bytes": 536870912
    },
    "ReaderWriterQueue": {
      "transport": "readerwriterqueue",
      "mode": "throughput",
      "payload_bytes": 32,
      "messages": 10000000,
      "warmup_messages": 0,
      "callback_iterations": 64,
      "verify_payload": true,
      "prepared_input": false,
      "variable_payload": true,
      "prepared_input_limit_bytes": 268435456,
      "measure_callback_time": false,
      "producer_interval_ns": 0,
      "source_block_size": 4096,
      "source_pool_min": 4,
      "source_pool_max": 4,
      "source_queue_capacity": 16,
      "writer_backpressure": "drop",
      "writer_spin_count": 1000,
      "writer_wait_timeout_ms": 5000,
      "output_block_size": 4096,
      "output_frame_capacity": 4,
      "output_pool_min": 65536,
      "output_pool_max": 65536,
      "output_queue_capacity": 65538,
      "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": 1000000,
      "consumer_cpu": -1,
      "producer_cpu": -1,
      "producer_qos": "user_interactive",
      "round_storage_bytes": 214748320,
      "fixed_round_boundaries": true,
      "spsc_buffer_bytes": 268435456,
      "prefault_producer_buffers": true,
      "finish_timeout_ms": 120000,
      "work_wait_min_ms": 1,
      "finish_retry_ms": 1,
      "publish_count": 4294967295,
      "use_write_session": false,
      "rigtorp_write_prefetch": true,
      "readerwriterqueue_copy_after_zero": false,
      "spsc_capacity": 8371713,
      "retry_yield_every": 1024,
      "spsc_idle_spins": 0,
      "spsc_idle_sleep_ns": 12500,
      "timer": "auto",
      "sample_every": 256,
      "max_samples": 100000,
      "latency_batch_size": 1000,
      "timer_calibration_samples": 16384,
      "call_batch_size": 256,
      "random_seed": 42,
      "timeout_seconds": 900,
      "buffer_budget_bytes": 536870912
    },
    "rigtorp": {
      "transport": "rigtorp",
      "mode": "throughput",
      "payload_bytes": 32,
      "messages": 10000000,
      "warmup_messages": 0,
      "callback_iterations": 64,
      "verify_payload": true,
      "prepared_input": false,
      "variable_payload": true,
      "prepared_input_limit_bytes": 268435456,
      "measure_callback_time": false,
      "producer_interval_ns": 0,
      "source_block_size": 4096,
      "source_pool_min": 4,
      "source_pool_max": 4,
      "source_queue_capacity": 16,
      "writer_backpressure": "drop",
      "writer_spin_count": 1000,
      "writer_wait_timeout_ms": 5000,
      "output_block_size": 4096,
      "output_frame_capacity": 4,
      "output_pool_min": 65536,
      "output_pool_max": 65536,
      "output_queue_capacity": 65538,
      "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": 1000000,
      "consumer_cpu": -1,
      "producer_cpu": -1,
      "producer_qos": "user_interactive",
      "round_storage_bytes": 214748320,
      "fixed_round_boundaries": true,
      "spsc_buffer_bytes": 268435456,
      "prefault_producer_buffers": true,
      "finish_timeout_ms": 120000,
      "work_wait_min_ms": 1,
      "finish_retry_ms": 1,
      "publish_count": 4294967295,
      "use_write_session": false,
      "rigtorp_write_prefetch": false,
      "readerwriterqueue_copy_after_zero": false,
      "spsc_capacity": 8388603,
      "retry_yield_every": 1024,
      "spsc_idle_spins": 4000,
      "spsc_idle_sleep_ns": 1000,
      "timer": "auto",
      "sample_every": 256,
      "max_samples": 100000,
      "latency_batch_size": 1000,
      "timer_calibration_samples": 16384,
      "call_batch_size": 256,
      "random_seed": 42,
      "timeout_seconds": 900,
      "buffer_budget_bytes": 536870912
    },
    "atomic_queue": {
      "transport": "atomic_queue",
      "mode": "throughput",
      "payload_bytes": 32,
      "messages": 10000000,
      "warmup_messages": 0,
      "callback_iterations": 64,
      "verify_payload": true,
      "prepared_input": false,
      "variable_payload": true,
      "prepared_input_limit_bytes": 268435456,
      "measure_callback_time": false,
      "producer_interval_ns": 0,
      "source_block_size": 4096,
      "source_pool_min": 4,
      "source_pool_max": 4,
      "source_queue_capacity": 16,
      "writer_backpressure": "drop",
      "writer_spin_count": 1000,
      "writer_wait_timeout_ms": 5000,
      "output_block_size": 4096,
      "output_frame_capacity": 4,
      "output_pool_min": 65536,
      "output_pool_max": 65536,
      "output_queue_capacity": 65538,
      "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": 1000000,
      "consumer_cpu": -1,
      "producer_cpu": -1,
      "producer_qos": "user_interactive",
      "round_storage_bytes": 214748320,
      "fixed_round_boundaries": true,
      "spsc_buffer_bytes": 268435456,
      "prefault_producer_buffers": true,
      "finish_timeout_ms": 120000,
      "work_wait_min_ms": 1,
      "finish_retry_ms": 1,
      "publish_count": 4294967295,
      "use_write_session": false,
      "rigtorp_write_prefetch": true,
      "readerwriterqueue_copy_after_zero": false,
      "spsc_capacity": 8388608,
      "retry_yield_every": 1024,
      "spsc_idle_spins": 2000,
      "spsc_idle_sleep_ns": 10000,
      "timer": "auto",
      "sample_every": 256,
      "max_samples": 100000,
      "latency_batch_size": 1000,
      "timer_calibration_samples": 16384,
      "call_batch_size": 256,
      "random_seed": 42,
      "timeout_seconds": 900,
      "buffer_budget_bytes": 536870912
    }
  },
  "build": {
    "BRQ_ENABLE_POOL_DEPTH_STATS": "OFF",
    "CMAKE_BUILD_TYPE": "Release",
    "CMAKE_CXX_COMPILER": "/opt/homebrew/opt/llvm@18/bin/clang++",
    "CMAKE_CXX_FLAGS": "",
    "CMAKE_CXX_FLAGS_RELEASE": "-O3 -DNDEBUG",
    "CMAKE_CXX_COMPILER_ID": "Clang",
    "CMAKE_CXX_COMPILER_VERSION": "18.1.8"
  },
  "benchmark_parameters": {
    "source_pool_bytes": 16384,
    "business_accesses": 8,
    "warm_queries": 512,
    "query_group": 16,
    "query_groups": 4,
    "target_percent": 80,
    "setup_timeout_ms": 3000,
    "prefill": true
  },
  "measurement_scope": "1MiB tail; retry strategies compared under the same fixed workload"
}