hardware: fix hugepages memory usage per intances
In the algo to compute memory, when several instances are their memory
backed on a same host NUMA node, we always compute the memory used
based on the initial 'used' value of hostcell.
Partial-Bug: #1594529
Change-Id: I5b8684b10688b91ca36a509ea0cb8bee397263d6
Signed-off-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@redhat.com>
(cherry picked from commit b1c45fedc3
)
This commit is contained in:
parent
7ae2dc840a
commit
d7864fbb9c
|
@ -1340,6 +1340,41 @@ class NUMATopologyTest(test.NoDBTestCase):
|
||||||
self.assertEqual(0, hpages1_2M.total)
|
self.assertEqual(0, hpages1_2M.total)
|
||||||
self.assertEqual(3, hpages1_2M.used)
|
self.assertEqual(3, hpages1_2M.used)
|
||||||
|
|
||||||
|
def test_host_usage_contiguous_pages_compute(self):
|
||||||
|
hosttopo = objects.NUMATopology(cells=[
|
||||||
|
objects.NUMACell(id=0, cpuset=set([0, 1, 2, 3]), memory=160,
|
||||||
|
cpu_usage=0, memory_usage=0, mempages=[
|
||||||
|
objects.NUMAPagesTopology(
|
||||||
|
size_kb=4, total=32768, used=32),
|
||||||
|
objects.NUMAPagesTopology(
|
||||||
|
size_kb=2048, total=16, used=2)],
|
||||||
|
siblings=[set([0]), set([1]), set([2]), set([3])],
|
||||||
|
pinned_cpus=set([])),
|
||||||
|
])
|
||||||
|
instance1 = objects.InstanceNUMATopology(cells=[
|
||||||
|
objects.InstanceNUMACell(id=0, cpuset=set([0, 1, 2]), memory=64,
|
||||||
|
pagesize=4),
|
||||||
|
])
|
||||||
|
instance2 = objects.InstanceNUMATopology(cells=[
|
||||||
|
objects.InstanceNUMACell(id=0, cpuset=set([0, 1]), memory=32,
|
||||||
|
pagesize=4),
|
||||||
|
])
|
||||||
|
instance3 = objects.InstanceNUMATopology(cells=[
|
||||||
|
objects.InstanceNUMACell(id=0, cpuset=set([0, 1]), memory=16,
|
||||||
|
pagesize=2048),
|
||||||
|
])
|
||||||
|
hostusage = hw.numa_usage_from_instances(
|
||||||
|
hosttopo, [instance1, instance2, instance3])
|
||||||
|
|
||||||
|
# instance1, instance2 are consuming 96MiB smallpages which
|
||||||
|
# means 96*1024/4 = 24576, plus 32 pages already used.
|
||||||
|
self.assertEqual(4, hostusage.cells[0].mempages[0].size_kb)
|
||||||
|
self.assertEqual(24608, hostusage.cells[0].mempages[0].used)
|
||||||
|
# instance3 is consuming 16MiB largepages plus 2 pages already
|
||||||
|
# used.
|
||||||
|
self.assertEqual(2048, hostusage.cells[0].mempages[1].size_kb)
|
||||||
|
self.assertEqual(10, hostusage.cells[0].mempages[1].used)
|
||||||
|
|
||||||
def test_host_usage_sparse(self):
|
def test_host_usage_sparse(self):
|
||||||
hosttopo = objects.NUMATopology(cells=[
|
hosttopo = objects.NUMATopology(cells=[
|
||||||
objects.NUMACell(id=0, cpuset=set([0, 1, 2, 3]), memory=1024,
|
objects.NUMACell(id=0, cpuset=set([0, 1, 2, 3]), memory=1024,
|
||||||
|
|
|
@ -1610,7 +1610,7 @@ def numa_usage_from_instances(host, instances, free=False):
|
||||||
|
|
||||||
if instancecell.pagesize and instancecell.pagesize > 0:
|
if instancecell.pagesize and instancecell.pagesize > 0:
|
||||||
newcell.mempages = _numa_pagesize_usage_from_cell(
|
newcell.mempages = _numa_pagesize_usage_from_cell(
|
||||||
hostcell, instancecell, sign)
|
newcell, instancecell, sign)
|
||||||
|
|
||||||
if instance.cpu_pinning_requested:
|
if instance.cpu_pinning_requested:
|
||||||
pinned_cpus = set(instancecell.cpu_pinning.values())
|
pinned_cpus = set(instancecell.cpu_pinning.values())
|
||||||
|
|
Loading…
Reference in New Issue