跳转到内容

生产环境调优

quicz 生产部署的推荐配置。所有参数通过 ConnectionConfigsrc/quic/connection_config.zig)设置。镜像自仓库 production_tuning.md

参数 默认值 生产建议值 说明
pto_jitter_percentage 0 20–30 防止大量并发连接 PTO 超时同步化。范围 0–50;100+ 并发的服务器建议开启。
congestion_algorithm .new_reno .cubic CUBIC (RFC 9438) + HyStart++ 在高带宽-延迟积路径下吞吐更优。
initial_rtt_ns 333 ms 按环境调整 数据中心 1–5 ms;广域网 50–100 ms。较低值加速初始窗口增长。
max_ack_delay_ns 25 ms 25 ms RFC 9000 默认;除非对端协商不同值,否则不改。

PTO jitter 在基础 Probe Timeout 上添加 ±百分比随机抖动(指数退避之前),打散多连接 共享路径时的超时风暴(NAT 或负载均衡器后方)。

  • 0%(默认) —— 确定性 PTO;单连接与测试适用。
  • 20–30%(服务器推荐) —— 足以打破同步化,不明显延迟恢复。
  • 50%(上限) —— 激进;高丢包路径可能延迟恢复。

结果始终钳制到 RFC 9002 kGranularity 下限(1 ms)。

var conn = try Connection.init(allocator, .server, .{
.congestion_algorithm = .cubic,
.pto_jitter_percentage = 25,
.initial_rtt_ns = 5_000_000, // 数据中心 5ms
});

quicz 的 CUBIC (RFC 9438) 包含:

  • HyStart++ 慢启动 —— 监测 RTT 增长提前退出慢启动(保守慢启动 CSS,÷4 增长,≤5 轮)。
  • 快速重传 —— 拥塞事件后立即重传,无需等 PTO。
  • App-limited 检测 (RFC 8312 §5.8) —— 排除应用受限时段;3×MTU 阈值避免 loopback 误判。
  • PTO jitter —— 可选随机化 PTO(见上)。

默认算法。更简单但高带宽-高延迟路径效率较低;适合低吞吐控制通道。

2026-08 已移除,改用 CUBIC(仓库指南早于移除,仍写「可用但未加固」)。生产请用 CUBIC。

环境 推荐 initial_rtt_ns
数据中心(同机架) 100_000–500_000(0.1–0.5 ms)
数据中心(跨机架) 1_000_000–5_000_000(1–5 ms)
城域 / CDN 边缘 10_000_000–30_000_000(10–30 ms)
广域网 / 跨洲 50_000_000–150_000_000(50–150 ms)
未知 / 公网 333_000_000(333 ms,默认)

runtime.Server / runtime.Clientstd.Io.Threaded)自动处理包 I/O、路由与流投递。几点部署说明:

  • Linux 上发送批量自动启用 —— drainOutgoing 把排空的 datagram 收进 OutgoingMessage[] 并调用 socket.sendManysendmmsg);macOS 无 sendmmsg,保持每 datagram 发送。无需配置。
  • 接收缓冲池化 —— recv 任务用 16 项缓冲池而非每 datagram 分配,池耗尽时回退到 allocator。自动。
  • SO_RCVBUF 提升到 4 MB —— server/client socket 都设,避免突发在 drive 任务排空前溢出内核接收缓冲; 残余丢弃由丢包恢复覆盖。
  • Idle timeout —— max_idle_timeout_ms(runtime 默认 30 秒)关闭停止发送的连接;按你的 keep-alive 需求调。
  • 并发模型 —— 每个 Server 一个 drive 任务串行处理所有已接受连接(单线程事件循环,同 s2n-quic / quiche / quic-zig)。每连接多流并发已被利用。要跨核扩展聚合多连接吞吐,在独立 socket/端口上跑多个 Server 实例(SO_REUSEPORT 未接入 Zig std 的 IpAddress.bind)。
  • 绑定地址 —— Server.Config.bind_addr 默认 127.0.0.1;设 .{0,0,0,0} 接受远端 client。
  • Linux x86_64 证书 —— 用 RSA 证书(Zig 0.16 std.crypto 在 x86_64 有 P-256/P-384/Ed25519 签名 验证 codegen bug);aarch64 与 macOS 用 ECDSA 即可。
  • 功能对比 —— 与其它 QUIC 实现的能力矩阵。
  • 性能 —— 吞吐与延迟数据。
  • 架构 —— 模块布局与设计决策。