虚拟化使用入门

支持的硬件

启用了 VMX 且 ARMv8.0 和 启动到 EL2 的设备之上。以下硬件将具有最佳性能 提供的支持:

  • Pixelbook Go m3
  • Intel NUC7 (NUC7i5DNHE)

以下硬件也经常使用,但与 自动化测试覆盖范围

  • x64 QEMU/嵌套 VMX

将 Fuchsia 模拟器与 嵌套 VMX。值得注意的是,使用 virtmagma 的 Vulkan 加速 在 Fuchsia 模拟器中运行时可供任何客户机使用。

支持的邀请对象

虽然任意 Linux 客户机可以在 Fuchsia 上运行,但以下客户机 配置在 Fuchsia 的 CI 中进行测试:

  • Zircon Guest - 极简的紫红色系统,可启动到 Zircon Virtcon。
  • Debian Guest - Debian bullseye 访客。
  • Termina 客机 - 一种 Linux 客机,包含 Vulkan 和 窗口管理器集成(基于 Termina VM) 。

使用虚拟化构建 Fuchsia

每个客机操作系统都有一个客机管理器和一个核心碎片, 都必须包含在 build 中。

在下文中,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 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
…

在具有界面堆栈的产品上,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.conf: options kvm_intel nested=1

启动 QEMU

设置完主机后,您就可以启动 Fuchsia 模拟器了:

$ ffx emu start

集成测试

Machina 有一组集成测试,用于启动 Zircon 和 Debian 客户机 测试 VMM、Hypervisor 和每个 Virtio 设备。如需运行测试,请先 将它们添加到您的 build 中:

$ 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