鲲鹏Rust生态软件性能评测系统开发实施操作方案
一、概述
本文档基于 rust-bench 项目源码实现,提供在鲲鹏ARM服务器和x86_64服务器上进行Rust生态软件性能评测的完整操作指南,涵盖环境部署、性能数据生成、数据对比分析、数据持久化和可视化展示的全流程。
二、环境准备与部署
2.1 硬件环境
| 角色 | 硬件 | 操作系统 | 用途 |
|---|---|---|---|
| ARM Collector | 鲲鹏920B服务器 | openEuler 22.03 / Ubuntu 22.04 (aarch64) | ARM平台性能评测 |
| x86 Collector | AMD EPYC 9654 服务器 | Ubuntu 22.04 (x86_64) | x86平台性能评测 |
| 数据库/Web服务器 | 通用服务器 | Ubuntu 22.04 | PostgreSQL + Site前端 |
2.2 软件依赖安装
2.2.1 基础依赖(所有Collector节点)
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y \
g++ curl ca-certificates libc6-dev make \
libssl-dev pkg-config git cmake zlib1g-dev \
linux-tools-common linux-tools-generic linux-tools-$(uname -r)
# openEuler (鲲鹏ARM)
sudo dnf install -y \
gcc-c++ curl ca-certificates glibc-devel make \
openssl-devel pkgconfig git cmake zlib-devel \
perf
2.2.2 Rust工具链安装
# 安装 rustup 和 stable 工具链
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- \
--default-toolchain stable --profile minimal -y
source $HOME/.cargo/env
# 安装多版本工具链(用于对比测试)
rustup install nightly
rustup install beta
rustup install 1.91.0 # rust-bench 要求的最低版本
2.2.3 perf_event 权限配置
# 设置 perf_event_paranoid(每次重启后需重新设置)
sudo bash -c 'echo -1 > /proc/sys/kernel/perf_event_paranoid'
# 持久化配置(写入 sysctl)
echo 'kernel.perf_event_paranoid = -1' | sudo tee /etc/sysctl.d/99-perf.conf
sudo sysctl --system
2.2.4 Valgrind 安装(用于 Cachegrind profiling)
# 从源码编译 Valgrind(推荐,确保版本兼容)
git clone https://sourceware.org/git/valgrind.git
cd valgrind
git checkout 74e180e3c4d9e6bb4b2a9cd22eca7703412c5d42 # 稳定版本
./autogen.sh
./configure --prefix=$HOME/valgrind-build
make -j$(nproc)
make install
# 添加到 PATH
echo 'export PATH=$HOME/valgrind-build/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
2.3 评测环境降噪配置
为确保评测结果稳定可复现,需对评测机进行以下配置:
# 1. 固定CPU频率(禁用动态调频)
sudo cpupower frequency-set -g performance
# 或直接写入
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
echo performance | sudo tee $cpu
done
# 2. 禁用ASLR(地址空间随机化)
sudo bash -c 'echo 0 > /proc/sys/kernel/randomize_va_space'
# 3. 隔离CPU核心(在GRUB中配置,重启生效)
# 编辑 /etc/default/grub,添加:
# GRUB_CMDLINE_LINUX="isolcpus=4-7 nohz_full=4-7 rcu_nocbs=4-7"
# sudo update-grub && sudo reboot
# 4. 禁用透明大页
sudo bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
# 5. 确认 ARM PMU 可用(鲲鹏服务器)
cat /proc/sys/kernel/perf_event_paranoid # 应为 -1
perf stat -e instructions:u,cycles:u ls # 验证计数器可用
2.4 项目构建
# 克隆项目
git clone <rust-bench-repo-url> rust-bench
cd rust-bench
# 构建 Release 版本(所有组件)
cargo build --release
# 验证构建产物
ls target/release/collector # 主评测工具
ls target/release/site # Web前端服务器(可选)
ls target/release/postgres-to-sqlite # 数据导出工具
ls target/release/sqlite-to-postgres # 数据导入工具
三、生成性能数据
3.1 运行时基准测试(核心操作)
运行时基准测试测量用特定版本 rustc 编译后的 Rust 程序执行性能。
基本用法
# 使用系统默认 rustc 运行所有运行时 benchmark
./target/release/collector bench_runtime_local $(rustup which rustc)
# 使用 nightly 工具链
./target/release/collector bench_runtime_local +nightly
# 使用指定路径的 rustc(如自编译的 stage1)
./target/release/collector bench_runtime_local /path/to/rust/build/aarch64-unknown-linux-gnu/stage1/bin/rustc
常用参数
# 指定结果标识符和数据库
./target/release/collector bench_runtime_local +nightly \
--id kunpeng-nightly-2026-05-18 \
--db results.db \
--iterations 10
# 只运行指定的 benchmark 组
./target/release/collector bench_runtime_local +nightly --group std
./target/release/collector bench_runtime_local +nightly --group hashmap
# 按名称前缀过滤
./target/release/collector bench_runtime_local +nightly --include find_existing
./target/release/collector bench_runtime_local +nightly --exclude hashmap
# 复用已编译产物(加速重复运行)
./target/release/collector bench_runtime_local +nightly --no-isolate
参数说明
| 参数 | 说明 | 默认值 |
|---|---|---|
<RUSTC> |
rustc路径或+toolchain名 |
必填 |
--id <ID> |
结果标识符 | 工具链名或"Id" |
--db <PATH> |
数据库路径(SQLite)或URL(PostgreSQL) | results.db |
--iterations <N> |
每个benchmark迭代次数 | 5 |
--group <GROUP> |
只运行指定的benchmark组 | 全部 |
--include <PREFIX> |
只包含匹配前缀的benchmark | 全部 |
--exclude <PREFIX> |
排除匹配前缀的benchmark | 无 |
--no-isolate |
复用已编译的benchmark产物 | 每次重新编译 |
--purge |
测试前清除该artifact的旧数据 | 不清除 |
--cargo <PATH> |
指定cargo路径 | rustup默认 |
输出示例
Finished std/find_existing (1/42)
[Instructions]: min: 1,234,567 mean: 1,234,890 stddev: 234
[Cycles]: min: 456,789 mean: 457,012 stddev: 156
[Wall time [ns]]: min: 234,000 mean: 235,000 stddev: 2,000
[Branch misses]: min: 1,234 mean: 1,245 stddev: 12
[Cache misses]: min: 56 mean: 58 stddev: 3
[Memory [kb]]: min: 2,048 mean: 2,048 stddev: 0
3.2 编译时基准测试
编译时基准测试测量 rustc 编译真实世界 crate 的性能。
# 运行完整编译时 benchmark 套件(耗时数小时)
./target/release/collector bench_local $(rustup which rustc)
# 只测试指定 crate,限定 Profile 和 Scenario
./target/release/collector bench_local +nightly \
--id kunpeng-compile-nightly \
--include syn,cargo-0.87.1 \
--profiles Check,Debug,Opt \
--scenarios Full,IncrFull
# 启用 self-profile(生成查询/函数级耗时数据)
./target/release/collector bench_local +nightly \
--id kunpeng-selfprofile \
--include syn \
--self-profile
Profile 选项:Check / Debug / Doc / Opt / Clippy / All Scenario 选项:Full / IncrFull / IncrUnchanged / IncrPatched / All
3.3 跨平台对比评测操作流程
在鲲鹏ARM和x86_64两台服务器上分别执行相同评测,生成可对比的数据:
# === 鲲鹏ARM服务器 ===
./target/release/collector bench_runtime_local +nightly \
--id nightly-arm-2026-05-18 \
--db results-arm.db \
--iterations 10
# === x86_64服务器 ===
./target/release/collector bench_runtime_local +nightly \
--id nightly-x86-2026-05-18 \
--db results-x86.db \
--iterations 10
如使用共享 PostgreSQL 数据库,两台机器可写入同一数据库:
# 两台服务器均指向同一 PostgreSQL
./target/release/collector bench_runtime_local +nightly \
--id nightly-arm-2026-05-18 \
--db postgresql://user:pass@db-server:5432/rustbench \
--iterations 10
3.4 多Rust版本对比评测
# 在同一台机器上测试多个版本
./target/release/collector bench_runtime_local +stable --id stable-1.80
./target/release/collector bench_runtime_local +beta --id beta
./target/release/collector bench_runtime_local +nightly --id nightly
# 测试特定 commit(需安装 rustup-toolchain-install-master)
./target/release/collector bench_runtime_local +abc1234def5678 --id pr-12345
四、性能数据对比
4.1 bench_cmp 交互式TUI对比
bench_cmp 提供基于终端的交互式对比界面,用于比较两个 artifact 之间的性能差异。
# 启动 TUI 对比界面(交互选择要对比的两个 artifact)
./target/release/collector bench_cmp --db results.db
操作快捷键:
| 快捷键 | 功能 |
|---|---|
M |
切换编译时/运行时对比模式 |
A / S |
切换指标(instructions → cycles → wall-time → ...) |
F |
切换显示全部结果 / 仅显示显著变化 |
1 / 2 |
切换目标平台 |
Enter |
在JSON行上打开详情视图 |
↑ / ↓ |
列表导航 |
q / Esc |
退出 |
界面内容:
- 顶部摘要面板:回归/改进数量统计
- 详细表格:Benchmark名称、Before值、After值、变化幅度(含95%置信区间)
4.2 使用 Site Web 界面对比
# 启动 Web 服务器
./target/release/site results.db
# 或连接 PostgreSQL
DATABASE_URL=postgresql://user:pass@localhost:5432/rustbench ./target/release/site
# 等待 "Loading complete" 输出后,浏览器访问:
# http://localhost:2346/compare.html?start=nightly-arm&end=nightly-x86&stat=instructions:u
如果采集了新数据,可通知 Site 刷新:
curl -X POST localhost:2346/perf/onpush
4.3 Codegen Diff(汇编级对比)
对比两个 rustc 版本生成的汇编/LLVM IR/MIR 差异,用于定位具体指令级变化:
# 汇编对比
./target/release/collector codegen_diff asm <benchmark-name> <rustc1> <rustc2>
# 带源码注解的汇编对比
./target/release/collector codegen_diff asm-source <benchmark-name> <rustc1> <rustc2>
# LLVM IR 对比
./target/release/collector codegen_diff llvm <benchmark-name> <rustc1> <rustc2>
# MIR 对比
./target/release/collector codegen_diff mir <benchmark-name> <rustc1> <rustc2>
4.4 Binary Size 对比
# 对比两个 rustc 编译同一 benchmark 的二进制体积
./target/release/collector binary_stats compile $(rustup which rustc) \
--include syn --rustc2 $(rustup +nightly which rustc)
# 对比本地二进制文件
./target/release/collector binary_stats local ./binary_v1 ./binary_v2
五、性能分析(Profiling)
5.1 运行时 Profiling
Cachegrind(指令级确定性分析)
# 分析所有运行时 benchmark
./target/release/collector profile_runtime +nightly cachegrind
# 分析指定组
./target/release/collector profile_runtime +nightly cachegrind --group std
# 分析指定 benchmark
./target/release/collector profile_runtime +nightly cachegrind --include find_existing
# 对比两个 rustc 版本(生成 diff 文件)
./target/release/collector profile_runtime +stable cachegrind --rustc2 +nightly
输出文件(位于 results/ 目录):
cgout-*:Cachegrind 原始数据cgann-*:人类可读的注解输出(含每行指令计数)
精确模式(仅测量 benchmark 代码本身,需 Valgrind ≥ 3.22):
DEP_VALGRIND=$HOME/valgrind-build/include cargo run --release --bin collector \
--features precise-cachegrind \
profile_runtime +nightly cachegrind --group std
perf-record(采样式热点分析)
# 采样式分析
./target/release/collector profile_runtime +nightly perf-record --group std
# 分析指定 benchmark
./target/release/collector profile_runtime +nightly perf-record --include find_existing
输出文件:
perf-*:perf 原始数据(可用perf report或 Hotspot 查看)perfreport-*:注解报告
5.2 编译时 Profiling
# Cachegrind 分析编译过程
./target/release/collector profile_local cachegrind +nightly \
--id profile-test \
--include syn \
--profiles Check
# perf-record 分析编译过程
./target/release/collector profile_local perf-record +nightly \
--id profile-test \
--include syn \
--profiles Opt
# DHAT 堆分析(定位内存分配热点)
./target/release/collector profile_local dhat +nightly \
--id profile-test \
--include syn \
--profiles Check
# Massif 峰值内存分析
./target/release/collector profile_local massif +nightly \
--id profile-test \
--include syn
5.3 Profile 结果分析
# 查看 Cachegrind 注解(找到热点函数和行)
less results/cgann-profile-test-syn-Check-Full
# 使用 perf report 查看采样数据
perf report -i results/perf-profile-test-syn-Check-Full
# 使用 Hotspot 可视化(推荐)
hotspot results/perf-profile-test-syn-Check-Full
# 使用 cg_diff 对比两次 Cachegrind 结果
cg_diff results/cgout-v1-syn-Check-Full results/cgout-v2-syn-Check-Full > diff.txt
cg_annotate diff.txt
六、数据持久化
6.1 SQLite 本地存储(默认)
默认情况下,评测结果存储在本地 SQLite 文件中:
# 默认写入 results.db
./target/release/collector bench_runtime_local +nightly
# 指定数据库文件路径
./target/release/collector bench_runtime_local +nightly --db /data/benchmarks/kunpeng.db
SQLite 适用于:
- 本地开发和调试
- 单机评测
- 快速验证
6.2 PostgreSQL 生产存储
生产环境使用 PostgreSQL,支持多 Collector 并发写入和远程访问。
部署 PostgreSQL
# 使用 Docker 快速部署
docker run -d \
--name rustbench-pg \
-e POSTGRES_USER=rustbench \
-e POSTGRES_PASSWORD=<secure-password> \
-e POSTGRES_DB=rustbench \
-p 5432:5432 \
-v pgdata:/var/lib/postgresql/data \
postgres:16-alpine
# 或使用项目自带的 docker-compose
make start-postgres
写入 PostgreSQL
# Collector 直接写入 PostgreSQL
./target/release/collector bench_runtime_local +nightly \
--id nightly-arm-2026-05-18 \
--db postgresql://rustbench:<password>@db-server:5432/rustbench
6.3 数据迁移工具
# SQLite → PostgreSQL(本地数据上传到生产库)
./target/release/sqlite-to-postgres \
results.db \
'postgresql://rustbench:<password>@db-server:5432/rustbench'
# PostgreSQL → SQLite(从生产库导出到本地分析)
./target/release/postgres-to-sqlite \
'postgresql://rustbench:<password>@db-server:5432/rustbench' \
local-analysis.db
# 只导出最近N周的数据
./target/release/postgres-to-sqlite \
--since-weeks-ago=4 \
'postgresql://rustbench:<password>@db-server:5432/rustbench' \
recent.db
6.4 数据备份策略
# SQLite 备份(文件复制即可)
cp results.db "backups/results-$(date +%Y%m%d).db"
# PostgreSQL 备份
pg_dump -h db-server -U rustbench rustbench > "backups/rustbench-$(date +%Y%m%d).sql"
# 定时备份(crontab)
# 每日凌晨2点备份
0 2 * * * /usr/bin/pg_dump -h db-server -U rustbench rustbench | gzip > /backups/rustbench-$(date +\%Y\%m\%d).sql.gz
七、可视化部署
7.1 Site Web 前端部署
本地开发模式
# 构建前端(需要 Node.js 18+)
cd site/frontend
npm ci
npm run build
cd ../..
# 构建 site 服务器
cargo build --release --bin site
# 启动(SQLite)
./target/release/site results.db
# 访问 http://localhost:2346
# 启动(PostgreSQL)
DATABASE_URL=postgresql://rustbench:<password>@db-server:5432/rustbench \
./target/release/site
Docker 生产部署
# 构建 Docker 镜像(多阶段构建:Node.js前端 + Rust后端)
docker build -t rust-bench-site .
# 运行容器
docker run -d \
--name rust-bench-site \
-e DATABASE_URL=postgresql://rustbench:<password>@db-server:5432/rustbench \
-p 2346:2346 \
rust-bench-site
Web 界面功能
访问 http://<server>:2346/compare.html:
- 版本对比:在 "Commit/Date A" 和 "Commit/Date B" 输入框中填入 artifact ID
- 指标选择:instructions:u / cycles:u / wall-time / max-rss 等
- URL 直接访问:
/compare.html?start=<id1>&end=<id2>&stat=instructions:u
7.2 TUI 终端对比(无需部署)
对于无图形界面的服务器环境,直接使用 bench_cmp TUI:
# 交互式选择 artifact 对比
./target/release/collector bench_cmp --db results.db
# 典型工作流:
# 1. 运行两次评测
./target/release/collector bench_runtime_local +stable --id baseline
./target/release/collector bench_runtime_local +nightly --id candidate
# 2. 启动 TUI 对比
./target/release/collector bench_cmp --db results.db
# 3. 选择 baseline 和 candidate 进行对比
7.3 数据刷新
当采集新数据后,通知 Site 服务器刷新:
curl -X POST http://localhost:2346/perf/onpush
或直接重启 Site 服务器。
八、CI/CD 自动化评测
8.1 GitHub Actions 流水线
项目已配置以下 CI 流水线:
| 流水线 | 触发条件 | 功能 |
|---|---|---|
ci.yml |
PR / merge_group / 每周一 | 单元测试、benchmark验证、profiling验证、Docker构建 |
deploy.yml |
push to master | 构建Docker镜像并部署到AWS ECS |
nightly.yml |
定时触发 | Nightly性能趋势数据采集 |
beta-stable-benchmarks.yml |
Release事件 | Beta/Stable版本性能基线 |
8.2 本地定时评测(Cron)
# 创建每日评测脚本 /opt/rust-bench/daily-bench.sh
#!/bin/bash
set -e
cd /opt/rust-bench
# 更新 nightly 工具链
rustup update nightly
# 运行评测
./target/release/collector bench_runtime_local +nightly \
--id "nightly-arm-$(date +%Y-%m-%d)" \
--db postgresql://rustbench:pass@db-server:5432/rustbench \
--iterations 10
# 通知 Site 刷新
curl -X POST http://site-server:2346/perf/onpush
# 配置 crontab:每日凌晨3点执行
# 0 3 * * * /opt/rust-bench/daily-bench.sh >> /var/log/rust-bench.log 2>&1
8.3 CI 验证脚本
项目提供了验证脚本,可在部署后快速验证系统功能:
# 验证运行时 benchmark 可正常执行
bash ci/check-runtime-benchmarks.sh
# 验证编译时 benchmark
bash ci/check-compile-benchmarks.sh
# 验证 profiling 功能
bash ci/check-profiling.sh
# 验证 Site API 端点(需先启动 site)
python3 ci/check-site.py <artifact-id-1> <artifact-id-2>
九、新增评测集开发指南
9.1 使用 #[bench] 宏(推荐)
适用于标准微基准测试。在 collector/runtime-benchmarks/ 下创建新 crate:
# 创建新评测组目录
mkdir -p collector/runtime-benchmarks/my-bench
Cargo.toml:
[package]
name = "my-bench"
version = "0.1.0"
edition = "2021"
[[bin]]
name = "my-bench"
path = "src/main.rs"
[dependencies]
benchlib = { path = "../../benchlib" }
src/main.rs:
use benchlib::benchmark::{bench, Bencher};
#[bench]
fn my_operation(b: &mut Bencher) {
let data = vec![1u64; 10000];
b.iter(
|| data.clone(), // constructor(不被测量)
|mut v| { // bench(被测量)
v.sort();
},
);
}
fn main() {
benchlib::benchmark::run_global_benchmark_group();
}
9.2 使用 Custom API(自定义指标)
适用于需要自定义指标、JSON报告的场景(如 Daft/Volo/Monoio):
use benchlib::comm::messages::{BenchmarkMessage, BenchmarkResult, BenchmarkSample};
use benchlib::comm::output_message;
use benchlib::custom::{init, BenchAction};
use std::time::{Duration, Instant};
fn main() -> benchlib::anyhow::Result<()> {
let action = init(&["my-custom-bench"])?;
match action {
BenchAction::Run { iterations, benchmarks, extra } => {
let mut stdout = std::io::stdout().lock();
for name in &benchmarks {
let mut samples = Vec::with_capacity(iterations as usize);
for _ in 0..iterations {
let start = Instant::now();
// ... 执行被测代码 ...
let elapsed = start.elapsed();
let mut sample = BenchmarkSample::new(elapsed);
sample.set("throughput_ops/s", 12345.0); // 自定义指标
sample.set("latency_p99_us", 42.0);
samples.push(sample);
}
let result = BenchmarkResult::with_samples(name.clone(), samples);
output_message(&mut stdout, BenchmarkMessage::Result(result))?;
}
}
BenchAction::Profile(args) => { /* profiling 逻辑 */ }
}
Ok(())
}
9.3 运行新评测集
# 编译并运行新评测组
./target/release/collector bench_runtime_local +nightly --group my-bench
# 验证输出正常后,提交代码
十、典型操作场景
场景一:评估 Rust Nightly 版本在鲲鹏上的性能变化
# 1. 更新工具链
rustup update nightly
# 2. 运行评测(使用上一次的 stable 作为基线)
./target/release/collector bench_runtime_local +stable --id baseline
./target/release/collector bench_runtime_local +nightly --id candidate
# 3. 对比结果
./target/release/collector bench_cmp --db results.db
# 选择 baseline vs candidate,按 A/S 切换指标查看
场景二:验证 SIMD 优化补丁的效果
# 1. 编译两个版本的 rustc(优化前/后)
# 假设 rustc-before 和 rustc-after 已编译好
# 2. 分别运行目标 benchmark
./target/release/collector bench_runtime_local /path/to/rustc-before \
--id before-simd --group std --include hashmap
./target/release/collector bench_runtime_local /path/to/rustc-after \
--id after-simd --group std --include hashmap --no-isolate
# 3. TUI 对比
./target/release/collector bench_cmp --db results.db
# 4. 汇编级对比(确认 SIMD 指令生成)
./target/release/collector codegen_diff asm hashmap /path/to/rustc-before /path/to/rustc-after
场景三:定位性能劣化的热点函数
# 1. 发现 nightly 某 benchmark 劣化后,进行 Cachegrind 分析
./target/release/collector profile_runtime +stable cachegrind \
--include find_existing --rustc2 +nightly
# 2. 查看 diff 输出
less results/cgann-*-find_existing*
# 找到指令数增加最多的函数和代码行
# 3. 如需采样式分析
./target/release/collector profile_runtime +nightly perf-record \
--include find_existing
perf report -i results/perf-*-find_existing*
场景四:跨平台性能对比报告
# 1. 两台服务器分别评测,写入同一 PostgreSQL
# [ARM]
./target/release/collector bench_runtime_local +nightly \
--id nightly-arm --db postgresql://...
# [x86]
./target/release/collector bench_runtime_local +nightly \
--id nightly-x86 --db postgresql://...
# 2. 启动 Site 查看对比
DATABASE_URL=postgresql://... ./target/release/site
# 浏览器访问 http://server:2346/compare.html?start=nightly-arm&end=nightly-x86
附录A:常见问题排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
perf_event_open 权限错误 |
perf_event_paranoid 未设置 |
echo -1 > /proc/sys/kernel/perf_event_paranoid |
| 评测结果噪声大 | CPU动态调频/其他进程干扰 | 固定CPU频率、隔离核心、关闭不必要服务 |
| Cachegrind 报错 | Valgrind 版本过低 | 从源码编译 Valgrind ≥ 3.15(精确模式需 ≥ 3.22) |
| benchmark 编译失败 | Rust工具链版本不兼容 | 确认使用 Rust ≥ 1.91.0 |
| PostgreSQL 连接失败 | 网络/认证问题 | 检查 pg_hba.conf、防火墙、连接字符串 |
--no-isolate 后结果异常 |
旧编译产物与新 rustc 不兼容 | 去掉 --no-isolate 重新编译 |
附录B:项目关键文件索引
| 文件/目录 | 用途 |
|---|---|
collector/src/bin/collector.rs |
CLI入口,所有子命令定义 |
collector/benchlib/src/benchmark.rs |
#[bench] 宏 + Bencher 核心逻辑 |
collector/benchlib/src/measure/perf_counter/linux.rs |
perf_event_open 硬件计数器采集 |
collector/benchlib/src/custom.rs |
Custom benchmark API |
collector/benchlib/src/comm/messages.rs |
消息协议 + 指标常量定义 |
collector/src/runtime/mod.rs |
运行时评测编排逻辑 |
collector/src/runtime/profile.rs |
运行时 Profiling(Cachegrind/perf-record) |
collector/src/compare/screen.rs |
bench_cmp TUI 界面 |
database/src/pool/postgres.rs |
PostgreSQL 后端 |
database/src/pool/sqlite.rs |
SQLite 后端 |
site/src/api.rs |
Web API 端点 |
.github/workflows/ci.yml |
CI 流水线定义 |
Dockerfile |
生产部署镜像构建 |