# execute tests and display results
# parameters:
-# $1 - vswitch and vnf combination, one of OVS_vanilla, OVS_with_DPDK_and_vHost_Cuse, OVS_with_DPDK_and_vHost_User
+# $1 - vswitch and vnf combination, one of OVS_vanilla, OVS_with_DPDK_and_vHost_User
# $2 - CI job type, one of verify, merge, daily
function execute_vsperf() {
# figure out list of TCs and execution parameters
echo "$VSPERF_BIN --opnfvpod="$NODE_NAME" --vswitch OvsVanilla --vnf QemuVirtioNet $CONF_FILE $TESTPARAM $TESTCASES &> $LOG_FILE"
$VSPERF_BIN --opnfvpod="$NODE_NAME" --vswitch OvsVanilla --vnf QemuVirtioNet $CONF_FILE $TESTPARAM $TESTCASES &> $LOG_FILE
;;
- "OVS_with_DPDK_and_vHost_Cuse")
- # figure out log file name
- LOG_SUBDIR="OvsDpdkVhostCuse"
- LOG_FILE="${LOG_FILE_PREFIX}_${LOG_SUBDIR}_${DATE_SUFFIX}.log"
-
- echo "$VSPERF_BIN --opnfvpod="$NODE_NAME" --vswitch OvsDpdkVhost --vnf QemuDpdkVhostCuse $CONF_FILE $TESTPARAM $TESTCASES &> $LOG_FILE"
- $VSPERF_BIN --opnfvpod="$NODE_NAME" --vswitch OvsDpdkVhost --vnf QemuDpdkVhostCuse $CONF_FILE $TESTPARAM $TESTCASES &> $LOG_FILE
- ;;
*)
# figure out log file name
LOG_SUBDIR="OvsDpdkVhost"
# deployment specific paths to OVS and DPDK
OVS_DIR_VANILLA = os.path.join(ROOT_DIR, 'src_vanilla/ovs/ovs/')
-RTE_SDK_CUSE = os.path.join(ROOT_DIR, 'src_cuse/dpdk/dpdk/')
-OVS_DIR_CUSE = os.path.join(ROOT_DIR, 'src_cuse/ovs/ovs/')
-
RTE_SDK_USER = os.path.join(ROOT_DIR, 'src/dpdk/dpdk/')
OVS_DIR_USER = os.path.join(ROOT_DIR, 'src/ovs/ovs/')
-# the same qemu version is used for vanilla, vHost User and Cuse
+# the same qemu version is used for vanilla and vHost User
QEMU_DIR = os.path.join(ROOT_DIR, 'src/qemu/qemu/')
# ############################
.. http://creativecommons.org/licenses/by/4.0
.. (c) OPNFV, Intel Corporation, AT&T and others.
+OPNFV D Release
+===============
+* Remove support for vhost cuse
+
OPNFV Colorado Release
======================
* Support for DPDK v16.07
==============
- Implementation of system statistics based upon pidstat command line tool.
-- Support of PVVP deployment scenario using bhost-cuse and vhost user access
+- Support of PVVP deployment scenario using vhost-cuse and vhost user access
methods
August 2015
* Vanilla OVS
* OVS with vhost_user as the guest access method (with DPDK support)
-* OVS with vhost_cuse s the guest access method (with DPDK support)
The vhost_user build will reside in src/ovs/
-The vhost_cuse build will reside in vswitchperf/src_cuse
The Vanilla OVS build will reside in vswitchperf/src_vanilla
To delete a src subdirectory and its contents to allow you to re-clone simply
.. code-block:: console
- VHOST_METHOD='user'
+ VSWITCH = 'OvsDpdkVhost'
VNF = 'QemuDpdkVhost'
2. If needed, recompile src for all OVS variants
3. Run test:
-.. code-block:: console
-
- $ ./vsperf --conf-file=<path_to_custom_conf>/10_custom.conf
-
-To run tests using vhost-cuse as guest access method:
-
-1. Set VHOST_METHOD and VNF of your settings file to:
-
-.. code-block:: console
-
- VHOST_METHOD='cuse'
- VNF = 'QemuDpdkVhostCuse'
-
-2. If needed, recompile src for all OVS variants
-
-.. code-block:: console
-
- $ cd src
- $ make distclean
- $ make
-
-3. Run test:
-
.. code-block:: console
$ ./vsperf --conf-file=<path_to_custom_conf>/10_custom.conf
# Contributors:
# Aihua Li, Huawei Technologies.
-SUBBUILDS = src_cuse src_vanilla
+SUBBUILDS = src_vanilla
.PHONY: vhost subbuilds $(SUBBUILDS)
all clean distclean: vhost subbuilds
endif
WORK_DIR = dpdk
TAG_DONE_FLAG = $(WORK_DIR)/.$(DPDK_TAG).tag.done
-DPDK_CUSE = ../../src_cuse/dpdk
# VHOST configuration options are stored in different files based on DPDK version
# v1.2.3r0-v1.6.0r2 - configuration inside config/defconfig_x86_64-default-linuxapp-gcc
$(AT)cd $(WORK_DIR) && git clean -xfd *.o
clobber:
$(AT)rm -rf $(WORK_DIR)
- $(AT)rm -rf $(DPDK_CUSE)
# distclean is for developer who would like to keep the
# clone git repo, saving time to fetch again from url
$(WORK_DIR):
$(AT)git clone $(DPDK_URL)
- $(AT)mkdir -p $(DPDK_CUSE)
- $(AT)cp -rf ./* $(DPDK_CUSE)
$(TAG_DONE_FLAG): $(WORK_DIR)
$(AT)cd $(WORK_DIR); git checkout $(DPDK_TAG)
CONFIG_CMD =
CONFIG_CMD += ./configure
OVS_VANILLA = ../../src_vanilla/ovs
-OVS_CUSE = ../../src_cuse/ovs
# If WITH_LINUX is defined, OVS is built without DPDK but with kernel
# module
clobber:
$(AT)rm -rf $(WORK_DIR)
$(AT)rm -rf $(OVS_VANILLA)
- $(AT)rm -rf $(OVS_CUSE)
# distclean is for developer who would like to keep the
# clone git repo, saving time to fetch again from url
$(AT)git clone $(OVS_URL)
$(AT)mkdir -p $(OVS_VANILLA)
$(AT)cp -rf ./* $(OVS_VANILLA)
- $(AT)mkdir -p $(OVS_CUSE)
- $(AT)cp -rf ./* $(OVS_CUSE)
$(TAG_DONE_FLAG): $(WORK_DIR)
$(AT)cd ovs; git checkout $(OVS_TAG)
if settings.getValue('VSWITCH').endswith('Vanilla'):
# settings paths for Vanilla
settings.setValue('OVS_DIR', (settings.getValue('OVS_DIR_VANILLA')))
- elif settings.getValue('VSWITCH').endswith('Vhost'):
- if settings.getValue('VNF').endswith('Cuse'):
- # settings paths for Cuse
- settings.setValue('RTE_SDK', (settings.getValue('RTE_SDK_CUSE')))
- settings.setValue('OVS_DIR', (settings.getValue('OVS_DIR_CUSE')))
- else:
- # settings paths for VhostUser
- settings.setValue('RTE_SDK', (settings.getValue('RTE_SDK_USER')))
- settings.setValue('OVS_DIR', (settings.getValue('OVS_DIR_USER')))
else:
# default - set to VHOST USER but can be changed during enhancement
settings.setValue('RTE_SDK', (settings.getValue('RTE_SDK_USER')))
"""
the method generates testcase name for releng
"""
- cuse = int_data['cuse']
vanilla = int_data['vanilla']
res_name = ""
- names = {'phy2phy_tput': ["tput_ovsdpdk", "tput_ovsdpdk", "tput_ovs"],
- 'back2back': ["b2b_ovsdpdk", "b2b_ovsdpdk", "b2b_ovs"],
- 'phy2phy_tput_mod_vlan': ["tput_mod_vlan_ovsdpdk", "tput_mod_vlan_ovsdpdk", "tput_mod_vlan_ovs"],
- 'phy2phy_cont': ["cont_ovsdpdk", "cont_ovsdpdk", "cont_ovs"],
- 'pvp_cont': ["pvp_cont_ovsdpdkuser", "pvp_cont_ovsdpdkcuse", "pvp_cont_ovsvirtio"],
- 'pvvp_cont': ["pvvp_cont_ovsdpdkuser", "pvvp_cont_ovsdpdkcuse", "pvvp_cont_ovsvirtio"],
- 'phy2phy_scalability': ["scalability_ovsdpdk", "scalability_ovsdpdk", "scalability_ovs"],
- 'pvp_tput': ["pvp_tput_ovsdpdkuser", "pvp_tput_ovsdpdkcuse", "pvp_tput_ovsvirtio"],
- 'pvp_back2back': ["pvp_b2b_ovsdpdkuser", "pvp_b2b_ovsdpdkcuse", "pvp_b2b_ovsvirtio"],
- 'pvvp_tput': ["pvvp_tput_ovsdpdkuser", "pvvp_tput_ovsdpdkcuse", "pvvp_tput_ovsvirtio"],
- 'pvvp_back2back': ["pvvp_b2b_ovsdpdkuser", "pvvp_b2b_ovsdpdkcuse", "pvvp_b2b_ovsvirtio"],
- 'phy2phy_cpu_load': ["cpu_load_ovsdpdk", "cpu_load_ovsdpdk", "cpu_load_ovs"],
- 'phy2phy_mem_load': ["mem_load_ovsdpdk", "mem_load_ovsdpdk", "mem_load_ovs"]}
+ names = {'phy2phy_tput': ["tput_ovsdpdk", "tput_ovs"],
+ 'back2back': ["b2b_ovsdpdk", "b2b_ovs"],
+ 'phy2phy_tput_mod_vlan': ["tput_mod_vlan_ovsdpdk", "tput_mod_vlan_ovs"],
+ 'phy2phy_cont': ["cont_ovsdpdk", "cont_ovs"],
+ 'pvp_cont': ["pvp_cont_ovsdpdkuser", "pvp_cont_ovsvirtio"],
+ 'pvvp_cont': ["pvvp_cont_ovsdpdkuser", "pvvp_cont_ovsvirtio"],
+ 'phy2phy_scalability': ["scalability_ovsdpdk", "scalability_ovs"],
+ 'pvp_tput': ["pvp_tput_ovsdpdkuser", "pvp_tput_ovsvirtio"],
+ 'pvp_back2back': ["pvp_b2b_ovsdpdkuser", "pvp_b2b_ovsvirtio"],
+ 'pvvp_tput': ["pvvp_tput_ovsdpdkuser", "pvvp_tput_ovsvirtio"],
+ 'pvvp_back2back': ["pvvp_b2b_ovsdpdkuser", "pvvp_b2b_ovsvirtio"],
+ 'phy2phy_cpu_load': ["cpu_load_ovsdpdk", "cpu_load_ovs"],
+ 'phy2phy_mem_load': ["mem_load_ovsdpdk", "mem_load_ovs"]}
for name, name_list in names.items():
if name != testcase:
continue
if vanilla == True:
- res_name = name_list[2]
+ res_name = name_list[1]
else:
- if cuse == True:
- res_name = name_list[1]
- else:
- res_name = name_list[0]
+ res_name = name_list[0]
break
return res_name
# See the License for the specific language governing permissions and
# limitations under the License.
-"""Automation of QEMU hypervisor for launching vhost-cuse enabled guests.
+"""Automation of QEMU hypervisor for launching guests.
"""
import os
+++ /dev/null
-# Copyright 2015 Intel Corporation.
-#
-# 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
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Automation of QEMU hypervisor for launching vhost-cuse enabled guests.
-"""
-
-import logging
-
-from conf import settings as S
-from vnfs.qemu.qemu import IVnfQemu
-
-class QemuDpdkVhostCuse(IVnfQemu):
- """
- Control an instance of QEMU with vHost cuse guest communication.
- """
- def __init__(self):
- """
- Initialisation function.
- """
- super(QemuDpdkVhostCuse, self).__init__()
- self._logger = logging.getLogger(__name__)
-
- # calculate indexes of guest devices (e.g. charx, dpdkvhostuserx)
- i = self._number * 2
- if1 = str(i)
- if2 = str(i + 1)
- net1 = 'net' + str(i + 1)
- net2 = 'net' + str(i + 2)
-
- self._cmd += ['-netdev',
- 'type=tap,id=' + net1 + ',script=no,downscript=no,' +
- 'ifname=dpdkvhostcuse' + if1 + ',vhost=on',
- '-device',
- 'virtio-net-pci,mac=' +
- S.getValue('GUEST_NET1_MAC')[self._number] +
- ',netdev=' + net1 + ',csum=off,gso=off,' +
- 'guest_tso4=off,guest_tso6=off,guest_ecn=off',
- '-netdev',
- 'type=tap,id=' + net2 +
- ',script=no,downscript=no,' +
- 'ifname=dpdkvhostcuse' + if2 + ',vhost=on',
- '-device',
- 'virtio-net-pci,mac=' +
- S.getValue('GUEST_NET2_MAC')[self._number] +
- ',netdev=' + net2 + ',csum=off,gso=off,' +
- 'guest_tso4=off,guest_tso6=off,guest_ecn=off',
- ]
opnfv_url = settings.getValue('OPNFV_URL')
pkg_list = settings.getValue('PACKAGE_LIST')
- int_data = {'cuse': False,
- 'vanilla': False,
+ int_data = {'vanilla': False,
'pod': pod_name,
'installer': installer_name,
'pkg_list': pkg_list,
'db_url': opnfv_url}
if settings.getValue('VSWITCH').endswith('Vanilla'):
int_data['vanilla'] = True
- if settings.getValue('VNF').endswith('Cuse'):
- int_data['cuse'] = True
opnfvdashboard.results2opnfv_dashboard(results_path, int_data)
# cleanup before exit
else:
self._vswitchd_args = vswitchd_args
- if settings.getValue('VNF').endswith('Cuse'):
- self._logger.info("Inserting VHOST Cuse modules into kernel...")
- dpdk.insert_vhost_modules()
-
def configure(self):
""" Configure vswitchd DPDK options through ovsdb if needed
"""
from 0
"""
bridge = self._bridges[switch_name]
- # Changed dpdkvhost to dpdkvhostuser to be able to run in Qemu 2.2
- if settings.getValue('VNF').endswith('Cuse'):
- vhost_count = self._get_port_count('type=dpdkvhostcuse')
- port_name = 'dpdkvhostcuse' + str(vhost_count)
- params = ['--', 'set', 'Interface', port_name, 'type=dpdkvhostcuse']
- else:
- vhost_count = self._get_port_count('type=dpdkvhostuser')
- port_name = 'dpdkvhostuser' + str(vhost_count)
- params = ['--', 'set', 'Interface', port_name, 'type=dpdkvhostuser']
- # multi queue enable
- if int(settings.getValue('VSWITCH_MULTI_QUEUES')) and \
- not settings.getValue('OVS_OLD_STYLE_MQ'):
- params += ['options:n_rxq={}'.format(
- settings.getValue('VSWITCH_MULTI_QUEUES'))]
+ vhost_count = self._get_port_count('type=dpdkvhostuser')
+ port_name = 'dpdkvhostuser' + str(vhost_count)
+ params = ['--', 'set', 'Interface', port_name, 'type=dpdkvhostuser']
+ # multi queue enable
+ if int(settings.getValue('VSWITCH_MULTI_QUEUES')) and \
+ not settings.getValue('OVS_OLD_STYLE_MQ'):
+ params += ['options:n_rxq={}'.format(
+ settings.getValue('VSWITCH_MULTI_QUEUES'))]
of_port = bridge.add_port(port_name, params)
return (port_name, of_port)