生产环境调优
quicz 生产部署的推荐配置。所有参数通过 ConnectionConfig
(src/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
Section titled “PTO jitter”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});CUBIC + HyStart++(推荐)
Section titled “CUBIC + HyStart++(推荐)”quicz 的 CUBIC (RFC 9438) 包含:
- HyStart++ 慢启动 —— 监测 RTT 增长提前退出慢启动(保守慢启动 CSS,÷4 增长,≤5 轮)。
- 快速重传 —— 拥塞事件后立即重传,无需等 PTO。
- App-limited 检测 (RFC 8312 §5.8) —— 排除应用受限时段;3×MTU 阈值避免 loopback 误判。
- PTO jitter —— 可选随机化 PTO(见上)。
NewReno
Section titled “NewReno”默认算法。更简单但高带宽-高延迟路径效率较低;适合低吞吐控制通道。
2026-08 已移除,改用 CUBIC(仓库指南早于移除,仍写「可用但未加固」)。生产请用 CUBIC。
初始 RTT
Section titled “初始 RTT”| 环境 | 推荐 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.Client(std.Io.Threaded)自动处理包 I/O、路由与流投递。几点部署说明:
- Linux 上发送批量自动启用 ——
drainOutgoing把排空的 datagram 收进OutgoingMessage[]并调用socket.sendMany(sendmmsg);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 即可。