From d1145851ad5cb9b5abe963ee97491aa694d389dc Mon Sep 17 00:00:00 2001 From: Martin Klozik Date: Mon, 27 Feb 2017 09:00:50 +0000 Subject: 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 Reviewed-by: Al Morton Reviewed-by: Christian Trautman Reviewed-by: Sridhar Rao Reviewed-by: Trevor Cooper --- conf/01_testcases.conf | 188 +++++++++++++++++++++++++++++++++++++++++++++++++ conf/02_vswitch.conf | 52 +++++++++++++- conf/05_collector.conf | 2 +- conf/06_pktfwd.conf | 2 +- 4 files changed, 239 insertions(+), 5 deletions(-) (limited to 'conf') diff --git a/conf/01_testcases.conf b/conf/01_testcases.conf index b30afc8f..4851b043 100755 --- a/conf/01_testcases.conf +++ b/conf/01_testcases.conf @@ -78,6 +78,85 @@ # "Test Modifier": [FrameMod|Other], # "Dependency": [Test_Case_Name |None], +# +# VPP specific macros used in TC defintions +# +VPP_P2P = [ + ['vswitch', 'add_switch', 'int_br0'], # STEP 0 + ['vswitch', 'add_phy_port', 'int_br0'], # STEP 1 + ['vswitch', 'add_phy_port', 'int_br0'], # STEP 2 + ['vswitch', 'add_connection', 'int_br0', '#STEP[1][0]', '#STEP[2][0]', True], + ['vswitch', 'add_connection', 'int_br0', '#STEP[2][0]', '#STEP[1][0]', True], + ['trafficgen', 'send_traffic', {}], + ['vswitch', 'dump_connections', 'int_br0'], + ['vswitch', 'del_connection', 'int_br0', '#STEP[1][0]', '#STEP[2][0]', True], + ['vswitch', 'del_connection', 'int_br0', '#STEP[2][0]', '#STEP[1][0]', True], + ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'], + ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'], + ['vswitch', 'del_switch', 'int_br0'], + ] +VPP_PVP = [ + ['vswitch', 'add_switch', 'int_br0'], # STEP 0 + ['vswitch', 'add_phy_port', 'int_br0'], # STEP 1 + ['vswitch', 'add_phy_port', 'int_br0'], # STEP 2 + ['vswitch', 'add_vport', 'int_br0'], # STEP 3 + ['vswitch', 'add_vport', 'int_br0'], # STEP 4 + ['vswitch', 'add_connection', 'int_br0', '#STEP[1][0]', '#STEP[3][0]', True], + ['vswitch', 'add_connection', 'int_br0', '#STEP[4][0]', '#STEP[2][0]', True], + ['vswitch', 'add_connection', 'int_br0', '#STEP[2][0]', '#STEP[4][0]', True], + ['vswitch', 'add_connection', 'int_br0', '#STEP[3][0]', '#STEP[1][0]', True], + ['vnf', 'start'], + ['trafficgen', 'send_traffic', {}], + ['vnf', 'stop'], + ['vswitch', 'dump_connections', 'int_br0'], + ['vswitch', 'del_connection', 'int_br0', '#STEP[1][0]', '#STEP[3][0]', True], + ['vswitch', 'del_connection', 'int_br0', '#STEP[4][0]', '#STEP[2][0]', True], + ['vswitch', 'del_connection', 'int_br0', '#STEP[2][0]', '#STEP[4][0]', True], + ['vswitch', 'del_connection', 'int_br0', '#STEP[3][0]', '#STEP[1][0]', True], + ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'], + ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'], + ['vswitch', 'del_port', 'int_br0', '#STEP[3][0]'], + ['vswitch', 'del_port', 'int_br0', '#STEP[4][0]'], + ['vswitch', 'del_switch', 'int_br0'], + ] +VPP_PVVP = [ + ['vswitch', 'add_switch', 'int_br0'], # STEP 0 + ['vswitch', 'add_phy_port', 'int_br0'], # STEP 1 + ['vswitch', 'add_phy_port', 'int_br0'], # STEP 2 + ['vswitch', 'add_vport', 'int_br0'], # STEP 3 + ['vswitch', 'add_vport', 'int_br0'], # STEP 4 + ['vswitch', 'add_vport', 'int_br0'], # STEP 5 + ['vswitch', 'add_vport', 'int_br0'], # STEP 6 + ['vswitch', 'add_connection', 'int_br0', '#STEP[1][0]', '#STEP[3][0]', True], + ['vswitch', 'add_connection', 'int_br0', '#STEP[4][0]', '#STEP[5][0]', True], + ['vswitch', 'add_connection', 'int_br0', '#STEP[6][0]', '#STEP[2][0]', True], + ['vswitch', 'add_connection', 'int_br0', '#STEP[2][0]', '#STEP[6][0]', True], + ['vswitch', 'add_connection', 'int_br0', '#STEP[5][0]', '#STEP[4][0]', True], + ['vswitch', 'add_connection', 'int_br0', '#STEP[3][0]', '#STEP[1][0]', True], + ['vnf1', 'start'], + ['vnf2', 'start'], + ['trafficgen', 'send_traffic', {}], + ['vnf2', 'stop'], + ['vnf1', 'stop'], + ['vswitch', 'dump_connections', 'int_br0'], + ['vswitch', 'del_connection', 'int_br0', '#STEP[1][0]', '#STEP[3][0]', True], + ['vswitch', 'del_connection', 'int_br0', '#STEP[4][0]', '#STEP[5][0]', True], + ['vswitch', 'del_connection', 'int_br0', '#STEP[6][0]', '#STEP[2][0]', True], + ['vswitch', 'del_connection', 'int_br0', '#STEP[2][0]', '#STEP[6][0]', True], + ['vswitch', 'del_connection', 'int_br0', '#STEP[5][0]', '#STEP[4][0]', True], + ['vswitch', 'del_connection', 'int_br0', '#STEP[3][0]', '#STEP[1][0]', True], + ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'], + ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'], + ['vswitch', 'del_port', 'int_br0', '#STEP[3][0]'], + ['vswitch', 'del_port', 'int_br0', '#STEP[4][0]'], + ['vswitch', 'del_port', 'int_br0', '#STEP[5][0]'], + ['vswitch', 'del_port', 'int_br0', '#STEP[6][0]'], + ['vswitch', 'del_switch', 'int_br0'], + ] + +# +# Generic performance TC definitions +# PERFORMANCE_TESTS = [ { "Name": "phy2phy_tput", @@ -269,4 +348,113 @@ PERFORMANCE_TESTS = [ }, }, }, + { + "Name": "phy2phy_tput_vpp", + "Deployment": "clean", + "Description": "VPP: LTD.Throughput.RFC2544.PacketLossRatio", + "vSwitch" : "VppDpdkVhost", + "Parameters" : { + "TRAFFIC" : { + "traffic_type" : "rfc2544_throughput", + }, + }, + "TestSteps": VPP_P2P, + }, + { + "Name": "phy2phy_cont_vpp", + "Deployment": "clean", + "Description": "VPP: Phy2Phy Continuous Stream", + "vSwitch" : "VppDpdkVhost", + "Parameters" : { + "TRAFFIC" : { + "traffic_type" : "rfc2544_continuous", + "frame_rate" : 100, + }, + }, + "TestSteps": VPP_P2P, + }, + { + "Name": "phy2phy_back2back_vpp", + "Deployment": "clean", + "Description": "VPP: LTD.Throughput.RFC2544.BackToBackFrames", + "vSwitch" : "VppDpdkVhost", + "Parameters" : { + "TRAFFIC" : { + "traffic_type" : "rfc2544_back2back", + }, + }, + "TestSteps": VPP_P2P, + }, + { + "Name": "pvp_tput_vpp", + "Deployment": "clean", + "Description": "VPP: LTD.Throughput.RFC2544.PacketLossRatio", + "vSwitch" : "VppDpdkVhost", + "Parameters" : { + "TRAFFIC" : { + "traffic_type" : "rfc2544_throughput", + }, + }, + "TestSteps": VPP_PVP, + }, + { + "Name": "pvp_cont_vpp", + "Deployment": "clean", + "Description": "VPP: PVP Continuous Stream", + "vSwitch" : "VppDpdkVhost", + "Parameters" : { + "TRAFFIC" : { + "traffic_type" : "rfc2544_continuous", + }, + }, + "TestSteps": VPP_PVP, + }, + { + "Name": "pvp_back2back_vpp", + "Deployment": "clean", + "Description": "VPP: LTD.Throughput.RFC2544.BackToBackFrames", + "vSwitch" : "VppDpdkVhost", + "Parameters" : { + "TRAFFIC" : { + "traffic_type" : "rfc2544_back2back", + }, + }, + "TestSteps": VPP_PVP, + }, + { + "Name": "pvvp_tput_vpp", + "Deployment": "clean", + "Description": "VPP: LTD.Throughput.RFC2544.PacketLossRatio", + "vSwitch" : "VppDpdkVhost", + "Parameters" : { + "TRAFFIC" : { + "traffic_type" : "rfc2544_throughput", + }, + }, + "TestSteps": VPP_PVVP, + }, + { + "Name": "pvvp_cont_vpp", + "Deployment": "clean", + "Description": "VPP: PVP Continuous Stream", + "vSwitch" : "VppDpdkVhost", + "Parameters" : { + "TRAFFIC" : { + "traffic_type" : "rfc2544_continuous", + }, + }, + "TestSteps": VPP_PVVP, + }, + { + "Name": "pvvp_back2back_vpp", + "Deployment": "clean", + "Description": "VPP: LTD.Throughput.RFC2544.BackToBackFrames", + "vSwitch" : "VppDpdkVhost", + "Parameters" : { + "TRAFFIC" : { + "traffic_type" : "rfc2544_back2back", + }, + }, + "TestSteps": VPP_PVVP, + }, ] diff --git a/conf/02_vswitch.conf b/conf/02_vswitch.conf index 2ca7591c..2bac1732 100644 --- a/conf/02_vswitch.conf +++ b/conf/02_vswitch.conf @@ -33,6 +33,12 @@ RTE_TARGET = 'x86_64-native-linuxapp-gcc' # will be used for testing WHITELIST_NICS = [] +# List defines an amount of memory to be allocated by DPDK at NUMA nodes. This +# option is shared by all vSwitches with DPDK support. In case, that there is +# a socket-mem configuration specified in vSwitch specific configuration option, +# then it will be overridden by DPDK_SOCKET_MEM value. +DPDK_SOCKET_MEM = ['1024', '0'] + # vhost character device file used by dpdkvhostport QemuWrap cases VHOST_DEV_FILE = 'ovs-vhost-net' @@ -103,6 +109,18 @@ PATHS['vswitch'] = { }, 'ovs_var_tmp': '/usr/local/var/run/openvswitch/', 'ovs_etc_tmp': '/usr/local/etc/openvswitch/', + 'VppDpdkVhost': { + 'type' : 'bin', + 'src': { + 'path': os.path.join(ROOT_DIR, 'src/vpp/vpp/build-root/build-vpp-native'), + 'vpp': 'vpp', + 'vppctl': 'vppctl', + }, + 'bin': { + 'vpp': 'vpp', + 'vppctl': 'vppctl', + } + }, } # default OvsVanilla configuration is similar to OvsDpdkVhost except 'path' and 'modules' @@ -116,18 +134,19 @@ PATHS['vswitch']['OvsVanilla']['bin']['modules'] = ['openvswitch'] # ############################ # These are DPDK EAL parameters and they may need to be changed depending on # hardware configuration, like cpu numbering and NUMA. -# + # parameters used for legacy DPDK configuration through '--dpdk' option of ovs-vswitchd # e.g. ovs-vswitchd --dpdk --socket-mem 1024,0 # This config line is also used for pkt_fwd option (TestPMD phy2phy and pvp tests) -VSWITCHD_DPDK_ARGS = ['-c', '0x4', '-n', '4', '--socket-mem 1024,0'] +# NOTE: DPDK socket mem allocation is driven by parameter DPDK_SOCKET_MEM +VSWITCHD_DPDK_ARGS = ['-c', '0x4', '-n', '4'] # options used for new type of OVS configuration via calls to ovs-vsctl # e.g. ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem="1024,0" +# NOTE: DPDK socket mem allocation is driven by parameter DPDK_SOCKET_MEM VSWITCHD_DPDK_CONFIG = { 'dpdk-init' : 'true', 'dpdk-lcore-mask' : '0x4', - 'dpdk-socket-mem' : '1024,0', } # Note: VSPERF will automatically detect, which type of DPDK configuration should # be used. @@ -169,3 +188,30 @@ LOG_FILE_OVS = 'ovs.log' # default vswitch implementation VSWITCH = "OvsDpdkVhost" + +######################### +## VPP +######################### +# Set of arguments used for startup of VPP +# NOTE: DPDK socket mem allocation is driven by parameter DPDK_SOCKET_MEM +VSWITCH_VPP_ARGS = { + 'unix' : [ + 'interactive', # required by VSPERF to detect successful VPP startup + 'log /tmp/vpp.log', + 'full-coredump', + ], + 'cpu' : [ + 'main-core 3', + 'corelist-workers 4,5', + ], +} + +# log file for VPP +LOG_FILE_VPP = 'vsperf-vpp.log' + +# Select l2 connection method used by VPP. +# Supported values are: 'xconnect', 'l2patch' and 'bridge' +VSWITCH_VPP_L2_CONNECT_MODE = 'xconnect' + +# Options used during creation of dpdkvhostuser interface +VSWITCH_VPP_VHOSTUSER_ARGS = ['feature-mask', '0xFF'] diff --git a/conf/05_collector.conf b/conf/05_collector.conf index bda0ac8d..9fd2558c 100644 --- a/conf/05_collector.conf +++ b/conf/05_collector.conf @@ -20,7 +20,7 @@ COLLECTOR = 'Pidstat' COLLECTOR_DIR = os.path.join(ROOT_DIR, 'tools/collectors') # processes to be monitored by pidstat -PIDSTAT_MONITOR = ['ovs-vswitchd', 'ovsdb-server', 'qemu-system-x86_64'] +PIDSTAT_MONITOR = ['ovs-vswitchd', 'ovsdb-server', 'qemu-system-x86_64', 'vpp'] # options which will be passed to pidstat PIDSTAT_OPTIONS = '-dur' diff --git a/conf/06_pktfwd.conf b/conf/06_pktfwd.conf index 6175aa6a..bb4c1d79 100644 --- a/conf/06_pktfwd.conf +++ b/conf/06_pktfwd.conf @@ -36,4 +36,4 @@ TESTPMD_CSUM_CALC = 'sw' # recognize tunnel headers: on|off TESTPMD_CSUM_PARSE_TUNNEL = 'off' -PIDSTAT_MONITOR = ['ovs-vswitchd', 'ovsdb-server', 'qemu-system-x86_64', 'testpmd'] +PIDSTAT_MONITOR = ['ovs-vswitchd', 'ovsdb-server', 'qemu-system-x86_64', 'vpp', 'testpmd'] -- cgit 1.2.3-korg