SuperAPI AI 工具集

rust-performance

编程与开发

查看项目

更新于 10-16 02:25

技能介绍

用途

本技能面向 Rust 性能优化、性能剖析与高性能系统开发。核心目标是做出有证据支撑的优化,避免过早优化。适用于需要降低延迟、提升吞吐、减少内存占用或改善缓存局部性的 Rust 项目。

核心原则

  • 正确性优先于速度:任何优化前先用测试证明正确性。
  • 先测量:没有剖析数据就不优化。
  • 算法优先:更好的算法胜过微优化。
  • 面向数据的设计:缓存友好的数据布局很重要。
  • 基于证据:每次优化都必须有可复现基准证明可测量的改进。

关键规则:如果优化改变了解析、I/O 或浮点格式化,必须在基准测试之前添加或扩展回归测试。

优化工作流

  1. BASELINE:用测试建立当前行为基线
  2. TEST:为将要修改的代码添加回归测试
  3. OPTIMIZE:实施改动
  4. VERIFY:运行测试证明正确性未变
  5. BENCHMARK:此时才测量改进

实践中:

cargo test                     # 1-2. 验证基线并添加回归测试
# ... 实施优化 ...
cargo test                     # 4. 验证正确性未变
cargo bench                    # 5. 测量改进

主要能力

性能剖析

  • 使用 perf、samply 或 Instruments 进行 CPU 剖析
  • 使用 heaptrack 或 valgrind 进行内存剖析
  • 识别热点路径与瓶颈
  • 分析缓存行为

常用命令:

# CPU 剖析(samply)
cargo build --release
samply record ./target/release/my-app

# 内存剖析(heaptrack)
heaptrack ./target/release/my-app
heaptrack_gui heaptrack.my-app.*.gz

# 缓存分析(cachegrind)
valgrind --tool=cachegrind ./target/release/my-app

# 火焰图
cargo flamegraph -- <args>

基准测试

  • 编写 Criterion 基准
  • 建立性能基线
  • 对比不同实现
  • 在 CI 中检测性能回退

构建配置示例(参考 ripgrep 做法):

[profile.release]
opt-level = 3
lto = "thin"
codegen-units = 1

[profile.release-lto]
inherits = "release"
lto = "fat"

[profile.bench]
inherits = "release"
debug = true  # 启用剖析符号

重要:基准报告中必须注明所用的构建配置。

优化技术

  • 减少分配(复用缓冲区、SmallVec)
  • 面向数据的设计(AoS 改为 SoA 以改善缓存局部性)
  • 零拷贝解析(使用 Cow 借用输入)
  • SIMD 优化(portable-simd 或显式 intrinsics)
  • 字符串优化(字符串驻留、CompactString)

并发模式

  • 使用 crossbeam 的无锁数据结构(epoch 回收、ArrayQueue)
  • 使用 Rayon 的数据并行(par_iter、par_chunks、自定义线程池)
  • 原子操作与内存序(Relaxed/Acquire/Release/AcqRel/SeqCst 的适用场景)
  • 避免伪共享(用 #[repr(align(64))] 填充到独立缓存行)

并发纪律:研究阶段用 Amdahl 定律剖析串行瓶颈;设计阶段为每个原子操作说明内存序理由;验证阶段对无锁代码强制使用 loom 和 ThreadSanitizer。

构建优化与分发

  • 体积优化配置(opt-level = "z"、strip、panic = "abort")
  • 符号剥离策略(none/debuginfo/symbols 的适用场景)
  • 特性门控(feature gates)条件编译
  • 使用 cross 交叉编译
  • 自定义分配器(jemalloc、bumpalo arena 分配)

编译器提示与内存布局

  • #[cold]、#[inline(always)]、#[inline(never)]、#[target_feature]
  • 用 size_of/align_of 检查结构体大小与对齐,优化字段顺序减少填充

使用方式

按优化工作流执行:先建立基线并添加回归测试,再实施优化,验证正确性后运行基准。性能相关 PR 需包含:回归测试、基准脚本(Criterion 或 hyperfine)、同机器前后对比数据、明确注明的构建配置;若改进超过 50%,需附火焰图/perf 证据;若涉及 unsafe 代码,需记录不变量并附证明测试。

适用场景

  • Rust 库或应用的性能调优
  • 高吞吐/低延迟系统开发
  • 内存占用优化
  • 并发与并行代码优化
  • 构建体积与分发优化

限制与约束

  • 绝不在没有正确性测试的情况下优化
  • 绝不在未注明构建配置的情况下做基准
  • 记录优化原因,冷路径保持可读代码
  • 在代表性数据上测量,充分测试优化代码(含边界情况)
  • 权衡维护成本与性能收益

成功指标:优化前后正确性测试均通过、可测量的性能改进(重大改动 >10%)、无正确性回退、为优化路径添加基准、记录构建配置与机器规格、记录内存使用、注释中说明优化理由、前后数据可被他人复现。