Merge "Serialize max queues count for dpdk interfases"

This commit is contained in:
Jenkins 2017-01-06 10:32:53 +00:00 committed by Gerrit Code Review
commit 068c864edc
4 changed files with 40 additions and 3 deletions

View File

@ -89,6 +89,14 @@ class NIC(DPDKMixin, NailgunObject):
return driver
return None
@classmethod
def get_dpdk_queues_count(cls, instance):
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)
@classmethod
def dpdk_available(cls, instance, dpdk_drivers):
"""Checks availability of DPDK for given interface.
@ -340,7 +348,8 @@ class NIC(DPDKMixin, NailgunObject):
'dpdk', {}).get('available', False)
},
'pci_id': interface_properties.get('pci_id', ''),
'numa_node': interface_properties.get('numa_node')
'numa_node': interface_properties.get('numa_node'),
'max_queues': interface_properties.get('max_queues')
}

View File

@ -1456,6 +1456,9 @@ class DPDKSerializerMixin90(object):
vendor_specific = network_scheme['interfaces'][iface.name].get(
'vendor_specific', {})
vendor_specific.update({'dpdk_driver': driver})
max_queues = objects.NIC.get_dpdk_queues_count(iface)
if max_queues > 1:
vendor_specific.update({'max_queues': max_queues})
network_scheme['interfaces'][iface.name][
'vendor_specific'] = vendor_specific
return network_scheme

View File

@ -264,7 +264,8 @@ class TestHandlers(BaseIntegrationTest):
'pci_id': '1234:5678'
},
'pci_id': '8765:4321',
'numa_node': 1
'numa_node': 1,
'max_queues': 2
}}]
)
node_data = {'mac': node['mac'], 'meta': new_meta, 'is_agent': True}
@ -349,6 +350,8 @@ class TestHandlers(BaseIntegrationTest):
})
self.assertEqual(
resp_nic['meta']['dpdk'], {'available': False})
self.assertEqual(
resp_nic['meta']['max_queues'], 2)
def create_cluster_and_node_with_dpdk_support(self, segment_type,
drivers_mock):

View File

@ -129,7 +129,8 @@ class TestDeploymentAttributesSerialization90(
@mock.patch('nailgun.objects.Release.get_supported_dpdk_drivers')
def _check_dpdk_serializing(self, drivers_mock, has_vlan_tag=False,
sriov=False):
sriov=False, max_queues=0,
dpdk_cpu_pinning=0):
drivers_mock.return_value = {
'driver_1': ['test_id:1', 'test_id:2']
}
@ -149,6 +150,9 @@ class TestDeploymentAttributesSerialization90(
self._assign_dpdk_to_nic(node, dpdk_nic, other_nic)
dpdk_interface_name = dpdk_nic.name
dpdk_nic.meta['max_queues'] = max_queues
if dpdk_cpu_pinning:
node.attributes['cpu_pinning']['dpdk']['value'] = dpdk_cpu_pinning
objects.Cluster.prepare_for_deployment(self.cluster_db)
@ -193,6 +197,12 @@ class TestDeploymentAttributesSerialization90(
else:
self.assertEqual(vendor_specific.get('dpdk_driver'), 'driver_1')
if max_queues > 1 and dpdk_cpu_pinning > 2:
self.assertEqual(vendor_specific.get('max_queues'),
min(max_queues, dpdk_cpu_pinning - 1))
else:
self.assertFalse('max_queues' in vendor_specific)
def test_serialization_with_dpdk(self):
self._check_dpdk_serializing()
@ -207,6 +217,18 @@ class TestDeploymentAttributesSerialization90(
self._create_cluster_with_vxlan()
self._check_dpdk_serializing(has_vlan_tag=True)
def test_serialization_with_dpdk_queues_limited_max_queues(self):
max_queues = 2
dpdk_cpu_pinning = 4
self._check_dpdk_serializing(max_queues=max_queues,
dpdk_cpu_pinning=dpdk_cpu_pinning)
def test_serialization_with_dpdk_queues_limited_dpdk_cpu_pinning(self):
max_queues = 4
dpdk_cpu_pinning = 3
self._check_dpdk_serializing(max_queues=max_queues,
dpdk_cpu_pinning=dpdk_cpu_pinning)
@mock.patch('nailgun.objects.Release.get_supported_dpdk_drivers')
def _check_dpdk_bond_serializing(self, attributes, drivers_mock):
drivers_mock.return_value = {