用途
rust-profiling 用于对 Rust 二进制进行性能剖析,借助 samply 找出 CPU 瓶颈与内存分配压力;当症状表现为 RSS 增长或碎片化时,再结合操作系统层面的内存证据进行分析。
主要能力
- 使用 samply 录制 Rust 程序的性能数据,并打开 Firefox Profiler UI 查看。
- 支持仅保存模式,将剖析结果输出为 profile.json,供命令行分析。
- 提供 CLI 分析脚本 scripts/analyze_profile.py,用于分析保存的 profile.json 文件。
- 附带文档:reference.md(Cargo.toml 配置、samply 选项、故障排查)、examples.md(常见剖析场景与分析模式)、optimization.md(剖析后的修复手段:源码模式、release profile 调优、PGO、BOLT,以及哪些做法无效)。
使用方式
快速开始步骤:
- 确保 Cargo.toml 中存在 profiling profile(参见 reference.md)。
- 带调试符号构建:
cargo build --profile profiling
- 进行剖析(会打开 Firefox Profiler UI):
samply record ./target/profiling/<binary> [args...]
- 或仅保存以便 CLI 分析:
samply record --save-only -o profile.json ./target/profiling/<binary>
python3 ~/.agents/skills/rust-profiling/scripts/analyze_profile.py profile.json
适用场景
- 性能比预期慢。
- 负载下 RSS 或堆使用量意外增长。
- 优化之前(先测量)。
- 优化之后(验证改进)。
- 排查 CPU 密集型操作或分配密集的热点路径。
限制与不适用场景
- 任务属于 Rust 正确性缺陷、API 设计问题,或没有性能症状的重构。
- 用户已有明确的基准测试需求,不需要剖析指导。
- 问题在于构建时间、二进制体积或依赖卫生,而非运行时 CPU、内存或争用。
观察要点
| 模式 | 含义 | 行动 |
|---|---|---|
| 高 self-time | 函数本身慢 | 直接优化目标 |
| 高 total-time | 被频繁调用或调用的子函数慢 | 检查调用频率 |
| 热点路径中出现 malloc/alloc | 分配开销 | 预分配、复用、池化,或使用有界/共享缓冲区 |
| RSS 增长后趋于平稳,同时剖析显示分配频繁 | 可能是分配器碎片化,不一定是泄漏 | 比较分配器,然后减少高频小分配 |
| pthread_mutex/parking_lot | 锁争用 | 缩小锁范围或使用无锁方案 |
暂未提供
关于该技能的收费、价格、平台支持范围、具体效果指标等信息,资料中暂未提供。