
host arch in libvirt driver support This is split 2 of 3 for the architecture emulation feature. This implements emulated multi-architecture support through qemu within OpenStack Nova. Additional config variable check to pull host architecture into hw_architecture field for emulation checks to be made. Adds a custom function that simply performs a check for hw_emulation_architecture field being set, allowing for core code to function as normal while enabling a simple check to enable emulated architectures to follow the same path as all multi-arch support already established for physical nodes but instead levaraging qemu which allows for the overall emulation. Added check for domain xml unit test to strip arch from the os tag, as it is not required uefi checks, and only leveraged for emulation checks. Added additional test cases test_driver validating emulation functionality with checking hw_emulation_architecture against the os_arch/hw_architecture field. Added required os-traits and settings for scheduler request_filter. Added RISCV64 to architecture enum for better support in driver. Implements: blueprint pick-guest-arch-based-on-host-arch-in-libvirt-driver Closes-Bug: 1863728 Change-Id: Ia070a29186c6123cf51e1b17373c2dc69676ae7c Signed-off-by: Jonathan Race <jrace@augusta.edu>
4.2 KiB
hw_emulation_architecture - Configuring QEMU instance emulation architecture
25.0.0 (Yoga)
The libvirt driver now allows for handling of specific cpu architectures when defined within the image metadata properties, to be emulated through QEMU.
Added hw_emulation_architecture
as an available
image_meta property.
Note
The following only applies to environments using libvirt compute hosts. and should be considered experimental in its entirety, during its first release as a feature.
Introduction
This capability is to fill a need with environments that do not have the capability to support the various cpu architectures that are present today with physical hardware. A small subset of architectures that are supported both within libvirt and QEMU have been selected as prime candidates for emulation support.
While support has been added for the below base architectures, this does not guarantee that every subset or custom operating system that leverages one of these architectures will function.
Configure
QEMU Binary Support
To ensure that libvirt and QEMU can properly handle the level of cpu
emulation desired by the end-user, you are required to install the
specific qemu-system-XXX
, qemu-efi-arm
,
qemu-efi-aarch64
binaries on the compute nodes that will be
providing support.
Console Support
Consideration need to be made in regards to which architectures you want to support, as there are limitations on support through spice, novnc, and serial. All testing and validation has been done to ensure that spice and serial connections function as expected.
AARCH64
- Spice & SerialS390X
- SerialPPC64LE
- Spice & SerialMIPSEL
- untested
Supported Emulated Architectures
The supported emulated architectures require specific image meta properties to be set in order to trigger the proper settings to be configured by libvirtd.
For end users the emulation architecture of an instance is controlled
by the selection of an image with the
hw_emulation_architecture
image metadata property set.
AARCH64
Tested and Validated as functional
$ openstack image set --property hw_emulation_architecture=aarch64 $IMAGE
$ openstack image set --property hw_machine_type=virt $IMAGE
$ openstack image set --property hw_firmware_type=uefi $IMAGE
S390x
Tested and Validated as functional
$ openstack image set --property hw_emulation_architecture=s390x $IMAGE
$ openstack image set --property hw_machine_type=s390-ccw-virtio $IMAGE
$ openstack image set --property hw_video_model=virtio $IMAGE
PPC64LE
Tested and Validated as functional
$ openstack image set --property hw_emulation_architecture=ppc64le $IMAGE
$ openstack image set --property hw_machine_type=pseries $IMAGE
MIPSEL
Testing and validation is ongoing to overcome PCI issues
Note
Support is currently impacted, one current method for support is manually patching and compiling as defined in libvirt bug XML error: No PCI buses available.
$ openstack image set --property hw_emulation_architecture=mipsel $IMAGE
$ openstack image set --property hw_machine_type=virt $IMAGE