en un clic
bench-perf
编写或修改性能基准测试、分析 benchmark 结果、优化热路径性能时触发。
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Menu
编写或修改性能基准测试、分析 benchmark 结果、优化热路径性能时触发。
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Basé sur la classification professionnelle SOC
写入新模块文档、重构模块、或用户要求分析模块时触发。
Bug 修复或对接问题排查确认有效后,将经验记录到知识库。
修改 PMR 分配器、内存池配置、热路径容器、对象生命周期管理代码后触发。
新增或修改 enable_shared_from_this 类、co_spawn 调用、shared_ptr 捕获的 lambda、co_await 后的成员访问时触发。
新增或修改原子操作、异步定时器、无锁通道、跨线程状态同步、CAS 竞争相关代码时触发。
修改协程(co_await/co_return/co_spawn)、异步 I/O、定时器、多线程相关 C++ 代码时触发。
| name | bench-perf |
| description | 编写或修改性能基准测试、分析 benchmark 结果、优化热路径性能时触发。 |
编写 benchmark、分析性能回归、优化热路径、添加性能回归测试时。
函数签名: static void BM_Xxx(benchmark::State& state)
注册宏: BENCHMARK(BM_Xxx)
入口宏: BENCHMARK_MAIN()
参数化: ->Arg(100)->Arg(1000)->Arg(10000)
防优化: benchmark::DoNotOptimize(var)
字节统计: state.SetBytesProcessed(iterations * bytes)
跳过错误: state.SkipWithError("msg")
# 编译(需开启选项)
cmake -B build -DPRISM_ENABLE_BENCHMARK=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j 16
# 运行单个 benchmark
build/benchmarks/XxxBench.exe
# 运行并输出 JSON
build/benchmarks/XxxBench.exe --benchmark_format=json
使用内部计时器,不链接 benchmark::benchmark。适合不需要框架基础设施的简单回归检测。
| 文件 | 测试子系统 |
|---|---|
| CodecBench | HTTP 解析、Trojan 凭证、DNS 报文、SHA224、Base64 |
| CryptoBench | 加密操作 |
| IOBench | I/O 吞吐量 |
| LatencyBench | 延迟测量 |
| MemoryBench | 内存分配性能 |
| MuxBench | Mux 连接吞吐(smux/yamux) |
| MuxConnBench | Mux 连接建立 |
| ProtocolBench | 协议级性能 |
| RealityBench | Reality TLS 握手 |
| RegressionBench | 回归检测(内部计时) |
| ResourceBench | 资源使用 |
| ScaleBench | 规模测试 |
| SessionBench | 会话性能 |
static void BM_HttpParse(benchmark::State& state)
{
proxy_request req;
for (auto _ : state)
{
fault::code ec = parse_req(input, req);
if (fault::failed(ec)) state.SkipWithError("parse failed");
benchmark::DoNotOptimize(req);
}
state.SetBytesProcessed(state.iterations() * input.size());
}
BENCHMARK(BM_HttpParse);
使用 loopback pipe_pair 构造真实链路:
struct pipe_pair
{
net::io_context& io;
net::ip::tcp::socket client;
net::ip::tcp::socket server;
pipe_pair(net::io_context& ioc)
{
// loopback accept + connect
}
};
手动构造帧头,测量完整 round-trip 吞吐。
static void BM_Alloc(benchmark::State& state)
{
for (auto _ : state)
{
// 使用 state.range(0) 作为分配大小
}
}
BENCHMARK(BM_Alloc)->Arg(64)->Arg(256)->Arg(1024)->Arg(4096);
-O2 以上编译运行,Debug 模式结果无意义DoNotOptimize,否则编译器可能消除整个循环state.range(0) 参数化XxxBench.exe --benchmark_format=json > baseline.json,与历史对比RegressionBench 使用内部计时(无 Google Benchmark 依赖)PRISM_ENABLE_STRESS=ON 编译后运行 build/stresses/MuxStress.exe。压力测试验证高并发下稳定性,非性能测量。