RFC-0249:平台中的 crosvm 支援

RFC-0249:平台中的 crosvm 支援
狀態已接受
領域
  • 管理事宜
說明

此 RFC 提倡 crosvm 是 qemu 和 femu 等 fuchsia 平台支援的首選模擬器。

問題
更小鳥
作者
審查人員
提交日期 (年月分)2024-04-24
審查日期 (年-月-日)2024-05-31

摘要

本文件提議將 crosvm 新增為 Fuchsia 專案的支援的系統設定。這可讓我們持續在 crosvm 上測試 Fauchsia,並編寫我們的承諾,讓 crosvm 在 ToT 持續運作。

提振精神

根據官方說明文件,crosvm 是類似於 QEMU-KVM 或 VirtualBox 的託管 (a.k.a. type-2) 虛擬機器監視器。它支援多種架構,包括 x86_64 和 arm64,以及用於硬體加速的多個後端,包括 Linux KVM。

有些 Fuchsia 使用者已在 crosvm 模擬器中使用 Fuchsia,我們預期未來會有更多使用者。支援 crosvm 支援讓我們能夠針對這些硬體的 crosvm 實作測試一些驅動程式。雖然針對各種虛擬化裝置的各種實作方式,我們已支援 QEMU、FEMU、machina 和 GCE,但這些模擬器環境的任何實作項目和軟體各有一定程度的支援,並無法確保其他模擬器環境能正常運作。為確保不會對 crosvm 的使用者造成破壞,我們需要在 Fuchsia 的測試基礎架構中啟用 Fuchsia 對 crosvm 的自動測試。

也有部分裝置可使用 crosvm 支援我們尚未支援的其他模擬環境。

此外,我們也必須讓驅動程式庫開發人員能夠更輕鬆地編寫及維護在 crosvm 型環境中使用的驅動程式。目前,您必須在樹狀產品導向環境中執行 Fuchsia。這個方法不會擴大應用。

最後,任何現有的硬體目標都不支援某些技術,例如 x86 適用的 64 位元 Linux 啟動通訊協定。因此,我們尚未實作支援這類支援功能的 Linux 啟動輔助程式,因為其還無法進行測試。

相關人員

講師:

neelsa@google.com

審查者:

  • cja@google.com
  • jamesr@google.com
  • mcgrathr@google.com
  • olivernewman@google.com
  • wittrock@google.com

諮詢時間:

列出應查看 RFC,但不一定要經過核准的使用者。

  • cpu@google.com
  • costan@google.com
  • diserovich@google.com
  • wilkinsonclay@google.com

社會化:

這個 RFC 已通過與 Engprod 團隊的設計審查,此外,在調查期間,所有主要利害關係人都已聯絡。

規定

  • 我們必須確保不會使用 crosvm 型模擬器的 Fuchsia 客戶。
  • 我們必須同時支援 x86_64 和 crosvm 中的 aarch64 架構。
    • 我們必須支援 x86_64 以及 aarch64 上的 64 位元 Linux 啟動通訊協定。
  • 我們必須支援 crosvm 的 Linux KVM 後端。其他後端則適用。
  • 驅動程式開發人員應該要能輕鬆地針對專為 crosvm 實作的驅動程式所編寫的硬體實作測試驅動程式。

設計

我們將為平台新增對 crosvm 的支援,方法是將其整合為預先建構的 CIPD,並新增對 ffx 啟動 crosvm 的支援功能,最後設定相關機器人,以在提交前和/或提交後執行。

實作

Bringup 和 64 位元 Linux 啟動輔助程式

為了針對 crosvm 啟動支援,我們必須先啟用 Fuchsia 在 crosvm 上啟動。crosvm 目前僅支援提供自訂系統啟動載入程式或 64 位元 Linux 啟動通訊協定。Fuchsia 目前支援 EFI 型系統啟動載入程式、多重啟動和 32 位元 Linux 啟動通訊協定。這組非相交的啟動選項會防止 Fuchsia 目前在 crosvm 上啟動。因此,如要支援 crosvm,第一步是針對 crosvm 執行啟動活動,並為 64 位元啟動通訊協定實作另一個啟動輔助程式。

值得注意的是,這個問題只會發生在 x86 上。Fuchsia 會在 aarch64 底下的 crosvm 上啟動。然而,由於 crosvm 預設僅支援硬體加速虛擬化,因此一般 Fuchsia 開發人員很難實際在 aarch64 下的 crosvm 上執行 Fuchsia。雖然我們已證明 crosvm 可以使用 arm64 Linux Boot shim 啟動 Fuchsia,但可能還需要執行其他作業,才能確保 Fuchsia 能繼續啟動。

除了啟動輔助程式的運作方式之外,可能還需要進行一些操作才能使相關儲存空間和網路驅動程式正常運作,以確保裝置能夠與 ffx 和基礎架構搭配使用。我們會在完成 Bootshim 工作之後取得這項工作,並將立即提供給 x86_64。我們可能會要求您提供 crosvm 團隊的支援,以便將其餘所有必要的修正程式整合在程式碼中。

crosvm 預建的滾輪

系統將設定新的建構工具,從上游 crosvm 存放區提取最新來源,在啟用相關功能的情況下進行建構,然後將最終構件上傳至 CIPD。

滾輪會負責更新整合存放區,確保未來的 jiri update 指令將傳送更新後的 crosvm 二進位檔。

ffx emu 支援將 crosvm 做為替代引擎

ffx emu start --engine 標記會新增另一個選項,使其能選擇 crosvm,而不是 qemu 或 femu。根據預設,ffx emu 向使用者顯示的一組特定裝置會對齊,盡可能接近 crosvm 的樹狀結構用途。由於 crosvm 有許多使用者,這表示我們可能需要支援多個裝置設定。

您可以加入選用的 fx crosvm 指令包裝函式來簡化這個工作流程,不過我們已在 fx run-boot-test --crosvm 中提供部分支援。

CI/CQ 建構工具

一旦平台能夠在 crosvm 上啟動 Fuchsia,我們就會引進建構工具,確保 crosvm 支援繼續正常運作。

基於我們的目的,minimal.x64 產品/主面板的組合會與 crosvm 搭配使用,因此我們不需要其他建構工具,因為可以重複使用與 qemu 相同的建構工具。

這些建構工具一開始會是 FYI 建構工具,但由於其具備穩定運作能力,我們可以將其更新為封鎖,就像建立新封鎖建構工具的一般程序。

無論這些建構工具是在 CI 或 CQ 中執行,且總共建立的建構工具數量不在本提案的涵蓋範圍內。

我們應額外嘗試取得 makeup.x64 建構工具,以便在 crosvm 上執行啟動測試,因為這樣可以盡量減少潛在開機時間錯誤的顯示區域。

測試

只有在 CI 和/或 CQ 中執行的測試僅限於下列用途:

  • 重新啟動及關閉測試
  • Zircon 核心測試
  • 裝置列舉測試,確保所有周邊硬體列舉正確。
  • 系統測試,確保週邊裝置驅動程式能正常運作。

值得注意的是,目前在 QEMU 上執行的密封測試不需要在 crosvm 上重複執行。

大致上,我們可以透過在測試上顯示的 test_specs 指定新環境,完成這個測試區隔。

重新啟動和關閉測試目前以主機測試的形式執行,且對 qemu 具有必須解決的硬性依附元件。此外,這些測試無法在 arm64 機器人上執行,因此我們仍需修正該問題,確保測試涵蓋範圍正確無誤。

新增額外周邊啟動

除了啟用 CI/CQ 機器人所需的裝置組合之外,我們也想新增更多周邊裝置,以便支援我們的客戶使用情境。這些週邊裝置的完整組合不在本提案的討論範圍內。以下列舉幾種可能導入的周邊裝置:

  • virtio-gpu
  • Virtio-balloon
  • cmos-rtc

效能

我們應確保在功能性方面,Fchsia 在 crosvm 上表現良好。如果啟動速度過慢,或是我們的 virtio 驅動程式在負載時佔用過多 CPU,我們仍需執行一些分析和最佳化工作,確保符合使用 crosvm 的客戶效能需求。

人體工學

這項提案可讓駕駛人更輕鬆地針對驅動程式目標的 crosvm 實作項目,更輕鬆地測試驅動程式。

回溯相容性

不適用。

安全性考量

不適用。

隱私權注意事項

不適用。

測試

這個提議的目的是為平台新增 crosvm 支援功能,並在 CI/CQ 中加入相關的自動化測試涵蓋範圍。

說明文件

應更新 ffx emu 的說明文件,以反映對 crosvm 引擎的最新支援。此外,您應為支援的模擬器建立新頁面,說明新找到的 crosvm 支援。

缺點、替代項目和未知

替代方法:不採取任何行動,並繼續使用現有模擬器做為支援的 Proxy

最簡單的方法是不做任何動作,依賴 qemu 和/或 femu 來確保我們的 virtio 驅動程式能繼續正常運作,並視需要在 crosvm 上手動測試。這個選項可讓我們不太確定 crosvm 支援不會破壞 OOT 使用者,但由於現有模擬器應將大部分行為做為 crosvm,導致服務中斷的可能性很低。

替代方法:嘗試取得 crosvm,改為正式支援 Fuchsia

其他作業系統不會妨礙 crosvm。crosvm 會將其行為與這些作業系統中的現有驅動程式進行比對,嘗試改為直接支援這些作業系統。我們可能向 crosvm 請願以相同方式支援 Fuchsia。但最終,Fuchsia 比其他主要作業系統要更小眾目標,因此實際說服 crosvm 要自己取得這類支援並不容易。

根據我們的廠商啟動韌體 (甚至是開放原始碼韌體,和 CrOS 深度充電) 的經驗,大致來說,要實作並維護 Fuchia 專屬的啟動支援並不容易。

另一個缺點,就是並未提供 crosvm 的 Linux 啟動支援,因為在多樣化的強硬開機情境中,我們現在可以測試並確保相容性。我們支援的其他 Linux/x86 和 Linux/arm64 啟動通訊協定的其他變體,會使未來使用具有庫存韌體的其他 Jamboard 更順暢且更接近立即可用的區域,而對於長期「一般 x86 電腦」案例而言,是過去以來最可能用於廣泛公開來源的新作業系統,更是如此。

不明

啟動新的模擬器時有許多未知數,包括需要花費的工程時間來偵錯及解決目前未發現的問題。發現錯誤時,核心、驅動程式或其他團隊可能需要進行先前未預算的額外工作,或者需要重新處理這些工作。如果發現錯誤,我們會優先處理相關的群組。

優先藝術與參考資料

不適用。