From 058dfaa4ad10b8fd3df7da7793f4633ac2afe64c Mon Sep 17 00:00:00 2001 From: Peter Mikus Date: Wed, 11 May 2016 15:07:06 +0200 Subject: Add test cases with "dpdk no-multi-seg" in vpp startup config - JIRA: CSIT-73 - Add ability to configure no-multi-seg parameter in VPP startup configuration - Add keywords to selectively configure parameters in startup configuration - Modify testcases Change-Id: I3c5c0a1cc2b1156d5a87ff36628b50793dd9ac5f Signed-off-by: Peter Mikus --- resources/libraries/python/VppConfigGenerator.py | 42 ++++++++++- resources/libraries/robot/default.robot | 90 +++++++++++++++++++----- resources/libraries/robot/performance.robot | 4 +- 3 files changed, 115 insertions(+), 21 deletions(-) (limited to 'resources') diff --git a/resources/libraries/python/VppConfigGenerator.py b/resources/libraries/python/VppConfigGenerator.py index a9c7618c92..9ca9fc401d 100644 --- a/resources/libraries/python/VppConfigGenerator.py +++ b/resources/libraries/python/VppConfigGenerator.py @@ -55,6 +55,7 @@ dpdk {{ {txqueuesconfig} {pciconfig} {rssconfig} +{nomultiseg} }} """ # End VPP configuration template. @@ -204,6 +205,25 @@ class VppConfigGenerator(object): logger.debug('Setting hostname {} max_tx_queues config to {}'.\ format(hostname, max_tx_queues_config)) + def add_no_multi_seg_config(self, node): + """Add No Multi Seg configuration for node. + + :param node: DUT node. + :type node: dict + :return: nothing + """ + if node['type'] != NodeType.DUT: + raise ValueError('Node type is not a DUT') + hostname = Topology.get_node_hostname(node) + if not hostname in self._nodeconfig: + self._nodeconfig[hostname] = {} + if not 'no_multi_seg_config' in self._nodeconfig[hostname]: + self._nodeconfig[hostname]['no_multi_seg_config'] = [] + self._nodeconfig[hostname]['no_multi_seg_config'].append( + "no-multi-seg") + logger.debug('Setting hostname {} config with {}'.\ + format(hostname, "no-multi-seg")) + def remove_all_pci_devices(self, node): """Remove PCI device configuration from node. @@ -294,6 +314,21 @@ class VppConfigGenerator(object): logger.debug('Clearing Max TX Queues config for hostname {}.'.\ format(hostname)) + def remove_no_multi_seg_config(self, node): + """Remove No Multi Seg configuration from node. + + :param node: DUT node. + :type node: dict + :return: nothing + """ + if node['type'] != NodeType.DUT: + raise ValueError('Node type is not a DUT') + hostname = Topology.get_node_hostname(node) + if hostname in self._nodeconfig: + self._nodeconfig[hostname]['no_multi_seg_config'] = [] + logger.debug('Clearing No Multi Seg config for hostname {}.'.\ + format(hostname)) + def apply_config(self, node, waittime=5, retries=12): """Generate and apply VPP configuration for node. @@ -318,6 +353,7 @@ class VppConfigGenerator(object): heapsizeconfig = "" rssconfig = "" txqueuesconfig = "" + nomultiseg = "" if hostname in self._nodeconfig: cfg = self._nodeconfig[hostname] @@ -341,12 +377,16 @@ class VppConfigGenerator(object): txqueuesconfig = " " + "\n ".join( cfg['max_tx_queues_config']) + if 'no_multi_seg_config' in cfg: + nomultiseg = " " + "\n ".join(cfg['no_multi_seg_config']) + vppconfig = VPP_CONFIG_TEMPLATE.format(cpuconfig=cpuconfig, pciconfig=pciconfig, socketmemconfig=socketmemconfig, heapsizeconfig=heapsizeconfig, rssconfig=rssconfig, - txqueuesconfig=txqueuesconfig) + txqueuesconfig=txqueuesconfig, + nomultiseg = nomultiseg) logger.debug('Writing VPP config to host {}: "{}"'.format(hostname, vppconfig)) diff --git a/resources/libraries/robot/default.robot b/resources/libraries/robot/default.robot index 8e03e62983..59c5e137a0 100644 --- a/resources/libraries/robot/default.robot +++ b/resources/libraries/robot/default.robot @@ -28,9 +28,9 @@ | | [Documentation] | Prepare all TGs before traffic scripts execution | | All TGs Set Interface Default Driver | ${nodes} -| Setup '${m}' worker threads and rss '${n}' without HTT on all DUTs +| Add '${m}' worker threads and rss '${n}' without HTT to all DUTs | | [Documentation] | Setup M worker threads without HTT and rss N in startup -| | ... | configuration of VPP on all DUTs +| | ... | configuration of VPP to all DUTs | | ${cpu}= | Catenate | main-core | 0 | corelist-workers | | ${cpu}= | Run Keyword If | '${m}' == '1' | Catenate | ${cpu} | 1 | | ... | ELSE IF | '${m}' == '2' | Catenate | ${cpu} | 1-2 @@ -38,11 +38,11 @@ | | ... | ELSE IF | '${m}' == '6' | Catenate | ${cpu} | 1-6 | | ... | ELSE | Fail | Not supported combination | | ${rss}= | Catenate | rss | ${n} -| | Setup worker threads and rss on all DUTs | ${cpu} | ${rss} +| | Add worker threads and rss to all DUTs | ${cpu} | ${rss} -| Setup '${m}' worker threads and rss '${n}' with HTT on all DUTs +| Add '${m}' worker threads and rss '${n}' with HTT to all DUTs | | [Documentation] | Setup M worker threads with HTT and rss N in startup -| | ... | configuration of VPP on all DUTs +| | ... | configuration of VPP to all DUTs | | ${cpu}= | Catenate | main-core | 0 | corelist-workers | | ${cpu}= | Run Keyword If | '${m}' == '2' | Catenate | ${cpu} | 1,10 | | ... | ELSE IF | '${m}' == '4' | Catenate | ${cpu} | 1-2,10-11 @@ -50,24 +50,67 @@ | | ... | ELSE IF | '${m}' == '8' | Catenate | ${cpu} | 1-4,10-13 | | ... | ELSE | Fail | Not supported combination | | ${rss}= | Catenate | rss | ${n} -| | Setup worker threads and rss on all DUTs | ${cpu} | ${rss} +| | Add worker threads and rss to all DUTs | ${cpu} | ${rss} -| Setup worker threads and rss on all DUTs -| | [Documentation] | Setup worker threads and rss in startup configuration of -| | ... | VPP on all DUTs +| Add worker threads and rss to all DUTs +| | [Documentation] | Setup worker threads and rss in VPP startup configuration +| | ... | to all DUTs +| | ... +| | ... | *Arguments:* +| | ... | - ${cpu} - CPU configuration. Type: string +| | ... | - ${rss} - RSS configuration. Type: string +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Add worker threads and rss to all DUTs \| main-core 0 \ +| | ... | \| rss 2 | | [Arguments] | ${cpu} | ${rss} | | ${duts}= | Get Matches | ${nodes} | DUT* | | :FOR | ${dut} | IN | @{duts} | | | Add CPU config | ${nodes['${dut}']} | | | ... | ${cpu} -| | | Add PCI device | ${nodes['${dut}']} | | | Add RSS config | ${nodes['${dut}']} | | | ... | ${rss} -| | | Apply config | ${nodes['${dut}']} -| Reset startup configuration of VPP on all DUTs -| | [Documentation] | Reset startup configuration of VPP on all DUTs -| | ${cpu}= | Catenate | main-core | 1 +| Add all PCI devices to all DUTs +| | [Documentation] | Add all available PCI devices from topology file to VPP +| | ... | startup configuration to all DUTs +| | ${duts}= | Get Matches | ${nodes} | DUT* +| | :FOR | ${dut} | IN | @{duts} +| | | Add PCI device | ${nodes['${dut}']} + +| Add PCI device to DUT +| | [Documentation] | Add PCI device to VPP startup configuration +| | ... | to DUT specified as argument +| | ... +| | ... | *Arguments:* +| | ... | - ${node} - DUT node. Type: dictionary +| | ... | - ${pci_address} - PCI address. Type: string +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Add PCI device to DUT \| ${nodes['DUT1']} \ +| | ... | \| 0000:00:00.0 +| | [Arguments] | ${node} | ${pci_address} +| | Add PCI device | ${node} | ${pci_address} + +| Add No Multi Seg to all DUTs +| | [Documentation] | Add No Multi Seg to VPP startup configuration to all +| | ... | DUTs +| | ${duts}= | Get Matches | ${nodes} | DUT* +| | :FOR | ${dut} | IN | @{duts} +| | | Add No Multi Seg Config | ${nodes['${dut}']} + +| Add Max Tx Queues '${m}' to all DUTs +| | [Documentation] | Add Max Tx Queues M to VPP startup configuration to all +| | ... | DUTs +| | ${queues}= | Catenate | max-tx-queues | ${m} +| | ${duts}= | Get Matches | ${nodes} | DUT* +| | :FOR | ${dut} | IN | @{duts} +| | | Add Max Tx Queues Config | ${nodes['${dut}']} | ${queues} + +| Remove startup configuration of VPP from all DUTs +| | [Documentation] | Remove VPP startup configuration from all DUTs | | ${duts}= | Get Matches | ${nodes} | DUT* | | :FOR | ${dut} | IN | @{duts} | | | Remove All PCI Devices | ${nodes['${dut}']} @@ -75,8 +118,19 @@ | | | Remove Socketmem Config | ${nodes['${dut}']} | | | Remove Heapsize Config | ${nodes['${dut}']} | | | Remove RSS Config | ${nodes['${dut}']} -| | | Add CPU Config | ${nodes['${dut}']} -| | | ... | ${cpu} -| | | Add PCI Device | ${nodes['${dut}']} -| | | Apply Config | ${nodes['${dut}']} +| | | Remove Max Tx Queues Config | ${nodes['${dut}']} +| | | Remove No Multi Seg Config | ${nodes['${dut}']} +| Setup default startup configuration of VPP on all DUTs +| | [Documentation] | Setup default startup configuration of VPP to all DUTs +| | Remove startup configuration of VPP from all DUTs +| | Add '1' worker threads and rss '1' without HTT to all DUTs +| | Add all PCI devices to all DUTs +| | Apply startup configuration on all VPP DUTs + +| Apply startup configuration on all VPP DUTs +| | [Documentation] | Apply startup configuration of VPP and restart VPP on all +| | ... | DUTs +| | ${duts}= | Get Matches | ${nodes} | DUT* +| | :FOR | ${dut} | IN | @{duts} +| | | Apply Config | ${nodes['${dut}']} diff --git a/resources/libraries/robot/performance.robot b/resources/libraries/robot/performance.robot index 6c06288f53..73f5bb726a 100644 --- a/resources/libraries/robot/performance.robot +++ b/resources/libraries/robot/performance.robot @@ -146,7 +146,7 @@ | 3-node Performance Suite Setup | | [Arguments] | ${topology_type} -| | Reset startup configuration of VPP on all DUTs +| | Setup default startup configuration of VPP on all DUTs | | Update All Interface Data On All Nodes | ${nodes} | | 3-node circular Topology Variables Setup | | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2} @@ -156,7 +156,7 @@ 3-node Performance Suite Setup with DUT's NIC model | | [Arguments] | ${topology_type} | ${nic_model} -| | Reset startup configuration of VPP on all DUTs +| | Setup default startup configuration of VPP on all DUTs | | Update All Interface Data On All Nodes | ${nodes} | | 3-node circular Topology Variables Setup with DUT interface model | | ... | ${nic_model} -- cgit 1.2.3-korg