Skip to content

Commit e8a9a57

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Rework 'hardware.numa_usage_from_instances'"
2 parents 49572ce + 213fa4c commit e8a9a57

File tree

5 files changed

+123
-164
lines changed

5 files changed

+123
-164
lines changed

nova/compute/resource_tracker.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,8 +1092,8 @@ def _update_usage(self, usage, nodename, sign=1):
10921092
free = sign == -1
10931093

10941094
# ...and reserialize once we save it back
1095-
cn.numa_topology = hardware.numa_usage_from_instances(
1096-
host_numa_topology, [instance_numa_topology], free)._to_json()
1095+
cn.numa_topology = hardware.numa_usage_from_instance_numa(
1096+
host_numa_topology, instance_numa_topology, free)._to_json()
10971097

10981098
def _get_migration_context_resource(self, resource, instance,
10991099
prefix='new_'):

nova/scheduler/host_manager.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,8 +302,8 @@ def _locked_consume_from_request(self, spec_obj):
302302
limits=self.limits.get('numa_topology'),
303303
pci_requests=pci_requests, pci_stats=self.pci_stats)
304304

305-
self.numa_topology = hardware.numa_usage_from_instances(
306-
self.numa_topology, [spec_obj.numa_topology])
305+
self.numa_topology = hardware.numa_usage_from_instance_numa(
306+
self.numa_topology, spec_obj.numa_topology)
307307

308308
# ...and the PCI usage
309309
if pci_requests:

nova/tests/unit/scheduler/test_host_manager.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,7 +1447,7 @@ def test_stat_consumption_from_compute_node_rescue_unshelving(self):
14471447

14481448
@mock.patch('nova.utils.synchronized',
14491449
side_effect=lambda a: lambda f: lambda *args: f(*args))
1450-
@mock.patch('nova.virt.hardware.numa_usage_from_instances')
1450+
@mock.patch('nova.virt.hardware.numa_usage_from_instance_numa')
14511451
@mock.patch('nova.objects.Instance')
14521452
@mock.patch('nova.virt.hardware.numa_fit_instance_to_host')
14531453
def test_stat_consumption_from_instance(self,
@@ -1478,7 +1478,7 @@ def test_stat_consumption_from_instance(self,
14781478
limits=None, pci_requests=None,
14791479
pci_stats=None)
14801480
numa_usage_mock.assert_called_once_with(fake_host_numa_topology,
1481-
[fake_numa_topology])
1481+
fake_numa_topology)
14821482
sync_mock.assert_called_once_with(("fakehost", "fakenode"))
14831483
self.assertEqual(fake_host_numa_topology, host.numa_topology)
14841484
self.assertIsNotNone(host.updated)

nova/tests/unit/virt/test_hardware.py

Lines changed: 44 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1376,8 +1376,9 @@ def test_host_usage_contiguous(self):
13761376
pagesize=2048),
13771377
])
13781378

1379-
hostusage = hw.numa_usage_from_instances(
1380-
hosttopo, [instance1, instance2, instance3])
1379+
hostusage = hw.numa_usage_from_instance_numa(hosttopo, instance1)
1380+
hostusage = hw.numa_usage_from_instance_numa(hostusage, instance2)
1381+
hostusage = hw.numa_usage_from_instance_numa(hostusage, instance3)
13811382

13821383
self.assertEqual(len(hosttopo), len(hostusage))
13831384

@@ -1446,8 +1447,10 @@ def test_host_usage_contiguous_pages_compute(self):
14461447
objects.InstanceNUMACell(id=0, cpuset=set([0, 1]), memory=16,
14471448
pagesize=2048),
14481449
])
1449-
hostusage = hw.numa_usage_from_instances(
1450-
hosttopo, [instance1, instance2, instance3])
1450+
1451+
hostusage = hw.numa_usage_from_instance_numa(hosttopo, instance1)
1452+
hostusage = hw.numa_usage_from_instance_numa(hostusage, instance2)
1453+
hostusage = hw.numa_usage_from_instance_numa(hostusage, instance3)
14511454

14521455
# instance1, instance2 are consuming 96MiB smallpages which
14531456
# means 96*1024/4 = 24576, plus 32 pages already used.
@@ -1494,8 +1497,8 @@ def test_host_usage_sparse(self):
14941497
size_kb=4, total=512, used=0)]),
14951498
])
14961499

1497-
hostusage = hw.numa_usage_from_instances(
1498-
hosttopo, [instance1, instance2])
1500+
hostusage = hw.numa_usage_from_instance_numa(hosttopo, instance1)
1501+
hostusage = hw.numa_usage_from_instance_numa(hostusage, instance2)
14991502

15001503
self.assertEqual(len(hosttopo), len(hostusage))
15011504

@@ -1553,8 +1556,8 @@ def test_host_usage_culmulative_with_free(self):
15531556
objects.InstanceNUMACell(id=1, cpuset=set([3]), memory=256),
15541557
objects.InstanceNUMACell(id=2, cpuset=set([4]), memory=256)])
15551558

1556-
hostusage = hw.numa_usage_from_instances(
1557-
hosttopo, [instance1])
1559+
hostusage = hw.numa_usage_from_instance_numa(hosttopo, instance1)
1560+
15581561
self.assertIsInstance(hostusage.cells[0], objects.NUMACell)
15591562
self.assertEqual(hostusage.cells[0].cpu_usage, 5)
15601563
self.assertEqual(hostusage.cells[0].memory_usage, 1024)
@@ -1568,8 +1571,9 @@ def test_host_usage_culmulative_with_free(self):
15681571
self.assertEqual(hostusage.cells[2].memory_usage, 256)
15691572

15701573
# Test freeing of resources
1571-
hostusage = hw.numa_usage_from_instances(
1572-
hostusage, [instance1], free=True)
1574+
hostusage = hw.numa_usage_from_instance_numa(hostusage, instance1,
1575+
free=True)
1576+
15731577
self.assertEqual(hostusage.cells[0].cpu_usage, 2)
15741578
self.assertEqual(hostusage.cells[0].memory_usage, 512)
15751579

@@ -1627,8 +1631,8 @@ def test_reserved_hugepgaes_success(self):
16271631
{'node': 0, 'size': 2048, 'count': 128},
16281632
{'node': 1, 'size': 1048576, 'count': 1}])
16291633
hosttopo, instance1 = self._topo_usage_reserved_page_size()
1630-
hostusage = hw.numa_usage_from_instances(
1631-
hosttopo, [instance1])
1634+
1635+
hostusage = hw.numa_usage_from_instance_numa(hosttopo, instance1)
16321636

16331637
self.assertEqual(hostusage.cells[0].mempages[0].size_kb, 2048)
16341638
self.assertEqual(hostusage.cells[0].mempages[0].total, 512)
@@ -1674,60 +1678,15 @@ def test_topo_usage_none(self):
16741678
objects.InstanceNUMACell(id=2, cpuset=set([2]), memory=256),
16751679
])
16761680

1677-
hostusage = hw.numa_usage_from_instances(
1678-
None, [instance1])
1681+
hostusage = hw.numa_usage_from_instance_numa(None, instance1)
16791682
self.assertIsNone(hostusage)
16801683

1681-
hostusage = hw.numa_usage_from_instances(
1682-
hosttopo, [])
1683-
self.assertEqual(hostusage.cells[0].cpu_usage, 0)
1684-
self.assertEqual(hostusage.cells[0].memory_usage, 0)
1685-
self.assertEqual(hostusage.cells[1].cpu_usage, 0)
1686-
self.assertEqual(hostusage.cells[1].memory_usage, 0)
1687-
1688-
hostusage = hw.numa_usage_from_instances(
1689-
hosttopo, None)
1684+
hostusage = hw.numa_usage_from_instance_numa(hosttopo, None)
16901685
self.assertEqual(hostusage.cells[0].cpu_usage, 0)
16911686
self.assertEqual(hostusage.cells[0].memory_usage, 0)
16921687
self.assertEqual(hostusage.cells[1].cpu_usage, 0)
16931688
self.assertEqual(hostusage.cells[1].memory_usage, 0)
16941689

1695-
# Test the case where we have an instance with numa topology
1696-
# and one without
1697-
def test_topo_usage_mixed(self):
1698-
hosttopo = objects.NUMATopology(cells=[
1699-
objects.NUMACell(id=0, cpuset=set([0, 1]), memory=512,
1700-
cpu_usage=0, memory_usage=0, mempages=[
1701-
objects.NUMAPagesTopology(
1702-
size_kb=4, total=512, used=0)],
1703-
siblings=[set([0]), set([1])],
1704-
pinned_cpus=set([])),
1705-
objects.NUMACell(id=1, cpuset=set([2, 3]), memory=512,
1706-
cpu_usage=0, memory_usage=0, mempages=[
1707-
objects.NUMAPagesTopology(
1708-
size_kb=4, total=512, used=0)],
1709-
siblings=[set([2]), set([3])],
1710-
pinned_cpus=set([])),
1711-
])
1712-
instance1_topo = objects.InstanceNUMATopology(cells=[
1713-
objects.InstanceNUMACell(id=0, cpuset=set([0, 1]), memory=256),
1714-
objects.InstanceNUMACell(id=1, cpuset=set([2]), memory=128),
1715-
])
1716-
instance2_topo = None
1717-
1718-
hostusage = hw.numa_usage_from_instances(hosttopo, [instance1_topo])
1719-
self.assertEqual(hostusage.cells[0].cpu_usage, 2)
1720-
self.assertEqual(hostusage.cells[0].memory_usage, 256)
1721-
self.assertEqual(hostusage.cells[1].cpu_usage, 1)
1722-
self.assertEqual(hostusage.cells[1].memory_usage, 128)
1723-
1724-
# This is like processing an instance with no numa_topology
1725-
hostusage = hw.numa_usage_from_instances(hostusage, instance2_topo)
1726-
self.assertEqual(hostusage.cells[0].cpu_usage, 2)
1727-
self.assertEqual(hostusage.cells[0].memory_usage, 256)
1728-
self.assertEqual(hostusage.cells[1].cpu_usage, 1)
1729-
self.assertEqual(hostusage.cells[1].memory_usage, 128)
1730-
17311690
def test_topo_usage_with_network_metadata(self):
17321691
r"""Validate behavior with network_metadata.
17331692
@@ -1748,7 +1707,7 @@ def test_topo_usage_with_network_metadata(self):
17481707
mempages=[], pinned_cpus=set([])),
17491708
])
17501709

1751-
new_topo = hw.numa_usage_from_instances(topo, [])
1710+
new_topo = hw.numa_usage_from_instance_numa(topo, None)
17521711
self.assertIn('network_metadata', new_topo.cells[0])
17531712
self.assertNotIn('network_metadata', new_topo.cells[1])
17541713

@@ -1889,8 +1848,8 @@ def test_get_fitting_success_no_limits(self):
18891848
fitted_instance1 = hw.numa_fit_instance_to_host(
18901849
self.host, self.instance1)
18911850
self.assertIsInstance(fitted_instance1, objects.InstanceNUMATopology)
1892-
self.host = hw.numa_usage_from_instances(self.host,
1893-
[fitted_instance1])
1851+
self.host = hw.numa_usage_from_instance_numa(
1852+
self.host, fitted_instance1)
18941853
fitted_instance2 = hw.numa_fit_instance_to_host(
18951854
self.host, self.instance3)
18961855
self.assertIsInstance(fitted_instance2, objects.InstanceNUMATopology)
@@ -1911,8 +1870,8 @@ def test_get_fitting_culmulative_fails_limits(self):
19111870
self.host, self.instance1, self.limits)
19121871
self.assertIsInstance(fitted_instance1, objects.InstanceNUMATopology)
19131872
self.assertEqual(1, fitted_instance1.cells[0].id)
1914-
self.host = hw.numa_usage_from_instances(self.host,
1915-
[fitted_instance1])
1873+
self.host = hw.numa_usage_from_instance_numa(
1874+
self.host, fitted_instance1)
19161875
fitted_instance2 = hw.numa_fit_instance_to_host(
19171876
self.host, self.instance2, self.limits)
19181877
self.assertIsNone(fitted_instance2)
@@ -1922,8 +1881,8 @@ def test_get_fitting_culmulative_success_limits(self):
19221881
self.host, self.instance1, self.limits)
19231882
self.assertIsInstance(fitted_instance1, objects.InstanceNUMATopology)
19241883
self.assertEqual(1, fitted_instance1.cells[0].id)
1925-
self.host = hw.numa_usage_from_instances(self.host,
1926-
[fitted_instance1])
1884+
self.host = hw.numa_usage_from_instance_numa(
1885+
self.host, fitted_instance1)
19271886
fitted_instance2 = hw.numa_fit_instance_to_host(
19281887
self.host, self.instance3, self.limits)
19291888
self.assertIsInstance(fitted_instance2, objects.InstanceNUMATopology)
@@ -2873,8 +2832,8 @@ def test_cpu_pinning_usage_from_instances(self):
28732832
cpu_pinning={0: 1, 1: 2},
28742833
cpu_policy=fields.CPUAllocationPolicy.DEDICATED)])
28752834

2876-
host_pin = hw.numa_usage_from_instances(
2877-
host_pin, [inst_pin_1, inst_pin_2])
2835+
host_pin = hw.numa_usage_from_instance_numa(host_pin, inst_pin_1)
2836+
host_pin = hw.numa_usage_from_instance_numa(host_pin, inst_pin_2)
28782837
self.assertEqual(set([0, 1, 2, 3]),
28792838
host_pin.cells[0].pinned_cpus)
28802839

@@ -2896,8 +2855,10 @@ def test_cpu_pinning_usage_from_instances_free(self):
28962855
cpuset=set([0, 1]), memory=1024, id=0,
28972856
cpu_pinning={0: 0, 1: 3},
28982857
cpu_policy=fields.CPUAllocationPolicy.DEDICATED)])
2899-
host_pin = hw.numa_usage_from_instances(
2900-
host_pin, [inst_pin_1, inst_pin_2], free=True)
2858+
host_pin = hw.numa_usage_from_instance_numa(host_pin, inst_pin_1,
2859+
free=True)
2860+
host_pin = hw.numa_usage_from_instance_numa(host_pin, inst_pin_2,
2861+
free=True)
29012862
self.assertEqual(set(), host_pin.cells[0].pinned_cpus)
29022863

29032864
def test_host_usage_from_instances_fail(self):
@@ -2921,9 +2882,9 @@ def test_host_usage_from_instances_fail(self):
29212882
cpu_pinning={0: 0, 1: 2},
29222883
cpu_policy=fields.CPUAllocationPolicy.DEDICATED)])
29232884

2885+
host_pin = hw.numa_usage_from_instance_numa(host_pin, inst_pin_1)
29242886
self.assertRaises(exception.CPUPinningInvalid,
2925-
hw.numa_usage_from_instances, host_pin,
2926-
[inst_pin_1, inst_pin_2])
2887+
hw.numa_usage_from_instance_numa, host_pin, inst_pin_2)
29272888

29282889
def test_host_usage_from_instances_isolate(self):
29292890
host_pin = objects.NUMATopology(
@@ -2942,7 +2903,7 @@ def test_host_usage_from_instances_isolate(self):
29422903
cpu_thread_policy=fields.CPUThreadAllocationPolicy.ISOLATE
29432904
)])
29442905

2945-
new_cell = hw.numa_usage_from_instances(host_pin, [inst_pin_1])
2906+
new_cell = hw.numa_usage_from_instance_numa(host_pin, inst_pin_1)
29462907
self.assertEqual(host_pin.cells[0].cpuset,
29472908
new_cell.cells[0].pinned_cpus)
29482909
self.assertEqual(new_cell.cells[0].cpu_usage, 4)
@@ -2964,9 +2925,8 @@ def test_host_usage_from_instances_isolate_free(self):
29642925
cpu_thread_policy=fields.CPUThreadAllocationPolicy.ISOLATE
29652926
)])
29662927

2967-
new_cell = hw.numa_usage_from_instances(host_pin,
2968-
[inst_pin_1],
2969-
free=True)
2928+
new_cell = hw.numa_usage_from_instance_numa(host_pin, inst_pin_1,
2929+
free=True)
29702930
self.assertEqual(set([]), new_cell.cells[0].pinned_cpus)
29712931
self.assertEqual(new_cell.cells[0].cpu_usage, 0)
29722932

@@ -2988,7 +2948,7 @@ def test_host_usage_from_instances_isolated_without_siblings(self):
29882948
cpu_thread_policy=fields.CPUThreadAllocationPolicy.ISOLATE
29892949
)])
29902950

2991-
new_cell = hw.numa_usage_from_instances(host_pin, [inst_pin])
2951+
new_cell = hw.numa_usage_from_instance_numa(host_pin, inst_pin)
29922952
self.assertEqual(inst_pin.cells[0].cpuset,
29932953
new_cell.cells[0].pinned_cpus)
29942954
self.assertEqual(new_cell.cells[0].cpu_usage, 3)
@@ -3011,9 +2971,8 @@ def test_host_usage_from_instances_isolated_without_siblings_free(self):
30112971
cpu_thread_policy=fields.CPUThreadAllocationPolicy.ISOLATE
30122972
)])
30132973

3014-
new_cell = hw.numa_usage_from_instances(host_pin,
3015-
[inst_pin],
3016-
free=True)
2974+
new_cell = hw.numa_usage_from_instance_numa(host_pin, inst_pin,
2975+
free=True)
30172976
self.assertEqual(set([3]), new_cell.cells[0].pinned_cpus)
30182977
self.assertEqual(new_cell.cells[0].cpu_usage, 1)
30192978

@@ -3221,8 +3180,8 @@ def test_isolate_usage(self):
32213180
cpu_pinning={0: 0},
32223181
cpuset_reserved=set([1]))])
32233182

3224-
host_topo = hw.numa_usage_from_instances(
3225-
host_topo, [inst_topo])
3183+
host_topo = hw.numa_usage_from_instance_numa(host_topo, inst_topo)
3184+
32263185
self.assertEqual(2, host_topo.cells[0].cpu_usage)
32273186
self.assertEqual(set([0, 1]), host_topo.cells[0].pinned_cpus)
32283187
self.assertEqual(0, host_topo.cells[1].cpu_usage)
@@ -3249,8 +3208,9 @@ def test_isolate_full_usage(self):
32493208
cpu_pinning={0: 2},
32503209
cpuset_reserved=set([3]))])
32513210

3252-
host_topo = hw.numa_usage_from_instances(
3253-
host_topo, [inst_topo1, inst_topo2])
3211+
host_topo = hw.numa_usage_from_instance_numa(host_topo, inst_topo1)
3212+
host_topo = hw.numa_usage_from_instance_numa(host_topo, inst_topo2)
3213+
32543214
self.assertEqual(2, host_topo.cells[0].cpu_usage)
32553215
self.assertEqual(set([0, 1]), host_topo.cells[0].pinned_cpus)
32563216

0 commit comments

Comments
 (0)