pluginagentmarketplace

rust-performance

Master Rust performance - profiling, benchmarking, and optimization

pluginagentmarketplace 1 Updated 8mo ago

Resources

3
GitHub

Install

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 = false
use 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-app

Optimization 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 = 3

Troubleshooting

Problem Solution
Slow debug Use --release
Memory spikes Use streaming
Cache misses Improve data layout

Resources