測量除鏽

上次更新日期:2019 年 9 月 3 日

用於分析 Fuchsia 中 Rust 程式二進位檔大小和組合的操作說明。範例 使用 //src/diagnostics/archivist 套件。

必要條件

貨物

這些操作說明涵蓋安裝及使用 cargo-bloat 這項 Rust 專案工具 靈感來自 Bloaty McBloatface

如何安裝:

cargo install cargo-bloat --features regex-filter [--force]

如果您安裝的是舊版本,或想將規則運算式篩選支援功能加入現有的現有版本 安裝,你可能需要新增 --force

法哥

這個範例使用 crates.io 的 Cargo 子指令,因此您必須安裝 Fargo

執行 fx build

如要瞭解將 建構引數中正確的二進位檔目標

接著,在 Fuchsia 來源目錄中執行 fx build

建立 Cargo.toml

按照操作說明為專案產生 Cargo.toml

使用 Fargo 建構

cargo-bloat 目前不支援傳送任意資訊清單路徑,您需要 cd 才能 產生含有產生的 Cargo.toml 的目錄:

cd $FUCHSIA_DIR/src/diagnostics/archivist

確保您能透過該目錄使用 Fargo 產生發布子版本:

fargo build --release

先從平原遠地執行發布子版本,因為 Cargo-bloat 會避免發生任何建構錯誤。

使用貨物燃料評估尺寸貢獻

我們確定該遠徵可以為目標產生發布二進位檔後,請執行 cargo-bloat:

fargo cargo bloat -- --release -n 5
Compiling ...
Analyzing .../src/../out/cargo_target/x86_64-unknown-fuchsia/release/archivist

 File  .text     Size              Crate Name
 1.7%   4.5%  38.0KiB              regex <regex::exec::ExecNoSync as regex::re_trait::Regular...
 1.0%   2.5%  21.4KiB       regex_syntax regex_syntax::ast::parse::ParserI<P>::parse_with_comments
 0.8%   2.1%  17.7KiB fuchsia_component? <fuchsia_component::server::ServiceFs<ServiceObjTy> as...
 0.4%   0.9%   8.0KiB              regex regex::re_unicode::Regex::shortest_match_at
 0.4%   0.9%   7.8KiB                std _ZN9libunwind10CFI_ParserINS_17LocalAddressSpaceEE17paI...
33.8%  89.0% 751.9KiB                    And 6152 smaller methods. Use -n N to show more.
38.0% 100.0% 844.8KiB                    .text section size, the file size is 2.2MiB

務必在發布時測量二進位檔大小,因為要預測 以及對偵錯版本所做的變更

-n 5 引數的輸出上限為 5 行。針對所有選項執行 cargo bloat --help,並 下文將說明幾種常用參數

按照 Crate 將函式分組

使用 --crates 旗標,依據來源 Crate 估計值將布料分析分組:

fargo cargo bloat -- --release -n 5 --crates
Compiling ...
Analyzing .../src/../out/cargo_target/x86_64-unknown-fuchsia/release/archivist

 File  .text     Size Crate
13.3%  34.9% 294.8KiB std
 6.3%  16.7% 141.0KiB regex
 5.0%  13.2% 111.3KiB regex_syntax
 2.1%   5.5%  46.1KiB fidl
 1.8%   4.7%  39.5KiB json5
 9.6%  25.1% 212.2KiB And 64 more crates. Use -n N to show more.
38.0% 100.0% 844.8KiB .text section size, the file size is 2.2MiB

Note: numbers above are a result of guesswork. They are not 100% correct and never will be.

將泛型函式歸因於原始 Crate 是一項容易出錯的啟發式分析與 請使用篩選器和精細輸出內容來細查,確認 crate 分組中是否有任何發現 輸出內容

篩選函式

如要深入瞭解特定 Crate 中承載的來源,您可以依來源 Crate 名稱篩選。 方法是使用 --filter 旗標,對函式名稱 (已啟用功能旗標) 執行規則運算式:

fargo cargo bloat -- --release -n 5 --filter regex_syntax
Compiling ...
Analyzing .../src/../out/cargo_target/x86_64-unknown-fuchsia/release/archivist

File .text     Size        Crate Name
1.0%  2.5%  21.4KiB regex_syntax regex_syntax::ast::parse::ParserI<P>::parse_with_comments
0.3%  0.8%   6.4KiB regex_syntax regex_syntax::ast::parse::ParserI<P>::parse_escape
0.2%  0.5%   3.8KiB regex_syntax <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast...
0.1%  0.2%   1.8KiB regex_syntax <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast...
0.1%  0.2%   1.7KiB regex_syntax regex_syntax::unicode::class
3.4%  9.0%  76.2KiB              And 698 smaller methods. Use -n N to show more.
5.0% 13.2% 111.2KiB              filtered data size, the file size is 2.2MiB