环境要求
执行前先编译 Arc:
HTTP/1.1 基准
测试流程
- 启动
http_ok_backend.py(最小 Python HTTP 服务) - 启动
arc-gateway与nginx,并都指向该后端 - 先执行 1 轮预热,再各执行
RUNS轮wrk测量 - 解析结果并输出
summary.json与summary.md
默认参数
可通过环境变量覆盖:
HTTP/2 基准
h2load(而不是 wrk)。会自动生成一套 RSA-2048 自签证书,并同时给 Arc 与 Nginx 使用。二者都做 TLS 终止,后端仍是明文 HTTP/1.1。
默认参数
结果产物
每次运行会在benchmark/results/ 下生成时间戳目录:
env.txt 会记录:
结果解读
summary.json 会给出各测试对象跨轮次聚合统计:
summary.md 是同一结果的表格视图,便于共享。
发布对比结论时建议统一使用中位数(median)。只要同时存在 arc 与 nginx 测试结果,就会自动生成 compare 区块。
可复现性清单
- 固定测试机器规格与内核版本(建议 Linux ≥ 6.1)
- 固定 Arc 与 Nginx 构建版本(
env.txt会记录 commit) - 至少执行 5 轮(
RUNS=5)且参数保持一致 - 对外发布结论使用 median
- 保留所有
*_runN.txt原始文件 - Arc 数据平面依赖 Linux io_uring,请在 WSL2 或原生 Linux 上测,不要在 macOS 上直接测
- 为降低波动,建议关闭动态频率:
cpupower frequency-set -g performance
测试后端
benchmark/backends/http_ok_backend.py 是一个最小 ThreadingHTTPServer,返回固定大小响应,支持 GET、POST、PUT、DELETE、HEAD。
模拟更真实的响应体大小:
故障排查
脚本报 command not found: wrk 或 h2load
脚本报 command not found: wrk 或 h2load
安装缺失工具。Ubuntu/Debian 可用
apt install wrk 安装 wrk,apt install nghttp2-client 安装 h2load。安装后用 wrk --version、h2load --version 检查版本。REQUIRE_ZERO_NON2XX check failed
REQUIRE_ZERO_NON2XX check failed
表示测试中出现了非 2xx/3xx 响应。常见原因是 Arc/Nginx 配置错误、误触发限流、或后端未正常运行。请优先看输出目录里的
backend.log 和 arc.err.log。仅在排障时才建议 REQUIRE_ZERO_NON2XX=0。多轮结果波动过大
多轮结果波动过大
CPU 动态频率是常见原因。可执行:并检查是否有后台进程抢占 CPU。发布结论时请使用
summary.json 的中位数而非均值。h2load 证书相关错误
h2load 证书相关错误
H2 脚本默认使用自签证书。若 h2load 拒绝证书,请确认该版本使用的 TLS 跳过参数。脚本会自动探测
--insecure、--no-verify-peer 或 -k,若全部不兼容,请按实际版本补充脚本探测逻辑。Arc 或 Nginx 端口冲突
Arc 或 Nginx 端口冲突
脚本会在安全范围内随机分配端口。若仍冲突,请终止占用进程后重试,脚本会重新分配端口。

