mit einem Klick
bench-perf
编写或修改性能基准测试、分析 benchmark 结果、优化热路径性能时触发。
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Menü
编写或修改性能基准测试、分析 benchmark 结果、优化热路径性能时触发。
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Basierend auf der SOC-Berufsklassifikation
写入新模块文档、重构模块、或用户要求分析模块时触发。
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。压力测试验证高并发下稳定性,非性能测量。