mcpField
M
m10-performance

m10-performance

github.com/actionbook开发1.6k3.6k 次安装9 周前更新
代码仓库

关于 m10-performance

面向 Rust 开发者的性能优化技能,帮助判断是否需要优化以及如何着手。它强调先分析和测量瓶颈,再选择实现手段并权衡取舍。

主要功能

  1. 01优化前先分析与基准测试
  2. 02比较算法和数据结构选择
  3. 03减少分配与数据复制
  4. 04评估缓存利用和并行处理

适用场景

  1. 01排查疑似 CPU 热点
  2. 02选择高效的数据集合
  3. 03减少热点路径中的内存分配

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/actionbook/rust-skills --skill m10-performance

安装后在 Claude Code 中输入/m10-performance确认已加载。

附带文件patterns/optimization-guide.md

详细介绍

性能优化

第 2 层:设计选择

核心问题

瓶颈在哪里,优化是否值得?

优化前:

  • 你测量过吗?(不要猜)
  • 可接受的性能水平是什么?
  • 优化会增加复杂度吗?

性能决策 → 实现

目标设计选择实现
减少分配预分配、复用with_capacity、对象池
改善缓存连续数据Vec、SmallVec
并行化数据并行rayon、线程
避免复制零拷贝引用、Cow<T>
减少间接访问内联数据smallvec、数组

思考提示

优化前:

  1. 你测量过吗?

    • 先分析 → flamegraph、perf
    • 基准测试 → criterion、cargo bench
    • 找出实际的热点
  2. 优先级是什么?

    • 算法(提升 10x-1000x)
    • 数据结构(提升 2x-10x)
    • 分配(提升 2x-5x)
    • 缓存(提升 1.5x-3x)
  3. 权衡是什么?

    • 复杂度与速度
    • 内存与 CPU
    • 延迟与吞吐量

向上追溯 ↑

至领域约束(第 3 层):

"How fast does this need to be?"
    ↑ Ask: What's the performance SLA?
    ↑ Check: domain-* (latency requirements)
    ↑ Check: Business requirements (acceptable response time)
问题追溯至询问
延迟要求domain-*可接受的响应时间是多少?
吞吐量需求domain-*每秒有多少请求?
内存限制domain-*内存预算是多少?

向下追溯 ↓

至实现(第 1 层):

"Need to reduce allocations"
    ↓ m01-ownership: Use references, avoid clone
    ↓ m02-resource: Pre-allocate with_capacity

"Need to parallelize"
    ↓ m07-concurrency: Choose rayon or threads
    ↓ m07-concurrency: Consider async for I/O-bound

"Need cache efficiency"
    ↓ Data layout: Prefer Vec over HashMap when possible
    ↓ Access patterns: Sequential over random access

快速参考

工具用途
cargo bench微基准测试
criterion统计基准测试
perf / flamegraphCPU 性能分析
heaptrack分配跟踪
valgrind / cachegrind缓存分析

优化优先级

1. Algorithm choice     (10x - 1000x)
2. Data structure       (2x - 10x)
3. Allocation reduction (2x - 5x)
4. Cache optimization   (1.5x - 3x)
5. SIMD/Parallelism     (2x - 8x)

常用技术

技术适用场景方法
预分配大小已知Vec::with_capacity(n)
避免克隆热路径使用引用或 Cow<T>
批量操作大量小操作收集后处理
SmallVec通常较小smallvec::SmallVec<[T; N]>
内联缓冲区固定大小的数据使用数组而不是 Vec

常见错误

错误错误原因更好的做法
未进行性能分析就优化目标错误先进行性能分析
在调试模式下运行基准测试毫无意义始终使用 --release
使用 LinkedList缓存不友好使用 Vec 或 VecDeque
隐式 .clone()不必要的分配使用引用
过早优化浪费精力先让它正常工作

反模式

反模式不好的原因更好的做法
为避免生命周期而克隆性能开销正确管理所有权
什么都装进 Box间接访问开销尽可能使用栈
小集合使用 HashMap开销过大使用 Vec 线性搜索
在循环中拼接字符串O(n^2)使用 String::with_capacity 或 format!

相关技能

适用场景查看
减少克隆m01-ownership
并发选项m07-concurrency
智能指针选择m02-resource
领域要求domain-*

评论

支持 Markdown