性能测试
主入口是 test/rust/performance.rs,比较真实 Dever 生成程序和 Rust 实现。Go 与 Web 框架对照使用本目录的 Python 驱动。先测改动涉及的功能,完整矩阵用于阶段检查。
运行
在仓库的 rust/ 目录执行,使用锁定工具链:
cargo +1.95.0 bench --locked --offline --bench performance -- --storage
cargo +1.95.0 bench --locked --offline --bench performance -- --map-values
cargo +1.95.0 bench --locked --offline --bench performance -- --json
| 参数 | 工作负载 |
|---|---|
| 不传参数 | 基础内核 |
--storage、--map-values |
Map/List 的构造、查找、借用和筛选 |
--collections、--handlers、--text、--bytes |
集合处理、函数传递、文本和字节 |
--numeric、--decimal-ops、--decimal-sum |
数值与十进制计算 |
--application、--query |
CMD、JSON 输入输出和 query 解码 |
--json、--json-document |
JSON 与动态文档 |
--resources、--tasks |
文件、流、任务调度和取消 |
--database、--database-postgres |
数据库操作,PostgreSQL 需独立测试配置 |
--websocket-protocol |
独立协议对端的消息传输 |
--websocket |
共享运行库的 WebSocket 生成适配 |
其他诊断开关见主入口及 performance/extended/、performance/transport/。比较程序保存在 rust/target/programs/release/,使用 --build-only 可只构建,再单独运行生成的程序。
Python 驱动从仓库根使用,先查看参数:
python3 test/performance/kernel_go.py --help
python3 test/performance/http_go.py --help
python3 test/performance/cms.py --help
这些测试可能编译程序、启动回环服务或访问测试数据库;地址和工具路径使用现有测试配置,不能指向业务数据。
公平比较
- 使用相同语义、输入、精度、依赖、编译选项和资源限制。Dever 的错误处理、复制和任务清理,参照也须完成。
- 绑定可用 CPU,避免同时构建或跑其他基准。记录频率、节流和负载,保留正向与反向执行顺序。
- 提前固定轮次和预热次数,保留全部样本、绝对耗时、失败次数及源码/二进制摘要,不测到通过才停。
- 独立 Rust 参照用于比较实现;同表、同函数或共享运行库仅用于诊断生成层与测量波动。
- 报告修改前后及相对参照的变化。一次快结果不能代表稳定提速,一个样例不能代表整门语言。
网络与内存
网络结果须同时检查响应内容、错误、丢弃请求和实际测量时长,不能只看 QPS。客户端与服务端分别限制 CPU;并发数相同不等于负载相同。
--memory 构建分配诊断产物,探针位于 test/rust/performance/memory.c。分配次数、存活字节、RSS/PSS 和 cgroup 内存分别报告;插桩结果不作为普通性能耗时。
保存结果
原始数据放在忽略的 target/performance/ 或测试输出目录,与源码提交和编译器摘要对应。README 只维护测试方法,不追加逐轮成绩和修改日志。