nova/nova/tests/functional/libvirt
Adam Spiers 8e5d6767bb Enable booting of libvirt guests with AMD SEV memory encryption
Track compute node inventory for the new MEM_ENCRYPTION_CONTEXT
resource class (added in os-resource-classes 0.4.0) which represents
the number of guests a compute node can host concurrently with memory
encrypted at the hardware level.

This serves as a "master switch" for enabling SEV functionality, since
all the code which takes advantage of the presence of this inventory
in order to boot SEV-enabled guests is already in place, but none of
it gets used until the inventory is non-zero.

A discrete inventory is required because on AMD SEV-capable hardware,
the memory controller has a fixed number of slots for holding
encryption keys, one per guest.  Typical early hardware only has 15
slots, thereby limiting the number of SEV guests which can be run
concurrently to 15.  nova needs to track how many slots are available
and used in order to avoid attempting to exceed that limit in the
hardware.

Work is in progress to allow QEMU and libvirt to expose the number of
slots available on SEV hardware; however until this is finished and
released, it will not be possible for nova to programatically detect
the correct value with which to populate the MEM_ENCRYPTION_CONTEXT
inventory.  So as a stop-gap, populate the inventory using the value
manually provided by the cloud operator in a new configuration option
CONF.libvirt.num_memory_encrypted_guests.

Since this commit effectively enables SEV, also add all the relevant
documentation as planned in the AMD SEV spec[0]:

- Add operation.boot-encrypted-vm to the KVM hypervisor feature matrix.

- Update the KVM section of the Configuration Guide.

- Update the flavors section of the User Guide.

- Add a release note.

[0] http://specs.openstack.org/openstack/nova-specs/specs/train/approved/amd-sev-libvirt-support.html#documentation-impact

blueprint: amd-sev-libvirt-support
Change-Id: I659cb77f12a38a4d2fb118530ebb9de88d2ed30d
2019-09-10 13:59:02 +01:00
..
__init__.py tests: introduce a NUMAServersTest class 2015-04-16 11:43:53 -04:00
base.py Don't duplicate PlacementFixture in libvirt func tests 2019-09-09 17:23:39 +01:00
integrated_helpers.py Extract new base class for provider usage functional tests 2019-08-21 15:06:20 +01:00
test_numa_servers.py libvirt: Make scheduler filters customizable 2019-09-03 15:24:22 +01:00
test_pci_sriov_servers.py libvirt: Make scheduler filters customizable 2019-09-03 15:24:22 +01:00
test_report_cpu_traits.py Enable booting of libvirt guests with AMD SEV memory encryption 2019-09-10 13:59:02 +01:00
test_reshape.py Remove fake_libvirt_utils users in functional testing. 2019-07-23 17:46:32 -05:00
test_rt_servers.py libvirt: Make scheduler filters customizable 2019-09-03 15:24:22 +01:00
test_shared_resource_provider.py Extract new base class for provider usage functional tests 2019-08-21 15:06:20 +01:00