X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FDpdkUtil.py;fp=resources%2Flibraries%2Fpython%2FDpdkUtil.py;h=30efbde378b4ef0d0c17536290e6c4e2d7cc0fb3;hp=41c79a84cf8aca71d39a1ad54f8e043c5d21ec89;hb=96a3c5c7ace8357d26e833a46845486787aa75c3;hpb=5ce709e1a3d91c0d077855e5e6614034c8d8e8df diff --git a/resources/libraries/python/DpdkUtil.py b/resources/libraries/python/DpdkUtil.py index 41c79a84cf..30efbde378 100644 --- a/resources/libraries/python/DpdkUtil.py +++ b/resources/libraries/python/DpdkUtil.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018 Cisco and/or its affiliates. +# Copyright (c) 2019 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -28,26 +28,25 @@ class DpdkUtil(object): :returns: EAL parameters string. :rtype: str """ + eal_version = '-v' # Set the hexadecimal bitmask of the cores to run on. - eal_corelist = '-l {} '.format(args['eal_corelist'])\ + eal_corelist = '-l {}'.format( + args.get('eal_corelist', ''))\ if args.get('eal_corelist', '') else '' # Set master core. - eal_master_core = '--master-lcore 0 ' - # Set the number of memory channels to use. - eal_mem_channels = '-n {} '.format(args['eal_mem_channels'])\ - if args.get('eal_mem_channels', '') else '' - # Set the memory to allocate on specific sockets (comma separated). - eal_socket_mem = '--socket-mem {} '.format(args['eal_socket_mem'])\ - if args.get('eal_socket_mem', '') else '' + eal_master_core = '--master-lcore 0' # Load an external driver. Multiple -d options are allowed. - eal_driver = '-d /usr/lib/librte_pmd_virtio.so ' - eal_options = '-v '\ - + eal_corelist\ - + eal_master_core\ - + eal_mem_channels\ - + eal_socket_mem\ - + eal_driver - return eal_options + eal_driver = '-d /usr/lib/librte_pmd_virtio.so'\ + if args.get('eal_driver', True) else '' + # Run in memory. + eal_in_memory = '--in-memory'\ + if args.get('eal_in_memory', False) else '' + + return ' '.join([eal_version, + eal_corelist, + eal_master_core, + eal_driver, + eal_in_memory]) @staticmethod def get_pmd_options(**args): @@ -60,65 +59,80 @@ class DpdkUtil(object): """ # Set the forwarding mode: io, mac, mac_retry, mac_swap, flowgen, # rxonly, txonly, csum, icmpecho, ieee1588 - pmd_fwd_mode = '--forward-mode={} '.format(args['pmd_fwd_mode'])\ - if args.get('pmd_fwd_mode', '') else '' + pmd_fwd_mode = '--forward-mode={}'.format( + args.get('pmd_fwd_mode', 'io')) \ + if args.get('pmd_fwd_mode', 'io') else '' # Set the number of packets per burst to N. - pmd_burst = '--burst=64 ' + pmd_burst = '--burst=64' # Set the number of descriptors in the TX rings to N. - pmd_txd = '--txd={} '.format(args.get('pmd_txd', '256')) \ - if args.get('pmd_txd', '256') else '' + pmd_txd = '--txd={}'.format( + args.get('pmd_txd', '1024')) \ + if args.get('pmd_txd', '1024') else '' # Set the number of descriptors in the RX rings to N. - pmd_rxd = '--rxd={} '.format(args.get('pmd_rxd', '256')) \ - if args.get('pmd_rxd', '256') else '' + pmd_rxd = '--rxd={}'.format( + args.get('pmd_rxd', '1024')) \ + if args.get('pmd_rxd', '1024') else '' # Set the number of queues in the TX to N. - pmd_txq = '--txq={} '.format(args.get('pmd_txq', '1')) \ + pmd_txq = '--txq={}'.format( + args.get('pmd_txq', '1')) \ if args.get('pmd_txq', '1') else '' # Set the number of queues in the RX to N. - pmd_rxq = '--rxq={} '.format(args.get('pmd_rxq', '1')) \ + pmd_rxq = '--rxq={}'.format( + args.get('pmd_rxq', '1')) \ if args.get('pmd_rxq', '1') else '' - # Set the hexadecimal bitmask of TX queue flags. - pmd_txqflags = '--txqflags=0xf00 ' + # Set the hexadecimal bitmask of TX offloads. + pmd_tx_offloads = '--txqflags=0xf00'\ + if args.get('pmd_tx_offloads', True) else '' # Set the number of mbufs to be allocated in the mbuf pools. - pmd_total_num_mbufs = '--total-num-mbufs={} '.format( - args['pmd_num_mbufs']) if args.get('pmd_num_mbufs', '') else '' + pmd_total_num_mbufs = '--total-num-mbufs={}'.format( + args.get('pmd_num_mbufs', '')) \ + if args.get('pmd_num_mbufs', '') else '' # Set the max packet length. - pmd_max_pkt_len = "--max-pkt-len={0}".format(args["pmd_max_pkt_len"]) \ + pmd_max_pkt_len = '--max-pkt-len={}'.format( + args.get("pmd_max_pkt_len", "")) \ if args.get("pmd_max_pkt_len", "") else "" - # Set the hexadecimal bitmask of the ports for forwarding. - pmd_portmask = '--portmask={} '.format(args['pmd_portmask'])\ - if args.get('pmd_portmask', '') else '' # Disable hardware VLAN. - pmd_disable_hw_vlan = '--disable-hw-vlan '\ - if args.get('pmd_disable_hw_vlan', '') else '' - # Disable RSS (Receive Side Scaling). - pmd_disable_rss = '--disable-rss '\ - if args.get('pmd_disable_rss', '') else '' + pmd_disable_hw_vlan = '--disable-hw-vlan'\ + if args.get('pmd_disable_hw_vlan', True) else '' # Set the MAC address XX:XX:XX:XX:XX:XX of the peer port N - pmd_eth_peer_0 = '--eth-peer={} '.format(args['pmd_eth_peer_0'])\ + pmd_eth_peer_0 = '--eth-peer={}'.format( + args.get('pmd_eth_peer_0', ''))\ if args.get('pmd_eth_peer_0', '') else '' - pmd_eth_peer_1 = '--eth-peer={} '.format(args['pmd_eth_peer_1'])\ + pmd_eth_peer_1 = '--eth-peer={}'.format( + args.get('pmd_eth_peer_1', ''))\ if args.get('pmd_eth_peer_1', '') else '' # Set the number of forwarding cores based on coremask. - pmd_nb_cores = '--nb-cores={} '.format( - bin(int(args['eal_coremask'], 0)).count('1')-1)\ - if args.get('eal_coremask', '') else '' - pmd_options = '-- '\ - + pmd_fwd_mode\ - + pmd_burst\ - + pmd_txd\ - + pmd_rxd\ - + pmd_txq\ - + pmd_rxq\ - + pmd_txqflags\ - + pmd_total_num_mbufs\ - + pmd_portmask\ - + pmd_disable_hw_vlan\ - + pmd_disable_rss\ - + pmd_eth_peer_0\ - + pmd_eth_peer_1\ - + pmd_nb_cores\ - + pmd_max_pkt_len - return pmd_options + pmd_nb_cores = '--nb-cores={}'.format( + args.get('pmd_nb_cores', ''))\ + if args.get('pmd_nb_cores', '') else '' + + return ' '.join([pmd_fwd_mode, + pmd_burst, + pmd_txd, + pmd_rxd, + pmd_txq, + pmd_rxq, + pmd_tx_offloads, + pmd_total_num_mbufs, + pmd_disable_hw_vlan, + pmd_eth_peer_0, + pmd_eth_peer_1, + pmd_max_pkt_len, + pmd_nb_cores]) + + @staticmethod + def get_testpmd_cmdline(**kwargs): + """Get DPDK testpmd command line arguments. + + :param args: Key-value testpmd parameters. + :type args: dict + :returns: Command line string. + :rtype: str + """ + eal_options = DpdkUtil.get_eal_options(**kwargs) + pmd_options = DpdkUtil.get_pmd_options(**kwargs) + + return 'testpmd {0} -- {1}'.format(eal_options, pmd_options) @staticmethod def dpdk_testpmd_start(node, **kwargs): @@ -135,7 +149,7 @@ class DpdkUtil(object): ssh = SSH() ssh.connect(node) - cmd = "/start-testpmd.sh {0} {1}".format(eal_options, pmd_options) + cmd = "/start-testpmd.sh {0} -- {1}".format(eal_options, pmd_options) exec_cmd_no_error(node, cmd, sudo=True) ssh.disconnect(node)