Files
core/test/performance
2026-11-03 03:32:07 +00:00
..
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00
2026-11-03 03:32:07 +00:00

性能测试

主入口是 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 只维护测试方法,不追加逐轮成绩和修改日志。