Merge "Adds NUMA CPU Pinning object modeling"
This commit is contained in:
commit
3ce8122567
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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',
|
||||
|
|
Loading…
Reference in New Issue