HalNiの雑記

備忘録を兼ねて。サーバマシンとかネットワークとか

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 サーバーのリファレンスとして各機能が策定されたものです。

developer.arm.com

そのため、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:~>