diff options
author | Martin Klozik <martinx.klozik@intel.com> | 2017-07-20 15:49:16 +0100 |
---|---|---|
committer | Martin Klozik <martinx.klozik@intel.com> | 2017-07-21 08:32:30 +0100 |
commit | 01455386f7186721ffd7578d95a84580a5ff7087 (patch) | |
tree | 35ad64b8c83c9a81f5acb53ce812ef914ac635f1 | |
parent | d3b124a22bf3aa2c05a5cb030f37b97db3d27dbd (diff) |
dpdk: Support dpdk vhost-user client mode
Support of vhost-user client mode has been added for both
OVS and VPP. VSPERF configures vhost-user server mode
in vswitches by default for backward compatibility.
Support of vhost-user server mode is deprecated
in OVS and it can be removed in future releases. Once it will
happen, we have to change vsperf default behavior to
usage of vhost-user client ports at vswitch side.
This patch also fixes processing of boolean configuration
parameters passed via --test-params option. In the past
it was not possible to set boolean value to False through
--test-params option.
JIRA: VSPERF-517
Change-Id: I65e341f820edd6c720043a4acc74c5140b05db18
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>
-rw-r--r-- | conf/02_vswitch.conf | 7 | ||||
-rw-r--r-- | conf/__init__.py | 2 | ||||
-rw-r--r-- | docs/testing/user/userguide/testusage.rst | 6 | ||||
-rw-r--r-- | vnfs/qemu/qemu_dpdk_vhost_user.py | 3 | ||||
-rw-r--r-- | vswitches/ovs_dpdk_vhost.py | 13 | ||||
-rw-r--r-- | vswitches/vpp_dpdk_vhost.py | 6 |
6 files changed, 31 insertions, 6 deletions
diff --git a/conf/02_vswitch.conf b/conf/02_vswitch.conf index 6a6027a9..c50a5ddd 100644 --- a/conf/02_vswitch.conf +++ b/conf/02_vswitch.conf @@ -153,6 +153,13 @@ VSWITCHD_DPDK_CONFIG = { # Note: VSPERF will automatically detect, which type of DPDK configuration should # be used. +# Defines if VSWITCH should be a server for sockets of DPDK vhost-user +# interfaces (True) or not (False). Support of vhost user server mode +# in Open vSwitch is deprecated and will be removed in future releases. +# Note: Qemu 2.7 and newer is required to support settings +# VSWITCH_VHOSTUSER_SERVER_MODE = False +VSWITCH_VHOSTUSER_SERVER_MODE = True + # To enable multi queue with dpdk modify the below param to the number of # queues for dpdk. 0 = disabled VSWITCH_DPDK_MULTI_QUEUES = 0 diff --git a/conf/__init__.py b/conf/__init__.py index e24111dc..e714a7bf 100644 --- a/conf/__init__.py +++ b/conf/__init__.py @@ -93,7 +93,7 @@ class Settings(object): master_value = getattr(self, attr) # Check if parameter value was modified by CLI option cli_value = get_test_param(attr, None) - if cli_value: + if cli_value is not None: # TRAFFIC dictionary is not overridden by CLI option # but only updated by specified values if attr == 'TRAFFIC': diff --git a/docs/testing/user/userguide/testusage.rst b/docs/testing/user/userguide/testusage.rst index b6939e57..4d3528d0 100644 --- a/docs/testing/user/userguide/testusage.rst +++ b/docs/testing/user/userguide/testusage.rst @@ -296,7 +296,7 @@ Executing tests with VMs To run tests using vhost-user as guest access method: -1. Set VHOST_METHOD and VNF of your settings file to: +1. Set VSWITCH and VNF of your settings file to: .. code-block:: python @@ -317,6 +317,10 @@ To run tests using vhost-user as guest access method: $ ./vsperf --conf-file=<path_to_custom_conf>/10_custom.conf +**NOTE:** By default vSwitch is acting as a server for dpdk vhost-user sockets. +In case, that QEMU should be a server for vhost-user sockets, then parameter +``VSWITCH_VHOSTUSER_SERVER_MODE`` should be set to ``False``. + Executing tests with VMs using Vanilla OVS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/vnfs/qemu/qemu_dpdk_vhost_user.py b/vnfs/qemu/qemu_dpdk_vhost_user.py index 3e9aecc8..93147838 100644 --- a/vnfs/qemu/qemu_dpdk_vhost_user.py +++ b/vnfs/qemu/qemu_dpdk_vhost_user.py @@ -68,10 +68,11 @@ class QemuDpdkVhostUser(IVnfQemu): else: vhost_folder = S.getValue('TOOLS')['ovs_var_tmp'] + nic_mode = '' if S.getValue('VSWITCH_VHOSTUSER_SERVER_MODE') else ',server' self._cmd += ['-chardev', 'socket,id=char' + ifi + ',path=' + vhost_folder + - 'dpdkvhostuser' + ifi, + 'dpdkvhostuser' + ifi + nic_mode, '-netdev', 'type=vhost-user,id=' + net + ',chardev=char' + ifi + ',vhostforce' + queue_str, diff --git a/vswitches/ovs_dpdk_vhost.py b/vswitches/ovs_dpdk_vhost.py index 13aef173..3b20be35 100644 --- a/vswitches/ovs_dpdk_vhost.py +++ b/vswitches/ovs_dpdk_vhost.py @@ -142,9 +142,18 @@ class OvsDpdkVhost(IVSwitchOvs): from 0 """ bridge = self._bridges[switch_name] - vhost_count = self._get_port_count('type=dpdkvhostuser') + + if S.getValue('VSWITCH_VHOSTUSER_SERVER_MODE'): + nic_type = 'dpdkvhostuser' + else: + nic_type = 'dpdkvhostuserclient' + + vhost_count = self._get_port_count('type={}'.format(nic_type)) port_name = 'dpdkvhostuser' + str(vhost_count) - params = ['--', 'set', 'Interface', port_name, 'type=dpdkvhostuser'] + params = ['--', 'set', 'Interface', port_name, 'type={}'.format(nic_type)] + if not S.getValue('VSWITCH_VHOSTUSER_SERVER_MODE'): + params += ['--', 'set', 'Interface', port_name, 'options:vhost-server-path=' + '{}{}'.format(S.getValue('TOOLS')['ovs_var_tmp'], port_name)] if S.getValue('VSWITCH_JUMBO_FRAMES_ENABLED'): params += ['mtu_request={}'.format( S.getValue('VSWITCH_JUMBO_FRAMES_SIZE'))] diff --git a/vswitches/vpp_dpdk_vhost.py b/vswitches/vpp_dpdk_vhost.py index 42f1cdf1..317f3798 100644 --- a/vswitches/vpp_dpdk_vhost.py +++ b/vswitches/vpp_dpdk_vhost.py @@ -225,7 +225,11 @@ class VppDpdkVhost(IVSwitch, tasks.Process): """See IVswitch for general description """ socket_name = S.getValue('TOOLS')['ovs_var_tmp'] + 'dpdkvhostuser' + str(len(self._virt_ports)) - output = self.run_vppctl(['create', 'vhost-user', 'socket', socket_name, 'server'] + + if S.getValue('VSWITCH_VHOSTUSER_SERVER_MODE'): + mode = ['server'] + else: + mode = [] + output = self.run_vppctl(['create', 'vhost-user', 'socket', socket_name] + mode + S.getValue('VSWITCH_VPP_VHOSTUSER_ARGS')) if output[0].find('returned') >= 0: raise RuntimeError('VPP VhostUser interface cannot be created.') |