在 Manus 中运行任何 Skill
一键导入
一键导入
一键在 Manus 中运行任何 Skill
开始使用bench-perf
星标5
分支1
更新时间2026年5月31日 10:16
编写或修改性能基准测试、分析 benchmark 结果、优化热路径性能时触发。
安装
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
SKILL.md
readonly菜单
编写或修改性能基准测试、分析 benchmark 结果、优化热路径性能时触发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 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。压力测试验证高并发下稳定性,非性能测量。