Merge "Adds NUMA CPU Pinning object modeling"

This commit is contained in:
Jenkins 2014-12-04 12:37:07 +00:00 committed by Gerrit Code Review
commit 3ce8122567
3 changed files with 35 additions and 6 deletions

View File

@ -21,7 +21,8 @@ from nova.virt import hardware
class NUMACell(base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'
# Version 1.1: Added pinned_cpus and siblings fields
VERSION = '1.1'
fields = {
'id': fields.IntegerField(read_only=True),
@ -29,8 +30,21 @@ class NUMACell(base.NovaObject):
'memory': fields.IntegerField(),
'cpu_usage': fields.IntegerField(default=0),
'memory_usage': fields.IntegerField(default=0),
'pinned_cpus': fields.SetOfIntegersField(),
'siblings': fields.ListOfSetsOfIntegersField()
}
def __init__(self, **kwargs):
super(NUMACell, self).__init__(**kwargs)
if 'pinned_cpus' not in kwargs:
self.pinned_cpus = set()
if 'siblings' not in kwargs:
self.siblings = []
@property
def free_cpus(self):
return self.cpuset - self.pinned_cpus or set()
def _to_dict(self):
return {
'id': self.id,
@ -55,14 +69,15 @@ class NUMACell(base.NovaObject):
class NUMATopology(base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'
# Version 1.1: NUMACell version 1.1
VERSION = '1.1'
fields = {
'cells': fields.ListOfObjectsField('NUMACell'),
}
obj_relationships = {
'NUMACell': [('1.0', '1.0')]
'NUMACell': [('1.0', '1.0'), ('1.1', '1.1')]
}
@classmethod

View File

@ -14,7 +14,6 @@
from nova import objects
from nova.tests.unit.objects import test_objects
fake_obj_numa = objects.NUMATopology(
cells=[
objects.NUMACell(
@ -33,6 +32,21 @@ class _TestNUMA(object):
self.assertEqual(d1, d2)
def test_pinning_logic(self):
obj = objects.NUMATopology(cells=[
objects.NUMACell(
id=0, cpuset=set([1, 2]), memory=512,
cpu_usage=2, memory_usage=256,
pinned_cpus=set([1])),
objects.NUMACell(
id=1, cpuset=set([3, 4]), memory=512,
cpu_usage=1, memory_usage=128,
pinned_cpus=set([]))
]
)
self.assertEqual(set([2]), obj.cells[0].free_cpus)
self.assertEqual(set([3, 4]), obj.cells[1].free_cpus)
class TestNUMA(test_objects._LocalTest,
_TestNUMA):

View File

@ -1117,8 +1117,8 @@ object_data = {
'NetworkList': '1.2-aa4ad23f035b97a41732ea8b3445fc5e',
'NetworkRequest': '1.1-f31192f5a725017707f989585e12d7dc',
'NetworkRequestList': '1.1-beeab521ac9450f1f5ef4eaa945a783c',
'NUMACell': '1.0-8dd39f5bcc4ce44a3490cd0278af54dc',
'NUMATopology': '1.0-790f6bdff85bf6e5677f409f3a4f1c6a',
'NUMACell': '1.1-e77e87a1fb75fdb4f46c331372d3332c',
'NUMATopology': '1.1-790f6bdff85bf6e5677f409f3a4f1c6a',
'PciDevice': '1.2-29e35c3199f3b98ce66e5d1212612818',
'PciDeviceList': '1.1-2896df4f5b06579e5f35adba5fcae9db',
'Quotas': '1.2-36098cf2143e6535873c3fa3d6fe56f7',