開始使用虛擬化功能

支援的硬體

虛擬化功能適用於已啟用 VMX 的 Intel 裝置,以及 ARMv8.0 及以上版本 (啟動進入 EL2 的裝置)。下列硬體結合每日自動和手動測試,將可提供最佳支援:

  • Pixelbook Go m3
  • Intel NUC7 (NUC7i5DNHE)

下列硬體經常也會使用,但自動化測試涵蓋率不如預期。

  • x64 QEMU/巢狀 VMX

使用已啟用 VMX 的 Fuchsia 模擬器時,部分虛擬化功能可以正常運作。值得注意的是,在 Fuchsia 模擬器中執行時,任何訪客都無法使用 virtmagma 的 Vulkan 加速功能。

支援的邀請對象

雖然任意 Linux 訪客可在 Fuchsia 上執行,但下列訪客設定已在 Fuchsia 的 CI 中測試:

  • Zircon 訪客 - 可啟動 Zircon virtcon 的基本沙發系統。
  • Debian 訪客 - Debian bullseye 訪客。
  • Termina 訪客 - linux 訪客,包含 Vulkan 和視窗管理員整合的額外功能 (以 ChromeOS 的 Termina VM 為基礎)。

運用虛擬化功能打造 Fuchsia

每個訪客作業系統都有訪客管理員和核心資料分割,必須納入建構作業中。

在下方,PRODUCT 通常是 core 之一,而 BOARD 通常是 x64chromebook-x64sherlock 其中之一。

$ fx set PRODUCT.BOARD \
    # For Debian Guest
    --with //src/virtualization/bundles:debian \
    --args='core_realm_shards += [ "//src/virtualization/bundles:debian_core_shards" ]' \
    # For Zircon Guest
    --with //src/virtualization/bundles:zircon \
    --args='core_realm_shards += [ "//src/virtualization/bundles:zircon_core_shards" ]' \
    # For Termina Guest
    --with //src/virtualization/bundles:termina \
    --args='core_realm_shards += [ "//src/virtualization/bundles:termina_core_shards" ]'

或者,您也可以使用下列指令來啟用所有訪客:

$ fx set PRODUCT.BOARD \
    --with //src/virtualization/bundles:all_guests \
    --args='core_realm_shards += [ "//src/virtualization/bundles:all_core_shards" ]'

透過 CLI 啟動訪客

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

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

(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 技術的虛擬影格緩衝區。該視窗的輸入內容也會以虛擬鍵盤的形式傳送給訪客。

在 QEMU 上執行

在 x64 上執行 QEMU 訪客時需要 KVM。您可能也需要在主機上啟用巢狀 KVM。如要檢查是否已啟用巢狀虛擬化,請執行下列指令:

設定主機

cat /sys/module/kvm_intel/parameters/nested

Y 的輸出表示巢狀虛擬化已啟用,0N 表示未啟用。

如何在下次重新啟動前啟用巢狀虛擬化功能:

modprobe -r kvm_intel
modprobe kvm_intel nested=1

如要永久進行變更,請將下列程式碼新增至 /etc/modprobe.d/kvm.confoptions kvm_intel nested=1

啟動 QEMU

如果您已設定主機機器,可以啟動 Fuchsia 模擬器:

$ ffx emu start

整合測試

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