performance analysis and optimization
10
总安装量
0
周安装量
#28875
全站排名
安装命令
npx skills add https://github.com/shunsukehayashi/miyabi-claude-plugins --skill Performance Analysis and Optimization
Skill 文档
â¡ Performance Analysis and Optimization
Version: 2.0.0 Last Updated: 2025-11-22 Priority: âââ (P2 Level) Purpose: Rustã¢ããªã±ã¼ã·ã§ã³ã®ããã©ã¼ãã³ã¹åæã¨æé©å
ð æ¦è¦
CPUãããã¡ã¤ãªã³ã°ããã³ããã¼ã¯ãã¡ã¢ãªåæãéãã ããã©ã¼ãã³ã¹åé¡ã®ç¹å®ã¨æé©åãæä¾ãã¾ãã
ð¯ P0: å¼ã³åºãããªã¬ã¼
| ããªã¬ã¼ | ä¾ |
|---|---|
| é ã | “this is slow” |
| ã¡ã¢ãªä½¿ç¨ | “why is memory usage so high?” |
| æé©å | “optimize this function” |
| ãããã¡ã¤ãªã³ã° | “profile this code” |
| ãã³ããã¼ã¯ | “benchmark performance” |
ð§ P1: åæãã¼ã«ä¸è¦§
ãã¼ã«åªå é ä½
| ãã¼ã« | ç¨é | 対象 | ã³ãã³ã |
|---|---|---|---|
criterion |
ãã³ããã¼ã¯ | 颿° | cargo bench |
flamegraph |
CPUãããã¡ã¤ã« | ããã»ã¹ | cargo flamegraph |
perf |
詳細ãããã¡ã¤ã« | Linux | perf record |
valgrind |
ã¡ã¢ãª | ãã¼ã | valgrind --tool=massif |
heaptrack |
ãã¼ã追跡 | å²ãå½ã¦ | heaptrack ./binary |
cargo-bloat |
ãã¤ããªãµã¤ãº | ãµã¤ãº | cargo bloat |
tokio-console |
éåæ | ã¿ã¹ã¯ | tokio-console |
ð P2: åæãã¿ã¼ã³
Pattern 1: ãã³ããã¼ã¯ï¼criterionï¼
// benches/my_benchmark.rs
use criterion::{black_box, criterion_group, criterion_main, Criterion};
fn bench_function(c: &mut Criterion) {
c.bench_function("my_function", |b| {
b.iter(|| my_function(black_box(input)))
});
}
criterion_group!(benches, bench_function);
criterion_main!(benches);
cargo bench
Pattern 2: Flamegraph
# ãã¬ã¼ã ã°ã©ãçæ
cargo flamegraph --bin miyabi -- --issue 270
# åºå: flamegraph.svg
Pattern 3: ã¡ã¢ãªãããã¡ã¤ã«
# valgrind massif
valgrind --tool=massif ./target/release/miyabi
ms_print massif.out.*
# heaptrackï¼æ¨å¥¨ï¼
heaptrack ./target/release/miyabi
heaptrack_gui heaptrack.miyabi.*
Pattern 4: ãã¤ããªãµã¤ãºåæ
# ãµã¤ãºåæ
cargo bloat --release --crates
# ã·ã³ãã«å¥
cargo bloat --release -n 20
â¡ P3: æé©åæ¦ç¥
æé©ååªå é ä½
| åªå 度 | æ¦ç¥ | 广 | é£æåº¦ |
|---|---|---|---|
| 1 | ã¢ã«ã´ãªãºã æ¹å | é« | ä¸ |
| 2 | ãã¼ã¿æ§é 夿´ | é« | ä¸ |
| 3 | ã¡ã¢ãªå²ãå½ã¦åæ¸ | ä¸ | ä½ |
| 4 | 並åå | ä¸ | é« |
| 5 | ãã£ãã·ã¥æ´»ç¨ | ä¸ | ä¸ |
| 6 | SIMD/ä½ã¬ãã« | ä½ | é« |
ããããæé©å
// â æ¯åallocate
for item in items {
let s = item.to_string();
// ...
}
// â
äºåallocate
let mut buf = String::with_capacity(1024);
for item in items {
buf.clear();
write!(&mut buf, "{}", item).unwrap();
// ...
}
// â Cloneå¤ç¨
fn process(data: Vec<T>) -> Vec<T> {
data.clone()
}
// â
åç
§ã§æ¸¡ã
fn process(data: &[T]) -> Vec<T> {
// ...
}
ð ããã©ã¼ãã³ã¹ç®æ¨
| ã¡ããªã¯ã¹ | ç®æ¨ | æ¸¬å®æ¹æ³ |
|---|---|---|
| ãã«ãæé | <5å | CIè¨æ¸¬ |
| ãã¹ãæé | <2å | cargo test |
| ãã¤ããªãµã¤ãº | <50MB | cargo bloat |
| ã¡ã¢ãªä½¿ç¨é | <500MB | runtimeè¨æ¸¬ |
ð¡ï¸ 注æäºé
ãªãªã¼ã¹ãã«ãã§æ¸¬å®
# â ãããã°ãã«ãï¼é
ãï¼
cargo run
# â
ãªãªã¼ã¹ãã«ã
cargo run --release
PGOï¼Profile-Guided Optimizationï¼
# Step 1: ã¤ã³ã¹ãã«ã¡ã³ã
RUSTFLAGS="-Cprofile-generate=/tmp/pgo" cargo build --release
# Step 2: ãããã¡ã¤ã«åé
./target/release/miyabi [typical workload]
# Step 3: æé©åãã«ã
llvm-profdata merge -o /tmp/pgo/merged.profdata /tmp/pgo
RUSTFLAGS="-Cprofile-use=/tmp/pgo/merged.profdata" cargo build --release
â æååºæº
| ãã§ãã¯é ç® | åºæº |
|---|---|
| ããã«ããã¯ç¹å® | ä¸ä½3ç®æ |
| ãã³ããã¼ã¯ | æ¹åå徿¯è¼ |
| ã¡ã¢ãªãªã¼ã¯ | ãªã |
| å帰ãã¹ã | ããã©ã¼ãã³ã¹ç¶æ |
ð é¢é£Skills
- Rust Development: ãã«ãæé©å
- Debugging: åé¡ç®æç¹å®
- Security Audit: ã»ãã¥ãªãã£ã¨ã®ãã¬ã¼ããªã