Fix get_dpdk_queues_count method

It should return queues count limited by max supported
queues value on DPDK NIC and number core for PMD.

Change-Id: Ib28e2e699b62265ae9333912c1844ae3838b2de9
Closes-Bug: #1654950
This commit is contained in:
Anastasiya 2017-01-09 16:41:15 +04:00 committed by Anastasia Balobashina
parent ca498021fd
commit df106ebc51
2 changed files with 51 additions and 4 deletions

View File

@ -91,11 +91,12 @@ class NIC(DPDKMixin, NailgunObject):
@classmethod
def get_dpdk_queues_count(cls, instance):
dpdk_cpu_pinning = utils.get_in(instance.node.attributes,
'cpu_pinning', 'dpdk', 'value') or 0
from nailgun.objects import NodeAttributes
cpu_pinning = NodeAttributes.distribute_node_cpus(
instance.node)['components']
pmd_core_count = len(cpu_pinning.get('ovs_pmd_core_mask', []))
max_queues = utils.get_in(instance.meta, 'max_queues') or 0
# dpdk for ovs_core_mask is dpdk_cpu_pinning - 1
return min(max_queues, dpdk_cpu_pinning - 1)
return min(max_queues, pmd_core_count)
@classmethod
def dpdk_available(cls, instance, dpdk_drivers):

View File

@ -245,6 +245,52 @@ class TestNICObject(BaseTestCase):
self.env.clusters[0])
self.assertEqual(len(nic_interfaces), len(interfaces))
def _prepare_dpdk_settings(self, dpdk_cpu_pinning, max_queues):
node = self.env.nodes[0]
dpdk_nic = node.nic_interfaces[0]
numa_topology = {'numa_nodes': [
{'id': 0, 'cpus': [1, 2, 3, 4]}
]}
node.meta['numa_topology'] = numa_topology
node.attributes['cpu_pinning'] = {
'dpdk': {
'value': dpdk_cpu_pinning
}
}
objects.NIC.update(dpdk_nic, {
'meta': {
'dpdk': {
'available': True
},
'max_queues': max_queues,
},
'attributes': {
'dpdk': {
'enabled': {
'value': True
}
}
}
})
return dpdk_nic
def test_get_dpdk_queues_count_limited_pmd_core_count(self):
dpdk_cpu_pinning = 4
max_queues = 10
dpdk_queues_count = dpdk_cpu_pinning - 1
dpdk_nic = self._prepare_dpdk_settings(dpdk_cpu_pinning, max_queues)
self.assertEqual(objects.NIC.get_dpdk_queues_count(dpdk_nic),
dpdk_queues_count)
def test_get_dpdk_queues_count_limited_max_queues(self):
dpdk_cpu_pinning = 4
max_queues = 2
dpdk_queues_count = max_queues
dpdk_nic = self._prepare_dpdk_settings(dpdk_cpu_pinning, max_queues)
self.assertEqual(objects.NIC.get_dpdk_queues_count(dpdk_nic),
dpdk_queues_count)
class TestIPAddrObject(BaseTestCase):