aarch64のKVMゲストで使用できるマシンタイプ
この記事はopenSUSE Advent Calendar 2024 5日目の記事です。
KVMを使用して仮想マシン(ゲスト)を作成する際、x86_64の場合は、マシンタイプは pc(i440fx)かq35 のどちらかです。
一方、arm・aarch64の場合非常にたくさんのマシンタイプが存在します。
KVMホスト上で利用可能なマシンタイプは以下コマンドで確認できます。
SUSE-RX2530M4:~ # qemu-system-aarch64 --machine ? | grep -v deprecated Supported machines are: ast1030-evb Aspeed AST1030 MiniBMC (Cortex-M4) ast2500-evb Aspeed AST2500 EVB (ARM1176) ast2600-evb Aspeed AST2600 EVB (Cortex-A7) ast2700-evb Aspeed AST2700 EVB (Cortex-A35) b-l475e-iot01a B-L475E-IOT01A Discovery Kit (Cortex-M4) bletchley-bmc Facebook Bletchley BMC (Cortex-A7) bpim2u Bananapi M2U (Cortex-A7) canon-a1100 Canon PowerShot A1100 IS (ARM946) collie Sharp SL-5500 (Collie) PDA (SA-1110) cubieboard cubietech cubieboard (Cortex-A8) emcraft-sf2 SmartFusion2 SOM kit from Emcraft (M2S010) fby35-bmc Facebook fby35 BMC (Cortex-A7) fby35 Meta Platforms fby35 fp5280g2-bmc Inspur FP5280G2 BMC (ARM1176) fuji-bmc Facebook Fuji BMC (Cortex-A7) g220a-bmc Bytedance G220A BMC (ARM1176) highbank Calxeda Highbank (ECX-1000) imx25-pdk ARM i.MX25 PDK board (ARM926) integratorcp ARM Integrator/CP (ARM926EJ-S) kudo-bmc Kudo BMC (Cortex-A9) kzm ARM KZM Emulation Baseboard (ARM1136) lm3s6965evb Stellaris LM3S6965EVB (Cortex-M3) lm3s811evb Stellaris LM3S811EVB (Cortex-M3) mcimx6ul-evk Freescale i.MX6UL Evaluation Kit (Cortex-A7) mcimx7d-sabre Freescale i.MX7 DUAL SABRE (Cortex-A7) microbit BBC micro:bit (Cortex-M0) midway Calxeda Midway (ECX-2000) mori-bmc Mori BMC (Cortex-A9) mps2-an385 ARM MPS2 with AN385 FPGA image for Cortex-M3 mps2-an386 ARM MPS2 with AN386 FPGA image for Cortex-M4 mps2-an500 ARM MPS2 with AN500 FPGA image for Cortex-M7 mps2-an505 ARM MPS2 with AN505 FPGA image for Cortex-M33 mps2-an511 ARM MPS2 with AN511 DesignStart FPGA image for Cortex-M3 mps2-an521 ARM MPS2 with AN521 FPGA image for dual Cortex-M33 mps3-an524 ARM MPS3 with AN524 FPGA image for dual Cortex-M33 mps3-an536 ARM MPS3 with AN536 FPGA image for Cortex-R52 mps3-an547 ARM MPS3 with AN547 FPGA image for Cortex-M55 musca-a ARM Musca-A board (dual Cortex-M33) musca-b1 ARM Musca-B1 board (dual Cortex-M33) musicpal Marvell 88w8618 / MusicPal (ARM926EJ-S) netduino2 Netduino 2 Machine (Cortex-M3) netduinoplus2 Netduino Plus 2 Machine (Cortex-M4) none empty machine npcm750-evb Nuvoton NPCM750 Evaluation Board (Cortex-A9) nuri Samsung NURI board (Exynos4210) olimex-stm32-h405 Olimex STM32-H405 (Cortex-M4) orangepi-pc Orange Pi PC (Cortex-A7) palmetto-bmc OpenPOWER Palmetto BMC (ARM926EJ-S) qcom-dc-scm-v1-bmc Qualcomm DC-SCM V1 BMC (Cortex A7) qcom-firework-bmc Qualcomm DC-SCM V1/Firework BMC (Cortex A7) quanta-gbs-bmc Quanta GBS (Cortex-A9) quanta-gsj Quanta GSJ (Cortex-A9) quanta-q71l-bmc Quanta-Q71l BMC (ARM926EJ-S) rainier-bmc IBM Rainier BMC (Cortex-A7) raspi0 Raspberry Pi Zero (revision 1.2) raspi1ap Raspberry Pi A+ (revision 1.1) raspi2b Raspberry Pi 2B (revision 1.1) raspi3ap Raspberry Pi 3A+ (revision 1.0) raspi3b Raspberry Pi 3B (revision 1.2) raspi4b Raspberry Pi 4B (revision 1.5) realview-eb ARM RealView Emulation Baseboard (ARM926EJ-S) realview-eb-mpcore ARM RealView Emulation Baseboard (ARM11MPCore) realview-pb-a8 ARM RealView Platform Baseboard for Cortex-A8 realview-pbx-a9 ARM RealView Platform Baseboard Explore for Cortex-A9 romulus-bmc OpenPOWER Romulus BMC (ARM1176) sabrelite Freescale i.MX6 Quad SABRE Lite Board (Cortex-A9) sbsa-ref QEMU 'SBSA Reference' ARM Virtual Machine smdkc210 Samsung SMDKC210 board (Exynos4210) sonorapass-bmc OCP SonoraPass BMC (ARM1176) stm32vldiscovery ST STM32VLDISCOVERY (Cortex-M3) supermicro-x11spi-bmc Supermicro X11 SPI BMC (ARM1176) supermicrox11-bmc Supermicro X11 BMC (ARM926EJ-S) sx1 Siemens SX1 (OMAP310) V2 sx1-v1 Siemens SX1 (OMAP310) V1 tiogapass-bmc Facebook Tiogapass BMC (ARM1176) versatileab ARM Versatile/AB (ARM926EJ-S) versatilepb ARM Versatile/PB (ARM926EJ-S) vexpress-a15 ARM Versatile Express for Cortex-A15 vexpress-a9 ARM Versatile Express for Cortex-A9 virt-6.2 QEMU 6.2 ARM Virtual Machine virt-7.0 QEMU 7.0 ARM Virtual Machine virt-7.1 QEMU 7.1 ARM Virtual Machine virt-7.2 QEMU 7.2 ARM Virtual Machine virt-8.0 QEMU 8.0 ARM Virtual Machine virt-8.1 QEMU 8.1 ARM Virtual Machine virt-8.2 QEMU 8.2 ARM Virtual Machine virt-9.0 QEMU 9.0 ARM Virtual Machine virt QEMU 9.1 ARM Virtual Machine (alias of virt-9.1) virt-9.1 QEMU 9.1 ARM Virtual Machine witherspoon-bmc OpenPOWER Witherspoon BMC (ARM1176) xilinx-zynq-a9 Xilinx Zynq Platform Baseboard for Cortex-A9 xlnx-versal-virt Xilinx Versal Virtual development board xlnx-zcu102 Xilinx ZynqMP ZCU102 board with 4xA53s and 2xR5Fs based on the value of smp yosemitev2-bmc Facebook YosemiteV2 BMC (ARM1176) SUSE-RX2530M4:~ #
各マシンタイプの概要はこちらから。
www.qemu.org
この中にはサーバー向けモデルや評価ボードのモデル、特定のプロダクト(PDAやカメラ)等、様々なモデルが存在します。
今回はaarch64アーキテクチャで汎用サーバーとして使用可能な virt と sbsa- ref マシンタイプを紹介します。
virt
x86のq35マシンタイプに近い構成をとるマシンタイプです。
aarch64アーキテクチャのKVMゲストを作成する場合、基本的には virtを使用することが多いかと思います。
実際 virtマシンタイプは 多くの準仮想化デバイスのサポートや多くのCPUが利用可能であるため、特にマシンタイプや仮想デバイスの制約がないのであれば
virtマシンタイプを選択することをお勧めします。
virtマシンタイプの特徴としては以下2つです。
1.多くの準仮想化デバイスが使用可能
virtマシンタイプでは、x86アーキテクチャのq35マシンタイプでおなじみの virtio NIC、virtio ビデオデバイスが使用可能です。
そのため、純粋にaarch64のゲストを使用する場合はパフォーマンスが一番高いです。
2.pcie-root-portを持つ
pcie-rootを持ち、pcie-root-portからPCI Express接続の仮想デバイスを接続するため、デバイスのホットスワップが可能です。
halni@virt01:~> sudo lspci -vt
-[0000:00]-+-00.0 Red Hat, Inc. QEMU PCIe Host bridge
+-01.0-[01-02]----00.0-[02]----01.0 Intel Corporation 82801I (ICH9 Family) HD Audio Controller
+-01.1-[03]----00.0 Red Hat, Inc. Virtio 1.0 network device
+-01.2-[04]----00.0 Red Hat, Inc. QEMU XHCI Host Controller
+-01.3-[05]----00.0 Red Hat, Inc. Virtio 1.0 SCSI
+-01.4-[06]----00.0 Red Hat, Inc. Virtio 1.0 console
+-01.5-[07]----00.0 Red Hat, Inc. Virtio 1.0 block device
+-01.6-[08]----00.0 Red Hat, Inc. Virtio 1.0 memory balloon
+-01.7-[09]----00.0 Red Hat, Inc. Virtio 1.0 RNG
+-02.0-[0a]----00.0 Red Hat, Inc. Virtio 1.0 GPU
+-02.1-[0b]--
+-02.2-[0c]--
+-02.3-[0d]--
+-02.4-[0e]--
+-02.5-[0f]--
\-02.6-[10]--
halni@virt01:~>
ゲスト内のdmidecodeは以下のような感じ。
halni@virt01:~> sudo dmidecode
~~~
Handle 0x0100, DMI type 1, 27 bytes
System Information
Manufacturer: QEMU
Product Name: QEMU Virtual Machine
Version: virt-8.2
Serial Number: Not Specified
UUID: 15da2487-336b-46d4-ad8e-ffbf8b004a03
Wake-up Type: Power Switch
SKU Number: Not Specified
Family: Not Specified
Handle 0x0300, DMI type 3, 22 bytes
Chassis Information
Manufacturer: QEMU
Type: Other
Lock: Not Present
Version: virt-8.2
Serial Number: Not Specified
Asset Tag: Not Specified
Boot-up State: Safe
Power Supply State: Safe
Thermal State: Safe
Security Status: Unknown
OEM Information: 0x00000000
Height: Unspecified
Number Of Power Cords: Unspecified
Contained Elements: 0
SKU Number: Not Specified
~~~
Handle 0x0403, DMI type 4, 48 bytes
Processor Information
Socket Designation: CPU 3
Type: Central Processor
Family: Other
Manufacturer: QEMU
ID: 00 00 00 00 00 00 00 00
Version: virt-8.2
Voltage: Unknown
External Clock: Unknown
Max Speed: 2000 MHz
Current Speed: 2000 MHz
Status: Populated, Enabled
Upgrade: Other
L1 Cache Handle: Not Provided
L2 Cache Handle: Not Provided
L3 Cache Handle: Not Provided
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
Core Count: 1
Core Enabled: 1
Thread Count: 1
Characteristics: None
Handle 0x1000, DMI type 16, 23 bytes
Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 4 GB
Error Information Handle: Not Provided
Number Of Devices: 1
Handle 0x1100, DMI type 17, 40 bytes
Memory Device
Array Handle: 0x1000
Error Information Handle: Not Provided
Total Width: Unknown
Data Width: Unknown
Size: 4 GB
Form Factor: DIMM
Set: None
Locator: DIMM 0
Bank Locator: Not Specified
Type: RAM
Type Detail: Other
Speed: Unknown
Manufacturer: QEMU
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
Rank: Unknown
Configured Memory Speed: Unknown
Minimum Voltage: Unknown
Maximum Voltage: Unknown
Configured Voltage: Unknown
Handle 0x1300, DMI type 19, 31 bytes
Memory Array Mapped Address
Starting Address: 0x00040000000
Ending Address: 0x0013FFFFFFF
Range Size: 4 GB
Physical Array Handle: 0x1000
Partition Width: 1
Handle 0x2000, DMI type 32, 11 bytes
System Boot Information
Status: No errors detected
Handle 0x0000, DMI type 0, 26 bytes
BIOS Information
Vendor: EDK II
Version: unknown
Release Date: 02/02/2022
Address: 0xE8000
Runtime Size: 96 kB
ROM Size: 64 kB
Characteristics:
BIOS characteristics not supported
Targeted content distribution is supported
UEFI is supported
System is a virtual machine
BIOS Revision: 0.0
Handle 0xFEFF, DMI type 127, 4 bytes
End Of Table
halni@virt01:~>
qemu-uefi-armパッケージ導入時に /usr/share/qemu/配下に展開される aarch64向けのUEFIファームウェアはすべて
virtマシンタイプ向けのものになります。
そのため、virtマシンタイプを使用する場合は x86_64のq35と同様、ゲスト作成時に自動で適切なファームウェア(とNVRAM)が
ゲストに設定されます。
SUSE-RX2530M4:/home/halni # ls /usr/share/qemu/ | grep aavmf
aavmf-aarch64-code.bin ★
aavmf-aarch64-ms-code.bin
aavmf-aarch64-ms-vars.bin
aavmf-aarch64-opensuse-code.bin
aavmf-aarch64-opensuse-vars.bin
aavmf-aarch64-suse-code.bin
aavmf-aarch64-suse-vars.bin
aavmf-aarch64-vars.bin ★
SUSE-RX2530M4:/home/halni # rpm -qf /usr/share/qemu/aavmf-aarch64-code.bin
qemu-uefi-aarch64-202308-150600.5.3.2.noarch
SUSE-RX2530M4:/home/halni #
SUSE-RX2530M4:/home/halni # virsh dumpxml virt2-arm-suse | xmllint --xpath //os -
<os firmware="efi">
<type arch="aarch64" machine="virt-8.2">hvm</type>
<firmware>
<feature enabled="no" name="enrolled-keys"/>
<feature enabled="no" name="secure-boot"/>
</firmware>
<loader readonly="yes" type="pflash">/usr/share/qemu/aavmf-aarch64-code.bin</loader> ★
<nvram template="/usr/share/qemu/aavmf-aarch64-vars.bin">/var/lib/libvirt/qemu/nvram/virt2-arm-suse_VARS.fd</nvram> ★
<boot dev="hd"/>
</os>
SUSE-RX2530M4:/home/halni #
virtマシンタイプ以外のマシンタイプを使用する場合、何らかの方法でファームウェア(とNVRAM)を調達する必要があります。
sbsa-ref
sbsa-refは、名前の通りSBSAモデルをエミュレートしたマシンタイプです。
SBSA とは Server Base System Architecture の略で、ARM サーバーのリファレンスとして各機能が策定されたものです。
そのため、sbsa-refマシンタイプではARMサーバーのリファレンスモデルに準じた動作をエミュレートすることができます。
先ほど "aarch64アーキテクチャのKVMゲストで必要なファームウェアとNVRAMはvirt以外各自で調達する必要がある" と記載しましたが、
sbsa-ref向けのファームウェアとNVRAMのバイナリはlinaroが公開しています。
https://artifacts.codelinaro.org/ui/native/linaro-419-sbsa-ref/
sbsa-refマシンタイプはArmv9 CPUにも対応しますが、Cortex A710はA710が使用するアドレス空間にマシン側が対応できておらず、現時点では使用できません。
そのため、Armv9 CPUを使用する場合は Neoverse V1/N2 を使用するする必要があります。
SUSE-RX2530M4:~ # virsh start sbsa-arm-suse error: Failed to start domain 'sbsa-arm-suse' error: internal error: process exited while connecting to monitor: 2024-12-05T06:45:25.776127Z qemu-system-aarch64: Invalid CPU model: cortex-a710 The valid models are: cortex-a57, cortex-a72, neoverse-n1, neoverse-v1, neoverse-n2, max SUSE-RX2530M4:~ #
ゲスト内のdmidecodeは以下のような感じ。
halni@sbsa01:~> sudo dmidecode
~~~
Handle 0x0007, DMI type 4, 50 bytes
Processor Information
Socket Designation: CPU02
Type: Central Processor
Family: ARMv8
Manufacturer: QEMU
ID: 70 D0 1F 41 00 00 00 00
Signature: JEP-106 Bank 0x41 Manufacturer 0x1f, SoC ID 0xd070, SoC Revision 0x00000000
Version: arm-virt
Voltage: Unknown
External Clock: 62 MHz
Max Speed: 2000 MHz
Current Speed: 2000 MHz
Status: Populated, Enabled
Upgrade: Unknown
L1 Cache Handle: 0x0005
L2 Cache Handle: 0x0006
L3 Cache Handle: Not Provided
Serial Number: SN0000
Asset Tag: AT0000
Part Number: PN0000
Core Count: 1
Core Enabled: 1
Thread Count: 1
Characteristics:
64-bit capable
Execute Protection
Arm64 SoC ID
~~~
Handle 0x0010, DMI type 0, 26 bytes
BIOS Information
Vendor: EFI Development Kit II / SbsaQemu
Version: 1.0
Release Date: 03/12/2024
Address: 0x10000
Runtime Size: 960 kB
ROM Size: 3840 kB
Characteristics:
PCI is supported
PNP is supported
BIOS is upgradeable
BIOS shadowing is allowed
Boot from CD is supported
Selectable boot is supported
ACPI is supported
Targeted content distribution is supported
UEFI is supported
BIOS Revision: 1.0
Firmware Revision: 1.0
Handle 0x0011, DMI type 1, 27 bytes
System Information
Manufacturer: QEMU
Product Name: QEMU SBSA-REF Machine
Version: 1.0
Serial Number: SN0000
UUID: Not Settable
Wake-up Type: Power Switch
SKU Number: SK0000
Family: ArmVirt
Handle 0x0012, DMI type 3, 25 bytes
Chassis Information
Manufacturer: QEMU
Type: Main Server Chassis
Lock: Not Present
Version: 1.0
Serial Number: SN0000
Asset Tag: AT0000
Boot-up State: Safe
Power Supply State: Safe
Thermal State: Safe
Security Status: None
OEM Information: 0x00000000
Height: 1 U
Number Of Power Cords: 1
Contained Elements: 0
SKU Number: SK0000
Handle 0x0013, DMI type 2, 17 bytes
Base Board Information
Manufacturer: QEMU
Product Name: SBSA-REF
Version: 1.0
Serial Number: SN0000
Asset Tag: AT0000
Features:
Board is a hosting board
Board is replaceable
Location In Chassis: Internal
Chassis Handle: 0x0012
Type: Motherboard
Contained Object Handles: 0
~~~
Handle 0x0016, DMI type 16, 23 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: Unknown
Maximum Capacity: 8 TB
Error Information Handle: Not Provided
Number Of Devices: 1
Handle 0x0017, DMI type 17, 92 bytes
Memory Device
Array Handle: 0x0016
Error Information Handle: Not Provided
Total Width: Unknown
Data Width: Unknown
Size: 4 GB
Form Factor: Unknown
Set: None
Locator: Not Specified
Bank Locator: Not Specified
Type: Unknown
Type Detail: Unknown
Speed: Unknown
Manufacturer: Not Specified
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
Rank: Unknown
Configured Memory Speed: Unknown
Minimum Voltage: Unknown
Maximum Voltage: Unknown
Configured Voltage: Unknown
Memory Technology: DRAM
Memory Operating Mode Capability: Volatile memory
Firmware Version: Not Specified
Module Manufacturer ID: Unknown
Module Product ID: Unknown
Memory Subsystem Controller Manufacturer ID: Unknown
Memory Subsystem Controller Product ID: Unknown
Non-Volatile Size: None
Volatile Size: 4 GB
Cache Size: None
Logical Size: None
Handle 0x0018, DMI type 19, 31 bytes
Memory Array Mapped Address
Starting Address: 0x10000000000
Ending Address: 0x100FFFFFFFF
Range Size: 4 GB
Physical Array Handle: 0x0016
Partition Width: 1
Handle 0xFEFF, DMI type 127, 4 bytes
End Of Table
halni@sbsa01:~>
halni@sbsa01:~> sudo lspci -vt
-[0000:00]-+-00.0 Red Hat, Inc. QEMU PCIe Host bridge
+-01.0 Intel Corporation 82574L Gigabit Network Connection
+-02.0 Device 1234:1111
+-03.0 Red Hat, Inc. QEMU XHCI Host Controller
\-04.0 Device 1234:1111
halni@sbsa01:~>