nova/doc/source/admin/hw-emulation-architecture.rst
Jonathan Race 31ff7ce7e2 driver/secheduler/docs for Adds Pick guest CPU architecture based on
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>
2022-02-24 12:25:59 -05:00

134 lines
4.2 KiB
ReStructuredText

..
Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
============================================================================
hw_emulation_architecture - Configuring QEMU instance emulation architecture
============================================================================
.. versionadded:: 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 & Serial
- ``S390X`` - Serial
- ``PPC64LE`` - Spice & Serial
- ``MIPSEL`` - 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``
.. code-block:: shell
$ 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``
.. code-block:: shell
$ 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``
.. code-block:: shell
$ 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`_.
.. _`XML error: No PCI buses available`: https://bugzilla.redhat.com/show_bug.cgi?id=1432101
.. code-block:: shell
$ openstack image set --property hw_emulation_architecture=mipsel $IMAGE
$ openstack image set --property hw_machine_type=virt $IMAGE