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. 01CPU のホットスポットの調査
  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. 何を優先しますか?

    • アルゴリズム(10~1000 倍の改善)
    • データ構造(2~10 倍)
    • アロケーション(2~5 倍)
    • キャッシュ(1.5~3 倍)
  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-*1 秒あたり何件のリクエストが必要ですか?
メモリの制約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-*

コメント