開始使用虛擬化功能

可用的硬體

虛擬化功能適用於啟用 VMX 的 Intel 裝置,以及啟動至 EL2 的 ARMv8.0 以上裝置。下列硬體可提供最佳可用性:

  • Pixelbook Go m3
  • Intel NUC7 (NUC7i5DNHE)

以下硬體也適用,但較容易發生故障:

  • x64 QEMU/Nested VMX

在啟用巢狀 VMX 的情況下使用 Fuchsia 模擬器時,部分虛擬化功能會正常運作。值得注意的是,在 Fuchsia 模擬器中執行時,使用 virtmagma 的 Vulkan 加速功能將無法供任何訪客使用。

可入住房客

雖然任意的 Linux 訪客都能在 Fuchsia 上執行,但下列訪客設定可立即使用:

  • Zircon Guest:可開機至 Zircon virtcon 的極簡 Fuchsia 系統。
  • Debian 訪客 - Debian bullseye 訪客。
  • Termina 訪客 - 以 ChromeOS 的 Termina VM 為基礎,包含 Vulkan 和視窗管理員整合的額外功能的 Linux 訪客。

使用虛擬化功能建構 Fuchsia

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

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

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

接下來,請為所需訪客設定建構作業。PRODUCT 通常為 coreBOARD 通常為 x64chromebook-x64sherlock 之一。

所有嘉賓

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

Debian 訪客

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 訪客

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

最後,建構 Fuchsia:

fx build

透過 CLI 啟動訪客

您可以使用 guest CLI 工具啟動訪客。這項工具會啟動來賓,然後透過 stdio 提供對 virtio 主控台的存取權。

設定主機

如果您直接在專用硬體 (例如 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 Emulator:

ffx emu start

啟動 Debian 容器:

(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 訪客

(fuchsia) $ guest launch termina
Starting Termina
…

在具有 UI 堆疊的產品中,Debian 和 Zircon 的訪客也會建立顯示虛擬幀緩的視窗,該幀緩由 virtio-gpu 提供動力。該視窗的輸入內容也會以虛擬鍵盤的形式傳送給來賓。

整合測試

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