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
(cherry picked from commit df106ebc51)
This commit is contained in:
Anastasiya 2017-01-09 16:41:15 +04:00
parent c4953aea02
commit 0257e80dfb
2 changed files with 45 additions and 2 deletions

View File

@ -94,8 +94,10 @@ class NIC(DPDKMixin, NailgunObject):
dpdk_cpu_pinning = utils.get_in(instance.node.attributes,
'cpu_pinning', 'dpdk', 'value') or 0
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)
# Number CPU for ovs_pmd_core_mask equals number DPDK CPU pinning - 1
# 1 CPU is needed for ovs_core_mask
pmd_core_count = dpdk_cpu_pinning - 1 if dpdk_cpu_pinning > 0 else 0
return min(max_queues, pmd_core_count)
@classmethod
def dpdk_available(cls, instance, dpdk_drivers):

View File

@ -2312,6 +2312,47 @@ class TestNICObject(BaseTestCase):
self.assertEqual(len(mac_list), 1)
self.assertEqual(mac_list[0], expected_mac)
def _prepare_dpdk_settings(self, dpdk_cpu_pinning, max_queues):
node = self.env.nodes[0]
dpdk_nic = node.nic_interfaces[0]
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):