diff options
author | Martin Klozik <martinx.klozik@intel.com> | 2017-02-27 09:00:50 +0000 |
---|---|---|
committer | Martin Klozik <martinx.klozik@intel.com> | 2017-03-15 16:11:45 +0000 |
commit | d1145851ad5cb9b5abe963ee97491aa694d389dc (patch) | |
tree | 83898844525496cedbea0b4ed82130008fe87d0d /vswitches/ovs_dpdk_vhost.py | |
parent | 7c4a2cdcdd99f309dccfe0a24e829bbf3afa95f9 (diff) |
vpp: Initial support of VPP vSwitch
Support of VPP was implemented into VSPERF. Initial implementation
uses step driven testcases to configure P2P, PVP and PVVP network
scenarios. These testcases were prepared for three RFC2544 traffic
types, i.e. throughput, continuous stream and back to back.
VPP configuration is driven by new configuration option VSWITCH_VPP_ARGS.
It is possible to use three types of l2 port connection supported
by VPP, i.e. l2 xconnect (default), l2patch and l2 bridge features.
Configuration is driven by parameter VSWITCH_VPP_L2_CONNECT_MODE.
JIRA: VSPERF-495
Change-Id: Idebef9b10fb0d70796adb3405fec77302de00a7e
Signed-off-by: Martin Klozik <martinx.klozik@intel.com>
Reviewed-by: Al Morton <acmorton@att.com>
Reviewed-by: Christian Trautman <ctrautma@redhat.com>
Reviewed-by: Sridhar Rao <sridhar.rao@spirent.com>
Reviewed-by: Trevor Cooper <trevor.cooper@intel.com>
Diffstat (limited to 'vswitches/ovs_dpdk_vhost.py')
-rw-r--r-- | vswitches/ovs_dpdk_vhost.py | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/vswitches/ovs_dpdk_vhost.py b/vswitches/ovs_dpdk_vhost.py index a49c8dd7..3387fda7 100644 --- a/vswitches/ovs_dpdk_vhost.py +++ b/vswitches/ovs_dpdk_vhost.py @@ -20,7 +20,7 @@ import subprocess from src.ovs import OFBridge from src.dpdk import dpdk -from conf import settings +from conf import settings as S from vswitches.ovs import IVSwitchOvs class OvsDpdkVhost(IVSwitchOvs): @@ -43,7 +43,14 @@ class OvsDpdkVhost(IVSwitchOvs): # legacy DPDK configuration through --dpdk option of vswitchd if self.old_dpdk_config(): - vswitchd_args = ['--dpdk'] + settings.getValue('VSWITCHD_DPDK_ARGS') + # override socket-mem settings + tmp_dpdk_args = S.getValue('VSWITCHD_DPDK_ARGS') + for tmp_arg in tmp_dpdk_args: + if tmp_arg.startswith('--socket-mem'): + tmp_dpdk_args.remove(tmp_arg) + tmp_dpdk_args += ['--socket-mem ' + ','.join(S.getValue('DPDK_SOCKET_MEM'))] + vswitchd_args = ['--dpdk'] + tmp_dpdk_args + # add dpdk args to generic ovs-vswitchd settings if self._vswitchd_args: self._vswitchd_args = vswitchd_args + ['--'] + self._vswitchd_args else: @@ -52,8 +59,10 @@ class OvsDpdkVhost(IVSwitchOvs): def configure(self): """ Configure vswitchd DPDK options through ovsdb if needed """ - dpdk_config = settings.getValue('VSWITCHD_DPDK_CONFIG') + dpdk_config = S.getValue('VSWITCHD_DPDK_CONFIG') if dpdk_config and not self.old_dpdk_config(): + # override socket-mem settings + dpdk_config['dpdk-socket-mem'] = ','.join(S.getValue('DPDK_SOCKET_MEM')) # enforce calls to ovs-vsctl with --no-wait tmp_br = OFBridge(timeout=-1) for option in dpdk_config: @@ -68,12 +77,12 @@ class OvsDpdkVhost(IVSwitchOvs): dpdk.init() super(OvsDpdkVhost, self).start() # old style OVS <= 2.5.0 multi-queue enable - if settings.getValue('OVS_OLD_STYLE_MQ') and \ - int(settings.getValue('VSWITCH_DPDK_MULTI_QUEUES')): + if S.getValue('OVS_OLD_STYLE_MQ') and \ + int(S.getValue('VSWITCH_DPDK_MULTI_QUEUES')): tmp_br = OFBridge(timeout=-1) tmp_br.set_db_attribute( 'Open_vSwitch', '.', 'other_config:' + - 'n-dpdk-rxqs', settings.getValue('VSWITCH_DPDK_MULTI_QUEUES')) + 'n-dpdk-rxqs', S.getValue('VSWITCH_DPDK_MULTI_QUEUES')) def stop(self): """See IVswitch for general description @@ -92,12 +101,12 @@ class OvsDpdkVhost(IVSwitchOvs): switch_params = switch_params + params super(OvsDpdkVhost, self).add_switch(switch_name, switch_params) - if settings.getValue('VSWITCH_AFFINITIZATION_ON') == 1: + if S.getValue('VSWITCH_AFFINITIZATION_ON') == 1: # Sets the PMD core mask to VSWITCH_PMD_CPU_MASK # for CPU core affinitization self._bridges[switch_name].set_db_attribute('Open_vSwitch', '.', 'other_config:pmd-cpu-mask', - settings.getValue('VSWITCH_PMD_CPU_MASK')) + S.getValue('VSWITCH_PMD_CPU_MASK')) def add_phy_port(self, switch_name): """See IVswitch for general description @@ -110,15 +119,15 @@ class OvsDpdkVhost(IVSwitchOvs): port_name = 'dpdk' + str(dpdk_count) # PCI info. Please note there must be no blank space, eg must be # like 'options:dpdk-devargs=0000:06:00.0' - _nics = settings.getValue('NICS') + _nics = S.getValue('NICS') nic_pci = 'options:dpdk-devargs=' + _nics[dpdk_count]['pci'] params = ['--', 'set', 'Interface', port_name, 'type=dpdk', nic_pci] # multi-queue enable - if int(settings.getValue('VSWITCH_DPDK_MULTI_QUEUES')) and \ - not settings.getValue('OVS_OLD_STYLE_MQ'): + if int(S.getValue('VSWITCH_DPDK_MULTI_QUEUES')) and \ + not S.getValue('OVS_OLD_STYLE_MQ'): params += ['options:n_rxq={}'.format( - settings.getValue('VSWITCH_DPDK_MULTI_QUEUES'))] + S.getValue('VSWITCH_DPDK_MULTI_QUEUES'))] of_port = bridge.add_port(port_name, params) return (port_name, of_port) @@ -144,9 +153,24 @@ class OvsDpdkVhost(IVSwitchOvs): :returns: True if legacy --dpdk option is supported, otherwise it returns False """ - ovs_vswitchd_bin = settings.getValue('TOOLS')['ovs-vswitchd'] + ovs_vswitchd_bin = S.getValue('TOOLS')['ovs-vswitchd'] try: subprocess.check_output(ovs_vswitchd_bin + r' --help | grep "\-\-dpdk"', shell=True) return True except subprocess.CalledProcessError: return False + + def add_connection(self, switch_name, port1, port2, bidir=False): + """See IVswitch for general description + """ + raise NotImplementedError() + + def del_connection(self, switch_name, port1, port2, bidir=False): + """See IVswitch for general description + """ + raise NotImplementedError() + + def dump_connections(self, switch_name): + """See IVswitch for general description + """ + raise NotImplementedError() |