開始使用虛擬化功能

不太可能實現。

可用的硬體

虛擬化功能適用於啟用 VMX 的 Intel 裝置,以及啟動進入 EL2 的 ARMv8.0 以上版本裝置。AMD CPU 支援虛擬化 (b/467349022)。下列硬體將提供最佳可用性:

  • Pixelbook Go m3
  • Intel NUC7 (NUC7i5DNHE)

您也可以使用下列硬體,但這些硬體較容易發生故障:

  • x64 QEMU/巢狀 VMX

啟用巢狀 VMX 後,使用 Fuchsia 模擬器時,部分虛擬化功能將可運作。請注意,在 Fuchsia 模擬器中執行時,任何訪客都無法使用 virtmagma 進行 Vulkan 加速。

可邀請的對象

雖然任意 Linux 客體都可以在 Fuchsia 上執行,但下列客體設定可直接使用:

  • Zircon Guest:可啟動至 Zircon virtcon 的極簡 Fuchsia 系統。
  • Debian Guest - Debian bullseye 客戶端。
  • Termina Guest:以 ChromeOS 的 Termina VM 為基礎,提供 Vulkan 和視窗管理員整合的其他功能。

透過虛擬化建構 Fuchsia

每個客層作業系統都有一個客層管理員和核心分片,必須納入建構作業。

首先,在 Fuchsia 結帳中建立 //local/BUILD.gn 檔案,啟用虛擬化功能。在該檔案中,新增組件覆寫,以啟用虛擬化:

assembly_developer_overrides("enable_virtualization") {
  platform = {
    virtualization = {
      enabled = true
    }
  }
}

接著,請為所需訪客設定建構作業。PRODUCT 通常為 core,而 BOARD 通常是 x64chromebook-x64sherlock

所有邀請對象

fx set PRODUCT.BOARD --assembly-override=//local:enable_virtualization --with //src/virtualization/bundles:all_guests

Debian Guest

fx set PRODUCT.BOARD --assembly-override=//local:enable_virtualization --with //src/virtualization/bundles:debian

Zircon Guest

fx set PRODUCT.BOARD --assembly-override=//local:enable_virtualization --with //src/virtualization/bundles:zircon

Termina Guest

fx set PRODUCT.BOARD --assembly-override=//local:enable_virtualization --with //src/virtualization/bundles:termina

最後,建構 Fuchsia:

fx build

透過 CLI 啟動 Guest

您可以使用 guest CLI 工具啟動訪客。這項工具會啟動訪客,然後透過 stdio 提供 virtio-console 的存取權。

設定主機

如果您是直接在專用硬體 (例如 Sherlock) 上執行 Fuchsia,就不需要進行主機設定。不過,大多數 Google 員工都會想透過主機工作站上的 QEMU 執行。在這個用途中,您需要使用下列指令,檢查是否已啟用巢狀虛擬化:

cat /sys/module/kvm_intel/parameters/nested

輸出內容為 Y 表示已啟用巢狀虛擬化,0N 則表示未啟用。

如有需要,您可以啟用巢狀虛擬化功能,直到下次重新啟動為止:

modprobe -r kvm_intel
modprobe kvm_intel nested=1

或者,您也可以在 /etc/modprobe.d/kvm.conf 中新增 options kvm_intel nested=1,讓變更永久生效。

啟動 QEMU

設定主機後,即可啟動 Fuchsia 模擬器:

ffx emu start

啟動 Debian Guest:

(fuchsia) $ guest launch debian
Starting Debian
$ uname -a Linux machina-guest 5.10.0-13-amd64 #1 SMP Debian 5.10.106-1 (2022-03-17) x86_64 GNU/Linux

啟動 Zircon Guest

(fuchsia) $ guest launch zircon
Starting zircon
physboot: {{{reset}}}
physboot: {{{module:0:physboot:elf:9f2c4d6615bd603d}}}
physboot: {{{mmap:0x100000:0x14a100:load:0:rwx:0x0}}}
physboot: | Physical memory range                    | Size    | Type
physboot: | [0x0000000000008000, 0x0000000000080000) |    480K | free RAM
physboot: | [0x0000000000100000, 0x00000000001cd000) |    820K | phys kernel image
physboot: | [0x00000000001cd000, 0x000000000024a000) |    500K | free RAM
physboot: | [0x000000000024a000, 0x000000000024a100) |    256B | phys kernel image
physboot: | [0x000000000024a100, 0x000000000024b000) |   3840B | free RAM
…

啟動 Termina Guest

(fuchsia) $ guest launch termina
Starting Termina
…

在搭載 UI Stack 的產品上,debian 和 zircon 客戶端也會建立視窗,顯示由 virtio-gpu 驅動的虛擬 framebuffer。系統也會將該視窗的輸入內容以虛擬鍵盤的形式傳送給來賓。

整合測試

Machina 具有一組整合測試,可啟動 Zircon 和 Debian 客戶端,測試 VMM、管理程序和每個 virtio 裝置。如要執行測試,請先將測試新增至建構作業:

`fx set PRODUCT.BOARD --with //src/virtualization:tests`
fx build

然後執行下列任一測試:

# Tests of the low level hypervisor syscalls:
$ fx test hypervisor_tests

# Basic tests that verify OS boot and basic functionality:
$ fx test virtualization-core-tests

# Test suites focused on specific devices:
$ fx test virtualization-block-tests
$ fx test virtualization-net-tests
$ fx test virtualization-sound-tests
$ fx test virtualization-vsock-tests
$ fx test virtualization-gpu-tests
$ fx test virtualization-input-tests