Merge "Remove NSM from collocation LM test"

This commit is contained in:
Zuul 2021-11-23 20:48:11 +00:00 committed by Gerrit Code Review
commit 23a9b3af04
2 changed files with 101 additions and 143 deletions

View File

@ -86,7 +86,7 @@
vars:
# NOTE(artom) We can't have this on the parent job, otherwise the two
# -cpupinnig jobs will inherit it as well.
tempest_exclude_regex: 'test_live_migrate_and_reboot|test_shared_pinned_and_unpinned_guest|^whitebox_tempest_plugin.api.compute.test_cpu_pinning.EmulatorThreadTest|test_cpu_pinning_and_emulator_threads'
tempest_exclude_regex: 'test_live_migrate_and_reboot|test_shared_pinned_and_unpinned_guest|^whitebox_tempest_plugin.api.compute.test_cpu_pinning.EmulatorThreadTest|test_cpu_pinning_and_emulator_threads|test_collocation_migration'
- job:
name: whitebox-devstack-multinode-cpupinning
@ -95,7 +95,7 @@
Runs the CPU pinning tests on single-NUMA, non-SMT, nested virt VMs. Uses
[compute]cpu_dedicated_set to configure host CPUs for pinning.
vars:
tempest_test_regex: 'test_live_migrate_and_reboot|test_shared_pinned_and_unpinned_guest|^whitebox_tempest_plugin.api.compute.test_cpu_pinning.EmulatorThreadTest|test_cpu_pinning_and_emulator_threads'
tempest_test_regex: 'test_live_migrate_and_reboot|test_shared_pinned_and_unpinned_guest|^whitebox_tempest_plugin.api.compute.test_cpu_pinning.EmulatorThreadTest|test_cpu_pinning_and_emulator_threads|test_collocation_migration'
devstack_local_conf:
post-config:
$NOVA_CONF:

View File

@ -867,135 +867,103 @@ class NUMACPUDedicatedLiveMigrationTest(NUMALiveMigrationBase):
@classmethod
def skip_checks(cls):
super(NUMACPUDedicatedLiveMigrationTest, cls).skip_checks()
if getattr(CONF.whitebox_hardware, 'cpu_topology', None) is None:
msg = "cpu_topology in whitebox-hardware is not present"
raise cls.skipException(msg)
dedicated_cpus_per_numa = \
CONF.whitebox_hardware.dedicated_cpus_per_numa
if dedicated_cpus_per_numa < 2:
raise cls.skipException(
'Need at least 2 or more pCPU\'s per NUMA allocated to the '
'cpu_dedicated_set of the compute host')
shared_cpus_per_numa = \
CONF.whitebox_hardware.dedicated_cpus_per_numa
if shared_cpus_per_numa == 0:
raise cls.skipException(
'Need at least 1 or more pCPU\'s per NUMA allocated to the '
'cpu_shared_set of the compute host')
def test_collocation_migration(self):
cpu_list = hardware.get_all_cpus()
if len(cpu_list) < 4:
raise self.skipException('Requires at least 4 pCPUs to run')
host1, host2 = self.list_compute_hosts()
flavor_vcpu_size = 1
# Use the first two cpu ids for host1's dedicated pCPU and host2's
# shared pCPUs. Use the third and fourth cpu ids for host1's shared set
# and host2's dedicated set
host1_dedicated_set = host2_shared_set = cpu_list[:2]
host2_dedicated_set = host1_shared_set = cpu_list[2:4]
dedicated_flavor = self.create_flavor(
vcpus=flavor_vcpu_size,
extra_specs=self.dedicated_cpu_policy
)
shared_flavor = self.create_flavor(vcpus=flavor_vcpu_size)
host1_sm = clients.NovaServiceManager(host1, 'nova-compute',
self.os_admin.services_client)
host2_sm = clients.NovaServiceManager(host2, 'nova-compute',
self.os_admin.services_client)
with whitebox_utils.multicontext(
host1_sm.config_options(
('compute', 'cpu_dedicated_set',
hardware.format_cpu_spec(host1_dedicated_set)),
('compute', 'cpu_shared_set',
hardware.format_cpu_spec(host1_shared_set))
),
host2_sm.config_options(
('compute', 'cpu_dedicated_set',
hardware.format_cpu_spec(host2_dedicated_set)),
('compute', 'cpu_shared_set',
hardware.format_cpu_spec(host2_shared_set))
)
):
# Create a total of four instances, with each compute host holding
# a server with a cpu_dedicated policy and a server that will
# float across the respective host's cpu_shared_set
dedicated_server_a = self.create_test_server(
clients=self.os_admin, flavor=dedicated_flavor['id'],
host=host1
flavor=dedicated_flavor['id']
)
host_a = self.get_host_for_server(dedicated_server_a['id'])
shared_server_a = self.create_test_server(
clients=self.os_admin, flavor=shared_flavor['id'],
host=host1
host=host_a
)
dedicated_server_b = self.create_test_server(
clients=self.os_admin, flavor=dedicated_flavor['id'],
host=host2
flavor=dedicated_flavor['id'],
scheduler_hints={'different_host': dedicated_server_a['id']}
)
host_b = self.get_host_for_server(dedicated_server_b['id'])
shared_server_b = self.create_test_server(
clients=self.os_admin, flavor=shared_flavor['id'],
host=host2
host=host_b
)
# The pinned vCPU's in the domain XML's for dedicated server A and
# B should map to physical CPU's that are a subset of the
# cpu_dedicated_set of their respective compute host.
server_dedicated_cpus_a = self.get_pinning_as_set(
dedicated_server_a['id']
)
self.assertTrue(server_dedicated_cpus_a.issubset(
host1_dedicated_set),
'Pinned CPU\'s %s of server A %s is not a subset'
' of %s' % (server_dedicated_cpus_a,
dedicated_server_a['id'],
host1_dedicated_set))
host_sm_a = clients.NovaServiceManager(host_a, 'nova-compute',
self.os_admin.services_client)
host_sm_b = clients.NovaServiceManager(host_b, 'nova-compute',
self.os_admin.services_client)
server_dedicated_cpus_b = self.get_pinning_as_set(
dedicated_server_b['id']
)
self.assertTrue(server_dedicated_cpus_b.issubset(
host2_dedicated_set),
'Pinned CPU\'s %s of server B %s is not a subset'
' of %s' % (server_dedicated_cpus_b,
dedicated_server_b['id'],
host2_dedicated_set))
# Iterate over the two servers using the dedicated cpu policy. Based
# on the host they were scheduled too confirm the guest's dedicated
# cpus are a subset of their respective hosts cpu_dedicated_set
for server, host_sm in zip((dedicated_server_a, dedicated_server_b),
(host_sm_a, host_sm_b)):
cpu_dedicated_set = host_sm.get_cpu_dedicated_set()
server_dedicated_cpus = self.get_pinning_as_set(server['id'])
self.assertTrue(
server_dedicated_cpus.issubset(cpu_dedicated_set), 'Pinned '
'CPUs %s of server %s is not a subset of %s' %
(server_dedicated_cpus, server['id'], cpu_dedicated_set))
# Shared servers A and B should have a cpuset that is equal to
# their respective host's cpu_shared_set
server_shared_cpus_a = self._get_shared_cpuset(
shared_server_a['id']
)
self.assertItemsEqual(server_shared_cpus_a,
host1_shared_set,
'Shared CPU Set %s of shared server A %s is '
'not equal to shared set of of %s' %
(server_shared_cpus_a, shared_server_a['id'],
host1_shared_set))
server_shared_cpus_b = self._get_shared_cpuset(
shared_server_b['id']
)
self.assertItemsEqual(server_shared_cpus_b,
host2_shared_set,
'Shared CPU Set %s of shared server B %s is '
'not equal to shared set of of %s' %
(server_shared_cpus_b, shared_server_b['id'],
host2_shared_set))
# Iterate over the two servers using the shared cpu policy. Based
# on the host they were scheduled too confirm the guest's shared
# cpus are the same as their respective hosts cpu_shared_set
for server, host_sm in zip((shared_server_a, shared_server_b),
(host_sm_a, host_sm_b)):
cpu_shared_set = host_sm.get_cpu_shared_set()
server_shared_cpus = self._get_shared_cpuset(server['id'])
self.assertItemsEqual(
server_shared_cpus, cpu_shared_set, 'Shared CPU Set %s of '
'shared server %s is not equal to shared set of %s' %
(server_shared_cpus, server['id'], cpu_shared_set))
# Live migrate shared server A to the compute node with shared
# server B. Both servers are using shared vCPU's so migration
# should be successful
self.live_migrate(shared_server_a['id'], 'ACTIVE',
target_host=host2)
target_host=host_b)
# Validate shared server A now has a shared cpuset that is a equal
# to it's new host's cpu_shared_set
# FIXME(jparker) change host1_shared_set to host2_shared_set once
# Nova bug 1869804 has been addressed
shared_set_a = self._get_shared_cpuset(shared_server_a['id'])
self.assertItemsEqual(shared_set_a, host1_shared_set,
'After migration of server %s, shared CPU '
'set %s is not equal to new shared set %s' %
(shared_server_a['id'], shared_set_a,
host1_shared_set))
host_a_shared_set = host_sm_a.get_cpu_shared_set()
self.assertItemsEqual(
shared_set_a, host_a_shared_set, 'After migration of server %s, '
'shared CPU set %s is not equal to new shared set %s' %
(shared_server_a['id'], shared_set_a, host_a_shared_set))
# Live migrate dedicated server A to the same host holding
# dedicated server B. End result should be all 4 servers are on
# the same host.
self.live_migrate(dedicated_server_a['id'], 'ACTIVE',
target_host=host2)
target_host=host_b)
# Dedicated server A should have a CPU pin set that is a subset of
# it's new host's cpu_dedicated_set and should not intersect with
@ -1003,30 +971,20 @@ class NUMACPUDedicatedLiveMigrationTest(NUMALiveMigrationBase):
# host
dedicated_pin_a = self.get_pinning_as_set(dedicated_server_a['id'])
dedicated_pin_b = self.get_pinning_as_set(dedicated_server_b['id'])
self.assertTrue(dedicated_pin_a.issubset(
host2_dedicated_set),
'Pinned Host CPU\'s %s of server %s is '
'not a subset of %s' % (dedicated_pin_a,
dedicated_server_a['id'],
host2_dedicated_set))
self.assertTrue(dedicated_pin_a.isdisjoint(dedicated_pin_b),
'Pinned Host CPU\'s %s of server %s overlaps with '
'%s' % (dedicated_pin_a,
dedicated_server_a['id'],
dedicated_pin_b))
self.assertTrue(dedicated_pin_a.isdisjoint(host2_shared_set),
'Pinned Host CPU\'s %s of server %s overlaps with '
'cpu_shared_set %s' % (dedicated_pin_a,
dedicated_server_a['id'],
host2_shared_set))
# NOTE(jparker) Due to Nova bug 1836945, cleanUp methods will fail
# to delete servers when nova.conf configurations revert. Need to
# manually delete the servers in the test method.
self.delete_server(dedicated_server_a['id'])
self.delete_server(dedicated_server_b['id'])
self.delete_server(shared_server_a['id'])
self.delete_server(shared_server_b['id'])
host_b_dedicated_set = host_sm_b.get_cpu_dedicated_set()
host_b_shared_set = host_sm_b.get_cpu_shared_set()
self.assertTrue(
dedicated_pin_a.issubset(host_b_dedicated_set),
'Pinned Host CPU\'s %s of server %s is not a subset of %s' %
(dedicated_pin_a, dedicated_server_a['id'], host_b_dedicated_set))
self.assertTrue(
dedicated_pin_a.isdisjoint(dedicated_pin_b),
'Pinned Host CPU\'s %s of server %s overlaps with %s' %
(dedicated_pin_a, dedicated_server_a['id'], dedicated_pin_b))
self.assertTrue(
dedicated_pin_a.isdisjoint(host_b_shared_set), 'Pinned Host '
'CPU\'s %s of server %s overlaps with cpu_shared_set %s' %
(dedicated_pin_a, dedicated_server_a['id'], host_b_shared_set))
class NUMARebuildTest(BasePinningTest):