aboutsummaryrefslogtreecommitdiffstats
path: root/vswitches
diff options
context:
space:
mode:
authorChristian Trautman <ctrautma@redhat.com>2016-07-22 15:54:18 -0400
committerMaryam Tahhan <maryam.tahhan@intel.com>2016-08-24 08:43:16 +0000
commit0fb65d2afadad1f092788f5a4f251b09851b3ae7 (patch)
tree33a8fa5f6dd575d30bc748deb137433a53031218 /vswitches
parentbd8712a917d9a0c7272506fd85816f857c32529e (diff)
Vanilla_Multi_Queue: Add vanilla ovs multi-queue functionality
Adds multi-queue for vanilla OVS using virtio-net. TunTap ports will use multi_queue parameter when ports are created/deleted if guest nic queues are enabled and vswitch is ovs vanilla. Virtio net will now add guest nic queues to qemu command line if appropriate. Reworked multi-queue documentation to reflect these changes. Adds vhost net thread affinitization which is recommended when performing vanilla ovs multi-queue. Guests will require ethtool if using l2fwd or linux bridge as the loopback application when vanilla ovs multi-queue is enabled. Modified dpdk setting in vswitch conf to be better worded for separation from vanilla ovs multi-queue. Updated release and installation doc for new vloop image that includes required ethtool utility. JIRA: VSPERF-373 Change-Id: Idb550515190b1a93390308c11f54da368f962512 Signed-off-by: Christian Trautman <ctrautma@redhat.com>
Diffstat (limited to 'vswitches')
-rw-r--r--vswitches/ovs_dpdk_vhost.py13
-rw-r--r--vswitches/ovs_vanilla.py27
2 files changed, 22 insertions, 18 deletions
diff --git a/vswitches/ovs_dpdk_vhost.py b/vswitches/ovs_dpdk_vhost.py
index cebc14b2..c0764c87 100644
--- a/vswitches/ovs_dpdk_vhost.py
+++ b/vswitches/ovs_dpdk_vhost.py
@@ -70,11 +70,11 @@ class OvsDpdkVhost(IVSwitchOvs):
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_MULTI_QUEUES')):
+ int(settings.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_MULTI_QUEUES'))
+ 'n-dpdk-rxqs', settings.getValue('VSWITCH_DPDK_MULTI_QUEUES'))
def stop(self):
"""See IVswitch for general description
@@ -112,10 +112,11 @@ class OvsDpdkVhost(IVSwitchOvs):
port_name = 'dpdk' + str(dpdk_count)
params = ['--', 'set', 'Interface', port_name, 'type=dpdk']
# multi-queue enable
- if int(settings.getValue('VSWITCH_MULTI_QUEUES')) and \
+
+ if int(settings.getValue('VSWITCH_DPDK_MULTI_QUEUES')) and \
not settings.getValue('OVS_OLD_STYLE_MQ'):
params += ['options:n_rxq={}'.format(
- settings.getValue('VSWITCH_MULTI_QUEUES'))]
+ settings.getValue('VSWITCH_DPDK_MULTI_QUEUES'))]
of_port = bridge.add_port(port_name, params)
return (port_name, of_port)
@@ -131,10 +132,10 @@ class OvsDpdkVhost(IVSwitchOvs):
port_name = 'dpdkvhostuser' + str(vhost_count)
params = ['--', 'set', 'Interface', port_name, 'type=dpdkvhostuser']
# multi queue enable
- if int(settings.getValue('VSWITCH_MULTI_QUEUES')) and \
+ if int(settings.getValue('VSWITCH_DPDK_MULTI_QUEUES')) and \
not settings.getValue('OVS_OLD_STYLE_MQ'):
params += ['options:n_rxq={}'.format(
- settings.getValue('VSWITCH_MULTI_QUEUES'))]
+ settings.getValue('VSWITCH_DPDK_MULTI_QUEUES'))]
of_port = bridge.add_port(port_name, params)
return (port_name, of_port)
diff --git a/vswitches/ovs_vanilla.py b/vswitches/ovs_vanilla.py
index f880dfaf..332725e3 100644
--- a/vswitches/ovs_vanilla.py
+++ b/vswitches/ovs_vanilla.py
@@ -60,9 +60,10 @@ class OvsVanilla(IVSwitchOvs):
# remove all tap interfaces
for i in range(self._vport_id):
tapx = 'tap' + str(i)
- tasks.run_task(['sudo', 'ip', 'tuntap', 'del',
- tapx, 'mode', 'tap'],
- self._logger, 'Deleting ' + tapx, False)
+ tap_cmd_list = ['sudo', 'ip', 'tuntap', 'del', tapx, 'mode', 'tap']
+ if int(settings.getValue('GUEST_NIC_QUEUES')):
+ tap_cmd_list += ['multi_queue']
+ tasks.run_task(tap_cmd_list, self._logger, 'Deleting ' + tapx, False)
self._vport_id = 0
super(OvsVanilla, self).stop()
@@ -71,7 +72,6 @@ class OvsVanilla(IVSwitchOvs):
self._module_manager.remove_modules()
-
def add_phy_port(self, switch_name):
"""
Method adds port based on detected device names.
@@ -111,14 +111,17 @@ class OvsVanilla(IVSwitchOvs):
# Create tap devices for the VM
tap_name = 'tap' + str(self._vport_id)
self._vport_id += 1
-
- tasks.run_task(['sudo', 'ip', 'tuntap', 'del',
- tap_name, 'mode', 'tap'],
- self._logger, 'Creating tap device...', False)
-
- tasks.run_task(['sudo', 'ip', 'tuntap', 'add',
- tap_name, 'mode', 'tap'],
- self._logger, 'Creating tap device...', False)
+ tap_cmd_list = ['sudo', 'ip', 'tuntap', 'del', tap_name, 'mode', 'tap']
+ if int(settings.getValue('GUEST_NIC_QUEUES')):
+ tap_cmd_list += ['multi_queue']
+ tasks.run_task(tap_cmd_list, self._logger,
+ 'Creating tap device...', False)
+
+ tap_cmd_list = ['sudo', 'ip', 'tuntap', 'add', tap_name, 'mode', 'tap']
+ if int(settings.getValue('GUEST_NIC_QUEUES')):
+ tap_cmd_list += ['multi_queue']
+ tasks.run_task(tap_cmd_list, self._logger,
+ 'Creating tap device...', False)
tasks.run_task(['sudo', 'ip', 'addr', 'flush', 'dev', tap_name],
self._logger, 'Remove IP', False)