Rust Release Optimization: Small and Fast Binariesを作る方法
Emily Parker
Product Engineer · Leapcell

あなたはRustプロジェクトを書き終え、現在コンパイルに取り組んでいます。コンパイルされたファイルを可能な限り小さくするにはどうすればよいでしょうか? 可能な限り高速に実行するにはどうすればよいでしょうか? または、小さなサイズと高速性の両方を実現するにはどうすればよいでしょうか?
次のような考慮事項があるかもしれません。
- ファイルサイズの最小化: プロジェクトが小さく複雑ではなく、実行速度がすでに速い組み込み開発に適しています。主な目標は、ファイルサイズを可能な限り小さくすることです。
- 実行速度の最大化: ファイルサイズは気にせず、同時実行性を最大化することが最優先事項であるネットワークサービスに適しています。
- サイズと速度のバランス: さまざまな種類のプロジェクトに適した中間的な方法です。
Cargo.toml
ファイルに次の設定を追加して実行するだけです。
cargo b --release
設定例
より小さな実行ファイルを生成する
[profile.release] opt-level = "z" # 最小のコードサイズに最適化 lto = true # Link Time Optimization (LTO)を有効にする codegen-units = 1 # コード生成ユニットの数を減らし、最適化時間を増やしますが、バイナリサイズを削減します panic = "abort" # パニック処理に'unwind'の代わりに'abort'を使用する strip = "debuginfo" # デバッグ情報を削除する
より高速な実行ファイルを生成する
[profile.release] opt-level = 3 # 最大実行速度に最適化 lto = "fat" # 最も積極的なLink Time Optimizationを有効にする codegen-units = 1 # コード生成ユニットの数を減らし、最適化時間を増やしますが、パフォーマンスを向上させます panic = "abort" # パニック処理に'unwind'の代わりに'abort'を使用する
サイズと速度のバランスを取る
[profile.release] opt-level = "s" # 速度を考慮しながらサイズを最適化 lto = "fat" # 最も積極的なLink Time Optimizationを有効にする codegen-units = 1 # コード生成ユニットの数を減らし、最適化時間を増やしますが、パフォーマンスを向上させます panic = "abort" # パニック処理に'unwind'の代わりに'abort'を使用する strip = "symbols" # 必要なデバッグ情報を保持しながら、シンボル情報を削除する
設定の説明
opt-level
説明: コンパイラの最適化レベルを指定します。
可能な値:
0
: 最適化なし、最速コンパイル時間。1
: より高速なコンパイルのために最適化。2
: コンパイル速度とランタイムパフォーマンスのバランス(デフォルト)。3
: 最大ランタイムパフォーマンスに最適化。"s"
: より小さなコードサイズに最適化。"z"
: コードサイズをさらに最適化、"s"
よりも積極的に。
理由: 最小の実行ファイルを生成するには"z"
を使用し、最速の実行ファイルを生成するには3
を使用します。
lto
説明: Link Time Optimization (LTO)を有効にします。
可能な値:
false
: LTOを無効にする(デフォルト)。true
: LTOを有効にする。"thin"
: Thin LTOを有効にする。"fat"
: 最も積極的なLTOを有効にする。
理由: LTOを有効にすると、バイナリサイズが縮小され、ランタイムパフォーマンスが向上します。"thin"
は穏やかな選択肢ですが、"fat"
は最高の最適化を提供しますが、コンパイル時間が増加します。
codegen-units
説明: コード生成ユニットの数を制御します。
デフォルト値: 通常は16
です。1
に設定すると、最高のレベルの最適化が有効になります。
理由: コード生成ユニットの数を減らすと、コンパイラはグローバル最適化のためにより多くの情報を得ることができ、結果としてより小さく、より高速な実行ファイルが得られます。1
に設定すると、最適化が最大化されますが、コンパイル時間が増加します。
panic
説明: パニックの動作を制御します。
可能な値:
"unwind"
: スタックをアンワインドする(デフォルト)。"abort"
: プロセスを直接アボートする。
理由: "abort"
を使用すると、スタックアンワインド情報が不要になるため、実行可能ファイルのサイズが縮小され、パフォーマンスが向上する場合があります。
strip
説明: どのデバッグおよびシンボル情報を削除するかを制御します。
可能な値:
"none"
: すべての情報を保持する(デフォルト)。"debuginfo"
: デバッグ情報を削除する。"symbols"
: シンボルテーブルを削除しますが、必要なデバッグ情報を保持します。"all"
: デバッグデータとシンボルデータを含む、すべてのオプション情報を削除します。
理由: 不要なデバッグおよびシンボル情報を削除すると、実行可能ファイルのサイズが大幅に縮小されます。
まとめ
これらは、Rustプロジェクトをコンパイルするための最適化手法です。あなたはそれらをマスターしましたか?
私たちはLeapcellです。Rustプロジェクトのホスティングに最適です。
Leapcellは、Webホスティング、非同期タスク、Redisの次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発します。
無制限のプロジェクトを無料でデプロイ
- 使用量に対してのみ支払い—リクエストも料金もかかりません。
比類のないコスト効率
- アイドル料金なしの従量課金制。
- 例:25ドルで、平均応答時間60msで694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI / CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムメトリックとロギング。
簡単なスケーラビリティと高パフォーマンス
- 高い同時実行性を容易に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ—構築に集中するだけです。
ドキュメントで詳細をご覧ください!
Xでフォローしてください:@LeapcellHQ