Merge "Serialize max queues count for dpdk interfases"
This commit is contained in:
commit
068c864edc
|
@ -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')
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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 = {
|
||||
|
|
Loading…
Reference in New Issue