Resources
3Install
npx skillscat add pluginagentmarketplace/custom-plugin-rust/rust-performance Install via the SkillsCat registry.
About this skill
This skill provides guidance on profiling, benchmarking, and optimizing Rust applications, covering tools like Criterion and flamegraphs along with patterns to reduce allocations and improve cache behavior. It addresses the problem of identifying and resolving performance bottlenecks in Rust code. Developers should use it when they need to measure or improve the runtime efficiency of Rust programs.
SKILL.md
Rust Performance Skill
Master performance optimization: profiling, benchmarking, and zero-cost abstractions.
Quick Start
Benchmarking
[dev-dependencies]
criterion = { version = "0.5", features = ["html_reports"] }
[[bench]]
name = "my_bench"
harness = falseuse criterion::{criterion_group, criterion_main, Criterion, black_box};
fn benchmark(c: &mut Criterion) {
c.bench_function("fib", |b| {
b.iter(|| fibonacci(black_box(20)))
});
}
criterion_group!(benches, benchmark);
criterion_main!(benches);Profiling
cargo install flamegraph
cargo flamegraph --bin my-appOptimization Patterns
Avoid Allocations
// ❌ Allocates each iteration
for s in strings {
result = result + &s;
}
// ✅ Pre-allocate
let mut result = String::with_capacity(total_len);
for s in strings {
result.push_str(&s);
}Use Iterators
// ❌ Intermediate collection
let v: Vec<_> = data.iter().map(|x| x * 2).collect();
let sum: i32 = v.iter().sum();
// ✅ Lazy chain
let sum: i32 = data.iter().map(|x| x * 2).sum();Cow for Optional Clone
use std::borrow::Cow;
fn process(input: &str) -> Cow<str> {
if input.contains("bad") {
Cow::Owned(input.replace("bad", "good"))
} else {
Cow::Borrowed(input)
}
}Release Profile
[profile.release]
lto = true
codegen-units = 1
opt-level = 3Troubleshooting
| Problem | Solution |
|---|---|
| Slow debug | Use --release |
| Memory spikes | Use streaming |
| Cache misses | Improve data layout |