Skip to content

Commit 0d0dff8

Browse files
committed
Power on cores for isolated emulator threads
Previously, with the `isolate` emulator threads policy and libvirt cpu power management enabled, we did not power on the cores to which the emulator threads were pin. Start doing that, and don't forget to power them down when the instance is stopped. Closes-bug: 2056612 Change-Id: I6e5383d8a0bf3f0ed8c870754cddae4e9163b4fd (cherry picked from commit 0986d2b) (cherry picked from commit 4bcf5ad)
1 parent 6ea5c69 commit 0d0dff8

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

nova/tests/functional/libvirt/test_power_manage.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,26 @@ def test_create_server_with_emulator_threads_isolate(self):
147147
self.assertTrue(
148148
numa_topology.cpu_pinning.isdisjoint(
149149
numa_topology.cpuset_reserved))
150-
# FIXME(artom) We've not actually powered on the emulator threads core
150+
self._assert_cpu_set_state(numa_topology.cpuset_reserved,
151+
expected='online')
152+
153+
def test_start_stop_server_with_emulator_threads_isolate(self):
154+
server = self._create_server(
155+
flavor_id=self.isolate_flavor_id,
156+
expected_state='ACTIVE')
157+
# Let's verify that the pinned CPUs are now online
158+
self._assert_server_cpus_state(server, expected='online')
159+
instance = objects.Instance.get_by_uuid(self.ctxt, server['id'])
160+
numa_topology = instance.numa_topology
161+
# Make sure we've pinned the emulator threads to a separate core
162+
self.assertTrue(numa_topology.cpuset_reserved)
163+
self.assertTrue(
164+
numa_topology.cpu_pinning.isdisjoint(
165+
numa_topology.cpuset_reserved))
166+
self._assert_cpu_set_state(numa_topology.cpuset_reserved,
167+
expected='online')
168+
# Stop and assert we've powered down the emulator threads core as well
169+
server = self._stop_server(server)
151170
self._assert_cpu_set_state(numa_topology.cpuset_reserved,
152171
expected='offline')
153172

nova/virt/libvirt/cpu/api.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ def power_up(instance: objects.Instance) -> None:
8282
return
8383

8484
cpu_dedicated_set = hardware.get_cpu_dedicated_set_nozero() or set()
85-
pcpus = instance.numa_topology.cpu_pinning
85+
pcpus = instance.numa_topology.cpu_pinning.union(
86+
instance.numa_topology.cpuset_reserved)
8687
powered_up = set()
8788
for pcpu in pcpus:
8889
if pcpu in cpu_dedicated_set:
@@ -102,7 +103,8 @@ def power_down(instance: objects.Instance) -> None:
102103
return
103104

104105
cpu_dedicated_set = hardware.get_cpu_dedicated_set_nozero() or set()
105-
pcpus = instance.numa_topology.cpu_pinning
106+
pcpus = instance.numa_topology.cpu_pinning.union(
107+
instance.numa_topology.cpuset_reserved)
106108
powered_down = set()
107109
for pcpu in pcpus:
108110
if pcpu in cpu_dedicated_set:

0 commit comments

Comments
 (0)