From 1ecb141da1e1c3d70980d79f99aa102003860ace Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Fri, 2 Aug 2019 17:34:33 +0100 Subject: [PATCH] objects: Add 'NUMACell.pcpuset' field We will use this to track host CPUs intended for dedicated workloads in a future change. For now, we simply add the field and set it in all instances of 'NUMACell'. This change has the benefit of allowing us to avoid overloading the meaning of some fields, as described below. This doesn't happen here but rather with change I492803eaacc34c69af073689f9159449557919db. Before: pinned instances -> NUMACell.cpuset Tracks the host cores that can be used by pinned instances NUMACell.cpu_usage Tracks the usage of host cores by pinned instances in total integer format NUMACell.pinned_cpus Tracks the usage of host cores by pinned instances in mapping format unpinned instances -> NUMACell.cpuset Tracks the host cores that can be used by unpinned instances NUMACell.cpu_usage Tracks the usage of host cores by unpinned instances in total integer format After: pinned instances -> NUMACell.pcpuset Tracks the host cores that can be used by pinned instances NUMACell.pinned_cpus Tracks the usage of host cores by pinned instances in mapping format unpinned instances -> NUMACell.cpuset Tracks the host cores that can be used by unpinned instances NUMACell.cpu_usage Tracks the usage of host cores by unpinned instances in total integer format In summary, we go from overloading the 'cpuset' and 'cpu_usage' fields to having dedicated fields for pinned and unpinned CPUs. As an aside, it would be nice if the field names were a little more uniform, but that can be addressed in the future. Change-Id: I7407a8e662d7b4a710d5a133ef22d2b25e26ad89 Signed-off-by: Stephen Finucane --- nova/objects/numa.py | 6 +- nova/tests/unit/compute/test_claims.py | 2 + nova/tests/unit/compute/test_compute.py | 2 + .../unit/compute/test_resource_tracker.py | 5 +- nova/tests/unit/objects/test_compute_node.py | 2 + nova/tests/unit/objects/test_numa.py | 28 +++++++ nova/tests/unit/objects/test_objects.py | 2 +- nova/tests/unit/scheduler/fakes.py | 7 ++ .../filters/test_numa_topology_filters.py | 3 +- nova/tests/unit/virt/libvirt/test_driver.py | 8 ++ nova/tests/unit/virt/test_hardware.py | 82 +++++++++++++++++-- nova/virt/hardware.py | 12 ++- nova/virt/libvirt/driver.py | 18 ++-- 13 files changed, 156 insertions(+), 21 deletions(-) diff --git a/nova/objects/numa.py b/nova/objects/numa.py index 68631daccfdc..c586784a5f5d 100644 --- a/nova/objects/numa.py +++ b/nova/objects/numa.py @@ -44,11 +44,13 @@ class NUMACell(base.NovaObject): # Version 1.1: Added pinned_cpus and siblings fields # Version 1.2: Added mempages field # Version 1.3: Add network_metadata field - VERSION = '1.3' + # Version 1.4: Add pcpuset + VERSION = '1.4' fields = { 'id': obj_fields.IntegerField(read_only=True), 'cpuset': obj_fields.SetOfIntegersField(), + 'pcpuset': obj_fields.SetOfIntegersField(), 'memory': obj_fields.IntegerField(), 'cpu_usage': obj_fields.IntegerField(default=0), 'memory_usage': obj_fields.IntegerField(default=0), @@ -61,6 +63,8 @@ class NUMACell(base.NovaObject): def obj_make_compatible(self, primitive, target_version): super(NUMACell, self).obj_make_compatible(primitive, target_version) target_version = versionutils.convert_version_to_tuple(target_version) + if target_version < (1, 4): + primitive.pop('pcpuset', None) if target_version < (1, 3): primitive.pop('network_metadata', None) diff --git a/nova/tests/unit/compute/test_claims.py b/nova/tests/unit/compute/test_claims.py index d7c28e30b083..fae3a78aad52 100644 --- a/nova/tests/unit/compute/test_claims.py +++ b/nova/tests/unit/compute/test_claims.py @@ -135,6 +135,7 @@ class ClaimTestCase(test.NoDBTestCase): objects.NUMACell( id=1, cpuset=set([1, 2]), + pcpuset=set(), memory=512, memory_usage=0, cpu_usage=0, mempages=[], @@ -143,6 +144,7 @@ class ClaimTestCase(test.NoDBTestCase): objects.NUMACell( id=2, cpuset=set([3, 4]), + pcpuset=set(), memory=512, memory_usage=0, cpu_usage=0, diff --git a/nova/tests/unit/compute/test_compute.py b/nova/tests/unit/compute/test_compute.py index 011f57ba7eed..300fd2e4b10c 100644 --- a/nova/tests/unit/compute/test_compute.py +++ b/nova/tests/unit/compute/test_compute.py @@ -5702,6 +5702,7 @@ class ComputeTestCase(BaseTestCase, cell1 = objects.NUMACell( id=0, cpuset=set([1, 2]), + pcpuset=set(), memory=512, pagesize=2048, cpu_usage=2, @@ -5715,6 +5716,7 @@ class ComputeTestCase(BaseTestCase, cell2 = objects.NUMACell( id=1, cpuset=set([3, 4]), + pcpuset=set(), pinned_cpus=set(), memory=512, pagesize=2048, diff --git a/nova/tests/unit/compute/test_resource_tracker.py b/nova/tests/unit/compute/test_resource_tracker.py index e2386e4f49cd..0b401b5f3598 100644 --- a/nova/tests/unit/compute/test_resource_tracker.py +++ b/nova/tests/unit/compute/test_resource_tracker.py @@ -170,6 +170,7 @@ _NUMA_HOST_TOPOLOGIES = { objects.NUMACell( id=0, cpuset=set([1, 2]), + pcpuset=set(), memory=_2MB, cpu_usage=0, memory_usage=0, @@ -179,6 +180,7 @@ _NUMA_HOST_TOPOLOGIES = { objects.NUMACell( id=1, cpuset=set([3, 4]), + pcpuset=set(), memory=_2MB, cpu_usage=0, memory_usage=0, @@ -2034,7 +2036,8 @@ class TestInstanceClaim(BaseTestCase): self.instance = _INSTANCE_FIXTURES[0].obj_clone() def assertEqualNUMAHostTopology(self, expected, got): - attrs = ('cpuset', 'memory', 'id', 'cpu_usage', 'memory_usage') + attrs = ('cpuset', 'pcpuset', 'memory', 'id', 'cpu_usage', + 'memory_usage') if None in (expected, got): if expected != got: raise AssertionError("Topologies don't match. Expected: " diff --git a/nova/tests/unit/objects/test_compute_node.py b/nova/tests/unit/objects/test_compute_node.py index 6950ef3d47a1..aeaf4b957fe7 100644 --- a/nova/tests/unit/objects/test_compute_node.py +++ b/nova/tests/unit/objects/test_compute_node.py @@ -44,6 +44,7 @@ fake_numa_topology = objects.NUMATopology(cells=[ objects.NUMACell( id=0, cpuset=set([1, 2]), + pcpuset=set(), memory=512, cpu_usage=0, memory_usage=0, @@ -53,6 +54,7 @@ fake_numa_topology = objects.NUMATopology(cells=[ objects.NUMACell( id=1, cpuset=set([3, 4]), + pcpuset=set(), memory=512, cpu_usage=0, memory_usage=0, diff --git a/nova/tests/unit/objects/test_numa.py b/nova/tests/unit/objects/test_numa.py index 99912f60dd87..f23b5ecd9431 100644 --- a/nova/tests/unit/objects/test_numa.py +++ b/nova/tests/unit/objects/test_numa.py @@ -21,6 +21,7 @@ fake_obj_numa = objects.NUMATopology(cells=[ objects.NUMACell( id=0, cpuset=set([1, 2]), + pcpuset=set(), memory=512, cpu_usage=2, memory_usage=256, @@ -30,6 +31,7 @@ fake_obj_numa = objects.NUMATopology(cells=[ objects.NUMACell( id=1, cpuset=set([3, 4]), + pcpuset=set(), memory=512, cpu_usage=1, memory_usage=128, @@ -44,6 +46,7 @@ class _TestNUMACell(object): cell_a = objects.NUMACell( id=0, cpuset=set([1, 2]), + pcpuset=set(), memory=512, cpu_usage=2, memory_usage=256, @@ -53,6 +56,7 @@ class _TestNUMACell(object): cell_b = objects.NUMACell( id=1, cpuset=set([3, 4]), + pcpuset=set(), memory=512, cpu_usage=1, memory_usage=128, @@ -67,6 +71,7 @@ class _TestNUMACell(object): numacell = objects.NUMACell( id=0, cpuset=set([1, 2, 3, 4]), + pcpuset=set(), memory=512, cpu_usage=2, memory_usage=256, @@ -100,6 +105,7 @@ class _TestNUMACell(object): numacell = objects.NUMACell( id=0, cpuset=set([1, 2, 3, 4]), + pcpuset=set(), memory=512, cpu_usage=2, memory_usage=256, @@ -128,6 +134,7 @@ class _TestNUMACell(object): numacell = objects.NUMACell( id=0, cpuset=set([1, 2, 3, 4]), + pcpuset=set(), memory=512, cpu_usage=0, memory_usage=256, @@ -152,6 +159,7 @@ class _TestNUMACell(object): cell = objects.NUMACell( id=0, cpuset=set([1, 2]), + pcpuset=set(), memory=1024, siblings=[set([1]), set([2])], pinned_cpus=set(), @@ -187,6 +195,7 @@ class _TestNUMACell(object): cell = objects.NUMACell( id=0, cpuset=set([1, 2]), + pcpuset=set(), memory=1024, siblings=[set([1]), set([2])], pinned_cpus=set(), @@ -212,6 +221,7 @@ class _TestNUMACell(object): cell1 = objects.NUMACell( id=1, cpuset=set([1, 2]), + pcpuset=set(), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), @@ -219,6 +229,7 @@ class _TestNUMACell(object): cell2 = objects.NUMACell( id=1, cpuset=set([1, 2]), + pcpuset=set(), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), @@ -229,6 +240,7 @@ class _TestNUMACell(object): cell1 = objects.NUMACell( id=1, cpuset=set([1, 2]), + pcpuset=set(), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), @@ -236,6 +248,7 @@ class _TestNUMACell(object): cell2 = objects.NUMACell( id=2, cpuset=set([1, 2]), + pcpuset=set(), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), @@ -246,12 +259,14 @@ class _TestNUMACell(object): cell1 = objects.NUMACell( id=1, cpuset=set([1, 2]), + pcpuset=set(), memory=32, pinned_cpus=set([3, 4]), siblings=[set([5, 6])]) cell2 = objects.NUMACell( id=2, cpuset=set([1, 2]), + pcpuset=set(), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), @@ -262,6 +277,7 @@ class _TestNUMACell(object): cell1 = objects.NUMACell( id=1, cpuset=set([1, 2]), + pcpuset=set(), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), @@ -269,6 +285,7 @@ class _TestNUMACell(object): cell2 = objects.NUMACell( id=2, cpuset=set([1, 2]), + pcpuset=set(), memory=32, pinned_cpus=set([3, 4]), siblings=[set([5, 6])]) @@ -280,6 +297,7 @@ class _TestNUMACell(object): cell1 = objects.NUMACell( id=1, cpuset=set([1, 2]), + pcpuset=set(), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), @@ -288,6 +306,7 @@ class _TestNUMACell(object): cell2 = objects.NUMACell( id=1, cpuset=set([1, 2]), + pcpuset=set(), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), @@ -301,6 +320,7 @@ class _TestNUMACell(object): cell1 = objects.NUMACell( id=1, cpuset=set([1, 2]), + pcpuset=set(), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), @@ -309,6 +329,7 @@ class _TestNUMACell(object): cell2 = objects.NUMACell( id=1, cpuset=set([1, 2]), + pcpuset=set(), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), @@ -322,6 +343,7 @@ class _TestNUMACell(object): cell = objects.NUMACell( id=0, cpuset=set([1, 2]), + pcpuset=set([3, 4]), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), @@ -329,8 +351,14 @@ class _TestNUMACell(object): network_metadata=network_metadata) versions = ovo_base.obj_tree_get_versions('NUMACell') + + primitive = cell.obj_to_primitive(target_version='1.4', + version_manifest=versions) + self.assertIn('pcpuset', primitive['nova_object.data']) + primitive = cell.obj_to_primitive(target_version='1.3', version_manifest=versions) + self.assertNotIn('pcpuset', primitive['nova_object.data']) self.assertIn('network_metadata', primitive['nova_object.data']) primitive = cell.obj_to_primitive(target_version='1.2', diff --git a/nova/tests/unit/objects/test_objects.py b/nova/tests/unit/objects/test_objects.py index d9cc245b9fec..a9b8883c0bbf 100644 --- a/nova/tests/unit/objects/test_objects.py +++ b/nova/tests/unit/objects/test_objects.py @@ -1100,7 +1100,7 @@ object_data = { 'MigrationList': '1.4-983a9c29d4f1e747ce719dc9063b729b', 'MonitorMetric': '1.1-53b1db7c4ae2c531db79761e7acc52ba', 'MonitorMetricList': '1.1-15ecf022a68ddbb8c2a6739cfc9f8f5e', - 'NUMACell': '1.3-64b5fec7c51c0a85760c56b42dd307a5', + 'NUMACell': '1.4-7695303e820fa855d76954be2eb2680e', 'NUMAPagesTopology': '1.1-edab9fa2dc43c117a38d600be54b4542', 'NUMATopology': '1.2-c63fad38be73b6afd04715c9c1b29220', 'NUMATopologyLimits': '1.1-4235c5da7a76c7e36075f0cd2f5cf922', diff --git a/nova/tests/unit/scheduler/fakes.py b/nova/tests/unit/scheduler/fakes.py index fcab8d8f4275..76274cd1e8aa 100644 --- a/nova/tests/unit/scheduler/fakes.py +++ b/nova/tests/unit/scheduler/fakes.py @@ -29,6 +29,7 @@ NUMA_TOPOLOGY = objects.NUMATopology(cells=[ objects.NUMACell( id=0, cpuset=set([1, 2]), + pcpuset=set(), memory=512, cpu_usage=0, memory_usage=0, @@ -40,6 +41,7 @@ NUMA_TOPOLOGY = objects.NUMATopology(cells=[ objects.NUMACell( id=1, cpuset=set([3, 4]), + pcpuset=set(), memory=512, cpu_usage=0, memory_usage=0, @@ -54,6 +56,7 @@ NUMA_TOPOLOGIES_W_HT = [ objects.NUMACell( id=0, cpuset=set([1, 2, 5, 6]), + pcpuset=set(), memory=512, cpu_usage=0, memory_usage=0, @@ -63,6 +66,7 @@ NUMA_TOPOLOGIES_W_HT = [ objects.NUMACell( id=1, cpuset=set([3, 4, 7, 8]), + pcpuset=set(), memory=512, cpu_usage=0, memory_usage=0, @@ -74,6 +78,7 @@ NUMA_TOPOLOGIES_W_HT = [ objects.NUMACell( id=0, cpuset=set(), + pcpuset=set(), memory=512, cpu_usage=0, memory_usage=0, @@ -83,6 +88,7 @@ NUMA_TOPOLOGIES_W_HT = [ objects.NUMACell( id=1, cpuset=set([1, 2, 5, 6]), + pcpuset=set(), memory=512, cpu_usage=0, memory_usage=0, @@ -92,6 +98,7 @@ NUMA_TOPOLOGIES_W_HT = [ objects.NUMACell( id=2, cpuset=set([3, 4, 7, 8]), + pcpuset=set(), memory=512, cpu_usage=0, memory_usage=0, diff --git a/nova/tests/unit/scheduler/filters/test_numa_topology_filters.py b/nova/tests/unit/scheduler/filters/test_numa_topology_filters.py index 3cfe38171a03..5b7cc716112b 100644 --- a/nova/tests/unit/scheduler/filters/test_numa_topology_filters.py +++ b/nova/tests/unit/scheduler/filters/test_numa_topology_filters.py @@ -197,7 +197,6 @@ class TestNUMATopologyFilter(test.NoDBTestCase): def test_numa_topology_filter_pass_cpu_thread_policy_others(self): cpu_policy = fields.CPUAllocationPolicy.DEDICATED - cpu_thread_policy = fields.CPUThreadAllocationPolicy.PREFER numa_topology = fakes.NUMA_TOPOLOGY for cpu_thread_policy in [ @@ -244,6 +243,7 @@ class TestNUMATopologyFilter(test.NoDBTestCase): objects.NUMACell( id=1, cpuset=set([1, 2]), + pcpuset=set(), memory=2048, cpu_usage=2, memory_usage=2048, @@ -254,6 +254,7 @@ class TestNUMATopologyFilter(test.NoDBTestCase): objects.NUMACell( id=2, cpuset=set([3, 4]), + pcpuset=set(), memory=2048, cpu_usage=2, memory_usage=2048, diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index 5626d03fae50..501880f032e1 100644 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -2847,6 +2847,7 @@ class LibvirtConnTestCase(test.NoDBTestCase, objects.NUMACell( id=3, cpuset=set([1]), + pcpuset=set(), siblings=[set([1])], memory=1024, mempages=[ @@ -2877,6 +2878,7 @@ class LibvirtConnTestCase(test.NoDBTestCase, objects.NUMACell( id=3, cpuset=set([1]), + pcpuset=set(), siblings=[set([1])], memory=1024, mempages=[ @@ -3169,6 +3171,7 @@ class LibvirtConnTestCase(test.NoDBTestCase, objects.NUMACell( id=3, cpuset=set([1]), + pcpuset=set(), siblings=[set([1])], memory=1024, mempages=[ @@ -4047,18 +4050,21 @@ class LibvirtConnTestCase(test.NoDBTestCase, objects.NUMACell( id=0, cpuset=set([1, 2]), + pcpuset=set(), siblings=[set([1]), set([2])], memory=1024, mempages=[]), objects.NUMACell( id=1, cpuset=set([3, 4]), + pcpuset=set(), siblings=[set([3]), set([4])], memory=1024, mempages=[]), objects.NUMACell( id=16, cpuset=set([5, 6]), + pcpuset=set(), siblings=[set([5]), set([6])], memory=1024, mempages=[])]) @@ -19414,6 +19420,7 @@ class HostStateTestCase(test.NoDBTestCase): objects.NUMACell( id=1, cpuset=set([1, 2]), + pcpuset=set(), memory=1024, cpu_usage=0, memory_usage=0, @@ -19423,6 +19430,7 @@ class HostStateTestCase(test.NoDBTestCase): objects.NUMACell( id=2, cpuset=set([3, 4]), + pcpuset=set(), memory=1024, cpu_usage=0, memory_usage=0, diff --git a/nova/tests/unit/virt/test_hardware.py b/nova/tests/unit/virt/test_hardware.py index 1deb4e2def11..6efbef228c3a 100644 --- a/nova/tests/unit/virt/test_hardware.py +++ b/nova/tests/unit/virt/test_hardware.py @@ -1370,6 +1370,7 @@ class NUMATopologyTest(test.NoDBTestCase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=256, cpu_usage=0, memory_usage=0, @@ -1382,6 +1383,7 @@ class NUMATopologyTest(test.NoDBTestCase): objects.NUMACell( id=1, cpuset=set([4, 6]), + pcpuset=set(), memory=256, cpu_usage=0, memory_usage=0, @@ -1394,6 +1396,7 @@ class NUMATopologyTest(test.NoDBTestCase): objects.NUMACell( id=2, cpuset=set([5, 7]), + pcpuset=set(), memory=2, cpu_usage=0, memory_usage=0, @@ -1470,6 +1473,7 @@ class NUMATopologyTest(test.NoDBTestCase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=160, cpu_usage=0, memory_usage=0, @@ -1509,6 +1513,7 @@ class NUMATopologyTest(test.NoDBTestCase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=1024, cpu_usage=0, memory_usage=0, @@ -1519,6 +1524,7 @@ class NUMATopologyTest(test.NoDBTestCase): objects.NUMACell( id=5, cpuset=set([4, 6]), + pcpuset=set(), memory=512, cpu_usage=0, memory_usage=0, @@ -1529,6 +1535,7 @@ class NUMATopologyTest(test.NoDBTestCase): objects.NUMACell( id=6, cpuset=set([5, 7]), + pcpuset=set(), memory=512, cpu_usage=0, memory_usage=0, @@ -1590,6 +1597,7 @@ class NUMATopologyTest(test.NoDBTestCase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=1024, cpu_usage=2, memory_usage=512, @@ -1600,6 +1608,7 @@ class NUMATopologyTest(test.NoDBTestCase): objects.NUMACell( id=1, cpuset=set([4, 6]), + pcpuset=set(), memory=512, cpu_usage=1, memory_usage=512, @@ -1610,6 +1619,7 @@ class NUMATopologyTest(test.NoDBTestCase): objects.NUMACell( id=2, cpuset=set([5, 7]), + pcpuset=set(), memory=256, cpu_usage=0, memory_usage=0, @@ -1928,6 +1938,7 @@ class VirtNUMAHostTopologyTestCase(test.NoDBTestCase): objects.NUMACell( id=1, cpuset=set([1, 2]), + pcpuset=set(), memory=2048, cpu_usage=2, memory_usage=2048, @@ -1937,6 +1948,7 @@ class VirtNUMAHostTopologyTestCase(test.NoDBTestCase): siblings=[set([1]), set([2])]), objects.NUMACell(id=2, cpuset=set([3, 4]), + pcpuset=set(), memory=2048, cpu_usage=2, memory_usage=2048, @@ -2151,6 +2163,7 @@ class VirtMemoryPagesTestCase(test.NoDBTestCase): hostcell = objects.NUMACell( id=0, cpuset=set([0]), + pcpuset=set(), memory=1024, cpu_usage=0, memory_usage=0, @@ -2388,6 +2401,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set(), @@ -2404,6 +2418,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2]), + pcpuset=set(), memory=2048, memory_usage=1024, pinned_cpus=set(), @@ -2419,6 +2434,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set([0]), @@ -2435,6 +2451,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set(), @@ -2454,6 +2471,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set([1]), @@ -2471,6 +2489,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set(), @@ -2491,6 +2510,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=2048, memory_usage=0, siblings=[set([0, 1]), set([2, 3])], @@ -2511,6 +2531,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3, 4, 5, 6, 7]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set(), @@ -2531,6 +2552,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3, 4, 5, 6, 7]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set([1, 2, 5, 6]), @@ -2550,6 +2572,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3, 4, 5, 6, 7]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set(), @@ -2569,6 +2592,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set(), @@ -2587,6 +2611,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set(range(0, 8)), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set(), @@ -2604,6 +2629,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3, 4, 5, 6, 7]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set([0, 1, 2]), @@ -2621,6 +2647,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set(), @@ -2640,6 +2667,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3, 4, 5, 6, 7]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set([0, 1]), @@ -2659,6 +2687,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3, 4, 5, 6, 7]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set(), @@ -2675,6 +2704,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3, 4, 5, 6, 7]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set(), @@ -2691,6 +2721,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3, 4, 5, 6, 7]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set([0, 2, 5]), @@ -2707,6 +2738,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3, 4, 5, 6, 7]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set([0, 1, 2, 5]), @@ -2723,6 +2755,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3, 4, 5, 6, 7]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set([0, 2, 5, 6]), @@ -2740,6 +2773,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): id=0, cpuset=set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set(), @@ -2758,6 +2792,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set([1]), @@ -2775,6 +2810,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set([1, 2]), @@ -2792,6 +2828,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set(), @@ -2811,6 +2848,7 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): host_pin = objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set(), @@ -2828,13 +2866,14 @@ class CPUPinningCellTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): def test_get_pinning_isolate_policy_fits_w_usage(self): host_pin = objects.NUMACell( - id=0, - cpuset=set([0, 1, 2, 3, 4, 5, 6, 7]), - memory=4096, - memory_usage=0, - pinned_cpus=set([0, 1]), - siblings=[set([0, 4]), set([1, 5]), set([2, 6]), set([3, 7])], - mempages=[]) + id=0, + cpuset=set([0, 1, 2, 3, 4, 5, 6, 7]), + pcpuset=set(), + memory=4096, + memory_usage=0, + pinned_cpus=set([0, 1]), + siblings=[set([0, 4]), set([1, 5]), set([2, 6]), set([3, 7])], + mempages=[]) inst_pin = objects.InstanceNUMACell( cpuset=set([0, 1]), memory=2048, @@ -2852,6 +2891,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set(), @@ -2860,6 +2900,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=1, cpuset=set([2, 3]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set(), @@ -2881,6 +2922,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set([0]), @@ -2889,6 +2931,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=1, cpuset=set([2, 3]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set(), @@ -2910,6 +2953,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set([0]), @@ -2918,6 +2962,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=1, cpuset=set([2, 3]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set([2]), @@ -2937,6 +2982,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set(), @@ -2945,6 +2991,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=1, cpuset=set([4, 5, 6, 7]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set(), @@ -2968,6 +3015,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set([0]), @@ -2976,6 +3024,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=1, cpuset=set([4, 5, 6, 7]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set([4, 5, 6]), @@ -2984,6 +3033,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=2, cpuset=set([8, 9, 10, 11]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set([10, 11]), @@ -3008,6 +3058,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set([0]), @@ -3016,6 +3067,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=1, cpuset=set([4, 5, 6, 7]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set([4, 5, 6]), @@ -3037,6 +3089,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set(), @@ -3045,6 +3098,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=1, cpuset=set([4, 5, 6, 7]), + pcpuset=set(), memory=4096, memory_usage=0, pinned_cpus=set(), @@ -3069,6 +3123,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, cpu_usage=0, memory_usage=0, @@ -3097,6 +3152,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, cpu_usage=0, memory_usage=0, @@ -3124,6 +3180,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, cpu_usage=0, memory_usage=0, @@ -3151,6 +3208,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, cpu_usage=0, memory_usage=0, @@ -3176,6 +3234,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, cpu_usage=0, memory_usage=0, @@ -3201,6 +3260,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, cpu_usage=0, memory_usage=0, @@ -3226,6 +3286,7 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3]), + pcpuset=set(), memory=4096, cpu_usage=4, memory_usage=0, @@ -3252,6 +3313,7 @@ class CPUSReservedCellTestCase(test.NoDBTestCase): host_cell = objects.NUMACell( id=0, cpuset=set([0, 1, 2]), + pcpuset=set(), memory=2048, memory_usage=0, pinned_cpus=set(), @@ -3318,6 +3380,7 @@ class EmulatorThreadsTestCase(test.NoDBTestCase): objects.NUMACell( id=0, cpuset=set([0, 1]), + pcpuset=set(), memory=2048, cpu_usage=0, memory_usage=0, @@ -3328,6 +3391,7 @@ class EmulatorThreadsTestCase(test.NoDBTestCase): objects.NUMACell( id=1, cpuset=set([2, 3]), + pcpuset=set(), memory=2048, cpu_usage=0, memory_usage=0, @@ -3500,6 +3564,7 @@ class EmulatorThreadsTestCase(test.NoDBTestCase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3, 4, 5]), + pcpuset=set(), memory=2048, cpu_usage=0, memory_usage=0, @@ -3526,6 +3591,7 @@ class EmulatorThreadsTestCase(test.NoDBTestCase): objects.NUMACell( id=0, cpuset=set([0, 1, 2, 3, 4, 5]), + pcpuset=set(), memory=2048, cpu_usage=0, memory_usage=0, @@ -3560,6 +3626,7 @@ class EmulatorThreadsTestCase(test.NoDBTestCase): objects.NUMACell( id=0, cpuset=set([1, 2, 3]), + pcpuset=set(), memory=2048, cpu_usage=0, memory_usage=0, @@ -3584,6 +3651,7 @@ class EmulatorThreadsTestCase(test.NoDBTestCase): objects.NUMACell( id=0, cpuset=set([1, 2, 3, 4, 5]), + pcpuset=set(), memory=2048, cpu_usage=0, memory_usage=0, diff --git a/nova/virt/hardware.py b/nova/virt/hardware.py index 0a7829204b58..cd86b475042d 100644 --- a/nova/virt/hardware.py +++ b/nova/virt/hardware.py @@ -2031,9 +2031,15 @@ def numa_usage_from_instance_numa(host_topology, instance_topology, cpu_usage = host_cell.cpu_usage new_cell = objects.NUMACell( - id=host_cell.id, cpuset=host_cell.cpuset, memory=host_cell.memory, - cpu_usage=0, memory_usage=0, mempages=host_cell.mempages, - pinned_cpus=host_cell.pinned_cpus, siblings=host_cell.siblings) + id=host_cell.id, + cpuset=host_cell.cpuset, + pcpuset=set(), # TODO(stephenfin): Start setting this + memory=host_cell.memory, + cpu_usage=0, + memory_usage=0, + mempages=host_cell.mempages, + pinned_cpus=host_cell.pinned_cpus, + siblings=host_cell.siblings) if 'network_metadata' in host_cell: new_cell.network_metadata = host_cell.network_metadata diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 3c2bade01534..c42e2913bf53 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -7066,13 +7066,17 @@ class LibvirtDriver(driver.ComputeDriver): physnets=physnet_affinities[cell.id], tunneled=tunnel_affinities[cell.id]) - cell = objects.NUMACell(id=cell.id, cpuset=cpuset, - memory=cell.memory / units.Ki, - cpu_usage=0, memory_usage=0, - siblings=siblings, - pinned_cpus=set([]), - mempages=mempages, - network_metadata=network_metadata) + cell = objects.NUMACell( + id=cell.id, + cpuset=cpuset, + pcpuset=set(), # TODO(stephenfin): Start setting this + memory=cell.memory / units.Ki, + cpu_usage=0, + memory_usage=0, + siblings=siblings, + pinned_cpus=set([]), + mempages=mempages, + network_metadata=network_metadata) cells.append(cell) return objects.NUMATopology(cells=cells)