RFC-0144:大小檢查工具 | |
---|---|
狀態 | 已接受 |
領域 |
|
說明 | 提議重新編寫 size_checker.go,藉此在樹狀結構內和樹狀結構外的開發人員體驗中提供更一致的使用體驗。 |
問題 | |
毛皮變化 | |
作者 | |
審查人員 | |
提交日期 (年-月-日) | 2021-11-22 |
審查日期 (年-月-日) | 2021-12-10 |
摘要
本文件提議開發新的尺寸檢查工具 新增至 SDK 後,開發人員和產品擁有者就能確認 的套件和產品並未超過指定的大小預算。雖然 實作詳細資料遭到刻意排除,因為樹狀結構外組件 這項原則會持續改變基礎、設計需求及目標 會提及。
提振精神
在軟體開發期間,瞭解自己的軟體是否符合需求
在目標的大小限制內。Fuchsia 提供尺寸檢查工具
這個平台會分析不同軟體群組佔用的空間,並強制執行
預算。這項工具與實作詳情緊密結合
fuchsia.git
,因此必須fuchsia.git
結帳時無法使用。
因此,Chromium 這類 Fuchsia 的消費者
檢查軟體大小的臨時方法。透過重新編寫大小
把檢查工具當做 ffx 外掛程式,然後將其加進 Fuchsia SDK 中
強制要求 Fuchsia 軟體實施大小預算,
。
相關人員
誰會負責決定是否接受此 RFC。
講師:
- Hunter Freyer (hjfreyer@google.com)
審查者:
- Saman Sami (samans@google.com) - 功能
- Anthony Fadrianto (atyfto@google.com) - 整合基礎架構
- Sébastien Marchand (sebmarchand@google.com) - 整合 基礎設施
- Rohan Pavone (rohpavone@google.com) - 與 Chromium 整合
- Amit Uttamchandani (amituttam@google.com) - 整合至 ffx
諮詢:
- Aaron Wood (aaronwood@google.com) - 組件整合
社交功能:
在會議中討論過這項專案,做為內部文件的溝通交流 預先和相關人員溝通交流已掌握需求 是在草擬的 RFC 參照版本
背景
此 RFC 假設您對下列主題有充分的瞭解。
兩種尺寸檢查方法
大小檢查可分成兩種類別:
- 映像檔在刷新時不會超過目標分區大小。
- 更新期間,Blob 符合 FVM 預算限制。
刷新:開發人員可將新圖片刷新至 Fuchsia 目標中。如果 新的映像檔更新時,分區的內容完全由 新圖片的位元組。為確保 Flash 成功,新圖片不得 大於分區大小
更新中:Fchsia 目標可以進行無線更新更新。為了確保 成功更新時,blob 耗用的空間總量不得超過 投入 FVM 預算FVM 中的空間通常會預留給 UpdatePackage 和其他 blob,表示工具 不能只是填滿 FVM,然後檢查最終圖像是否
目前的工具
Fuchsia 提供兩種協助檢查尺寸的工具:
- size_checker.go
- blobfs-compression
size_checker.go
這項工具可在樹狀結構內 (位於 fuchsia.git
內) 使用,確保 blob 適合
他們的預算。size_checker.go
會判斷
Fuchsia 存放區中 blob 目錄的對齊大小。預算
定義個別產品,但目前並未用於
fuchsia.git
。因為它會檢查 fuchsia.git
中的目錄,
工具無法在沒有 fuchsia.git
結帳的情況下使用。
首先,Fchsia 版本會產生列出壓縮過的 blobs.json
檔案。
blobfs 中每個 blob 的大小,且一致,以及列出含有該 blob 的 blob.manifest
檔案
這些 blob 的懸浮微粒和來源路徑。
接著,系統會執行 size_checker.go
,並執行下列操作:
- 讀取
blobs.json
以收集每個 blob 的壓縮大小:compressed_size
。 - 讀取
blob.manifest
以收集所有套件。 - 計算 blob 包含在套件中的次數:
share_count
。 - 計算每個 blob 的共用大小:
shared_size = compressed_size / share_count
。由於多筆預算可能包含同一個 blob blob 的shared_size
,可將大小耗用量平均分配到 預算。 - 建構一個 N 元加總樹,代表每 1 秒
將每個 blob 的
shared_size
新增至 建立於 blob 路徑中的節點 - 反覆查看每筆預算,斷言其上列的預算 目錄大於耗用的空間。
- 疊代預算中每個非 blobf 套件,並使用
blobfs-compression
:計算 blob 大小和斷言的總和 支出在預算內 - 列印結果。
blobfs-compression
這個工具可以預估一組 blob 的壓縮及對齊大小,但 並非 100% 準確,而且偶爾會高估 blob 的大小。 工具絕對不會低估 blob 的大小。
blobfs-compression
是透過 Fuchsia SDK 放送給用戶端,
目前,若要評估為 Fuchsia 建立的程式碼大小
不存在於 fuchsia.git
之外。Chromium 是這項工具的用戶端。
目前工具的問題
- In-ree 和 Out-Of-Tree 檢查套件大小的方法不同 工具。
- 這兩項工具都無法直接檢查圖片大小,藉此確保圖片閃爍 成功。
size_checker.go
- 未載明。
- 取決於 Fuchsia 版本的實作詳細資料, 以及穩定的合約
- 無法在樹狀結構外運作。
blobfs-compression
- 不保證會傳回正確的 blob 壓縮大小。
- 操作在 blob 層級,這比程式碼語言小 套件層級開發人員為個別套件的產品新增軟體 。
- 沒有標準輸出格式,所以不容易 容易編寫和自動使用功能並不容易
需求條件
- 在 SDK 中,提供能同時支援 Tree 和 Out-Of-Tree 的工具或工具。
- 這項工具可滿足目前工具所有需要的用途。
- 該工具可以執行兩種大小檢查:
- (a) 圖片
- (b) 套件中的 Blob
- 如果遇到 (2) 問題,blob 會簡化所有集合中所有套件的重複資料 執行 Pod
- 超過使用者指定的預算時,工具會傳回失敗。
- 這項工具可完美搭配其他 SDK 工具(例如 Image) 使用 組合器 (RFC-0072)。
- 這些工具可用於指令碼,並提供可剖析的輸出內容 會產生 Gerrit Size 外掛程式使用的輸出內容。
- 工具的用法和架構會在 fuchsia.dev 中記錄。
設計
一致的開發人員體驗
系統會在 Rust 中編寫新的 ffx
外掛程式,用於執行兩種大小
檢查。建議您將其整合至 ffx
,如以下程式碼所示:
CLI 評分量表有助於促進共同的工作流程,並提高
曝光度。此外,系統會優先選擇展開現有檔案
不必開發新的格式
可編寫指令碼
此工具主要用於建構系統,所以輸出內容應 可供剖析輸出格式可能會使用 json5 做為輸出格式,但 隨著組裝專案進展,我們也可能會考慮替代格式。
圖片大小
圖片大小檢查工具應與建構
flash 資訊清單,組合後的圖片會對應至分區。目前,
您可以在 Fuchsia 建構系統中建立 Flash 資訊清單,因此 ffx
外掛程式
會透過 GN 動作叫用日後,我們可能會提供 SDK 工具
建構 Flash 資訊清單以及大小檢查工具 ffx
外掛程式
在啟用的情況下
系統應能流暢地運作
只需開啟檔案並讀取 長度。這適用於任何未壓縮或 稀疏。這個方法無法正常運作的例子是稀疏的 FVM。 因為目前沒有能計算 sparse FVM,工具會忽略稀疏 FVM 的大小檢查。
檔案包大小
Blob 和套件大小檢查應與 Assembly 緊密整合,因為 在組裝期間,工程師會將各種套件組合成集合組 或是設定不同的產品
大小檢查工具會使用 blobs.json
檔案,列出經過壓縮和對齊的檔案
每個 blob 的尺寸開發人員可以提供多個 blobs.json
檔案做為
輸入到工具中如果在任何提供的 blobs.json
中找不到套件的 blob
檔案,那麼大小檢查工具就會為所有
缺少的 blob,而使用 blobfs
工具,可在產生
blobs.json
。大小檢查工具會讀取產生的 blobs.json
缺少 blob 的大小
與現有的 size_checker.go
工具類似,新的大小檢查工具
計算每個 blob 的共用大小,方法是將大小除以
使用該 blob 的套件。這個共用大小會用於設定預算。
實作
此工具的導入和整合將在多個步驟中完成 階段。
- 宣告套件組合的預算。詳情請參閱 解釋。
- 編寫 ffx 外掛程式,確保套件組合的預算未超出預算
- 確認 ffx 外掛程式的輸出內容與先前工具的輸出內容相符 做為建構系統的一部分如果輸出結果不同 應該就會失敗請參閱下方說明。
- 宣告圖片的預算
- 添加功能,確保圖片大小不超過預算
- 停用
size_checker.go
並設定新的 ffx 外掛程式載入方位 - 刪除
size_checker.go
程式碼。
產生預算檔案
為避免耗費心力維護兩組相同預算,
建構系統將更新建構系統,讀取現有的
size_limits.json
並組合產品設定,然後產生
新預算檔案。系統會剖析產品設定,收集每個套件
資訊清單就會根據其目錄分門別類
已在「size_limits.json
」中設定預算。
可能的預算檔案格式如下:
[
{
name: "name-of-package-set",
packages: [
"path/to/manifest1.json",
"path/to/manifest2.json",
],
budget_bytes: 12000,
},
]
新的大小檢查工具為建構作業載入負載後, 系統會將預算檔案檢查到存放區,產生的程式碼 已刪除。
輸出內容比較
轉換至新的大小檢查工具期間,建構系統會宣告
新工具的輸出結果與新工具相符。指令碼則是
這項工具旨在剖析這兩項工具的輸出結果,並確保預算和
用來計算每個套件群組 (或目錄) 的使用量。於
以便連結這兩種輸出格式,指令碼會假設名稱
會發現相同的套件組合由於舊版工具和
新工具使用的是相同的基礎機制來計算
blob (使用 blobfs
),計算的耗用量也會相同。
成效
大小檢查工具適用於建構系統 提高效能的容忍度高於網路堆疊等。 另一方面,縮短建構時間有助於提升開發人員工作效率。 此外,此工具是建構的關鍵路徑,因為必須 等待所有套件建構完成,並先組合圖片後再進行組合 就無法平行處理
目前的 size_checker.go
工具需要大約 1 到 2 秒才能執行,且
新工具的目標
人體工學
請參閱設計一節。
回溯相容性
這項設計不需要回溯相容。
安全性考量
這項設計不會對安全性造成影響。
隱私權注意事項
這項設計不會對隱私權造成任何影響。
測試
在 Fuchsia 版本中,全新尺寸檢查工具也會以下列方式執行:
size_checker.go
並比較輸出結果,確保兩者俱有
相同預算及計算空間使用量
單元測試也會隨著功能新增至工具而編寫。
說明文件
說明文件將新增至 fuchsia.dev。
缺點、替代方案和未知
有幾種不理想的替代做法。
不採取任何行動:這樣用戶端就必須自行建立專屬方法, 完成大小檢查,這並不會導致客戶數量增加。
重構現有工具:size_checker.go
可重構為
支援的樹狀結構外結構式服務。根據 CLI 評分量表,偏好設定
就是在 ffx
中加入公用工具,藉此促進共用工作流程,
更容易被發現此外,重構現有程式碼所需的變更
大幅降低重新編寫這項工具所需的工作量。
使用 blobfs-compression:為計算壓縮及對齊值
如果每個 blob 的大小,則可使用 blobfs-compression
工具 (而非
產生新的 blobf 映像檔。這個替代方案的主要缺點是
blobfs-compression
工具不保證能正確壓縮或
對齊。具體來說,blobfs-compression
工具會假設非密集
隕石樹常造成的 blob 大小超過
現實。此外,blobfs-compression
工具只能測量一個 blob
而且使用起來可能較為繁複,而且速度可能比
只會執行一次 blobfs
工具產生 blobfs 映像檔將更加內嵌於
目前的size_checker.go
和準確性。
既有藝術品和參考資料
請參閱「背景」一節。