From patchwork Tue Aug 31 08:22:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yufen.Mo" X-Patchwork-Id: 97591 X-Patchwork-Delegate: lijuan.tu@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2CFC8A0C46; Tue, 31 Aug 2021 10:21:36 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 21FE3406A3; Tue, 31 Aug 2021 10:21:36 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mails.dpdk.org (Postfix) with ESMTP id 8878040041 for ; Tue, 31 Aug 2021 10:21:33 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10092"; a="216576687" X-IronPort-AV: E=Sophos;i="5.84,365,1620716400"; d="scan'208";a="216576687" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2021 01:21:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,365,1620716400"; d="scan'208";a="540921790" Received: from dpdk-moyufen06.sh.intel.com ([10.67.116.208]) by fmsmga002.fm.intel.com with ESMTP; 31 Aug 2021 01:21:30 -0700 From: Yufen Mo To: dts@dpdk.org, lijuan.tu@intel.com, yingyax.han@intel.com, junx.w.zhou@intel.com Cc: Yufen Mo Date: Tue, 31 Aug 2021 16:22:15 +0800 Message-Id: <20210831082220.47375-2-yufengx.mo@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20210831082220.47375-1-yufengx.mo@intel.com> References: <20210831082220.47375-1-yufengx.mo@intel.com> MIME-Version: 1.0 Subject: [dts] [PATCH V2 1/6] framework/etgen: remove etgen X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" remove etgen relevant source code. Signed-off-by: Yufen Mo --- conf/crbs.cfg | 2 - conf/ixia.cfg | 15 - framework/config.py | 67 +-- framework/crb.py | 2 +- framework/crbs.py | 1 - framework/dts.py | 6 - framework/etgen.py | 972 -------------------------------------- framework/logger.py | 20 - framework/project_dpdk.py | 12 +- framework/settings.py | 1 - framework/tester.py | 90 +--- 11 files changed, 5 insertions(+), 1183 deletions(-) delete mode 100644 conf/ixia.cfg delete mode 100644 framework/etgen.py diff --git a/conf/crbs.cfg b/conf/crbs.cfg index 0ba9d1fc..b6c0a9af 100644 --- a/conf/crbs.cfg +++ b/conf/crbs.cfg @@ -6,7 +6,6 @@ # os: operation system type linux or freebsd # tester_ip: Tester ip address # tester_passwd: Tester password -# ixia_group: IXIA group name # pktgen_group: packet generator group name: ixia/trex/ixia_network # channels: Board channel number # bypass_core0: Whether by pass core0 @@ -36,7 +35,6 @@ os=linux dut_arch= tester_ip=yyy.yyy.yyy.yyy tester_passwd= -ixia_group= pktgen_group= channels=4 bypass_core0=True diff --git a/conf/ixia.cfg b/conf/ixia.cfg deleted file mode 100644 index 9deba603..00000000 --- a/conf/ixia.cfg +++ /dev/null @@ -1,15 +0,0 @@ -# IXIA port Configuration -# IxiaGroup: Group name for IXIA ports -# Version : IXIA TCL server version -# IP : IXIA server IP address -# Ports : [IXIA port list] -# ixia_force100g: We need to set this to enable if we need IXIA port work in 100G mode. -[IXIA Group] -ixia_version=6.62 -ixia_ip=xxx.xxx.xxx.xxx -ixia_ports= - card=1,port=1; - card=1,port=2; - card=1,port=3; - card=1,port=4; -ixia_force100g=disable diff --git a/framework/config.py b/framework/config.py index 88ae8ea5..ac075233 100644 --- a/framework/config.py +++ b/framework/config.py @@ -36,7 +36,7 @@ import os import re import configparser # config parse module import argparse # parse arguments module -from settings import (IXIA, PKTGEN, PKTGEN_DPDK, PKTGEN_TREX, PKTGEN_IXIA, PKTGEN_IXIA_NETWORK, +from settings import (PKTGEN, PKTGEN_DPDK, PKTGEN_TREX, PKTGEN_IXIA, PKTGEN_IXIA_NETWORK, CONFIG_ROOT_PATH, SUITE_SECTION_NAME) from settings import load_global_setting, DTS_CFG_FOLDER from exception import ConfigParseException, VirtConfigParseException, PortConfigParseException @@ -268,7 +268,7 @@ class PortConf(UserConf): class CrbsConf(UserConf): DEF_CRB = {'IP': '', 'board': 'default', 'user': '', 'pass': '', 'tester IP': '', 'tester pass': '', - IXIA: None, 'memory channels': 4, + 'memory channels': 4, PKTGEN: None, 'bypass core0': True, 'dut_cores': '', 'snapshot_load_side': 'tester'} @@ -309,11 +309,6 @@ class CrbsConf(UserConf): crb['tester IP'] = value elif key == 'tester_passwd': crb['tester pass'] = value - elif key == 'ixia_group': - # None type will be check later - if value.lower() == 'none': - value = None - crb[IXIA] = value elif key == 'pktgen_group': crb[PKTGEN] = value.lower() elif key == 'channels': @@ -336,64 +331,6 @@ class CrbsConf(UserConf): return self.crbs_cfg -class IxiaConf(UserConf): - - def __init__(self, ixia_conf=IXIACONF): - self.config_file = ixia_conf - self.ixia_cfg = {} - try: - self.ixia_conf = UserConf(self.config_file) - except ConfigParseException: - self.ixia_conf = None - raise ConfigParseException - - def load_ixia_config(self): - port_reg = r'card=(\d+),port=(\d+)' - groups = self.ixia_conf.get_sections() - if not groups: - return self.ixia_cfg - - for group in groups: - ixia_group = {} - ixia_confs = self.ixia_conf.load_section(group) - if not ixia_confs: - continue - - # convert file configuration to dts ixiacfg - for conf in ixia_confs: - key, value = conf - if key == 'ixia_version': - ixia_group['Version'] = value - elif key == 'ixia_ip': - ixia_group['IP'] = value - elif key == 'ixia_ports': - ports = self.ixia_conf.load_config(value) - ixia_ports = [] - for port in ports: - m = re.match(port_reg, port) - if m: - ixia_port = {} - ixia_port["card"] = int(m.group(1)) - ixia_port["port"] = int(m.group(2)) - ixia_ports.append(ixia_port) - ixia_group['Ports'] = ixia_ports - elif key == 'ixia_enable_rsfec': - ixia_group['enable_rsfec'] = value - - if 'Version' not in ixia_group: - print('ixia configuration file request ixia_version option!!!') - continue - if 'IP' not in ixia_group: - print('ixia configuration file request ixia_ip option!!!') - continue - if 'Ports' not in ixia_group: - print('ixia configuration file request ixia_ports option!!!') - continue - - self.ixia_cfg[group] = ixia_group - - return self.ixia_cfg - class PktgenConf(UserConf): def __init__(self, pktgen_type='ixia', pktgen_conf=PKTGENCONF): diff --git a/framework/crb.py b/framework/crb.py index 3964e213..40fe4fd1 100644 --- a/framework/crb.py +++ b/framework/crb.py @@ -32,7 +32,7 @@ import time import re import os -from settings import TIMEOUT, IXIA +from settings import TIMEOUT from ssh_connection import SSHConnection from logger import getLogger from config import PortConf, PORTCONF, PktgenConf diff --git a/framework/crbs.py b/framework/crbs.py index 2ff937ac..c586caa1 100644 --- a/framework/crbs.py +++ b/framework/crbs.py @@ -1,7 +1,6 @@ """ Static configuration data for any CRBs that can be used. """ -from settings import IXIA crbs_desc = { 'CrownPassCRB1': diff --git a/framework/dts.py b/framework/dts.py index 6f621a51..e83a6ce5 100644 --- a/framework/dts.py +++ b/framework/dts.py @@ -281,9 +281,6 @@ def dts_log_testsuite(duts, tester, suite_obj, log_handler, test_classname): hasattr(tester, 'pktgen') and \ getattr(tester, 'pktgen'): tester.pktgen.logger.config_suite(test_classname, 'pktgen') - elif hasattr(tester, 'ixia_packet_gen') and \ - getattr(tester, 'ixia_packet_gen'): - tester.ixia_packet_gen.logger.config_suite(test_classname, 'ixia') except Exception as ex: pass @@ -304,9 +301,6 @@ def dts_log_execution(duts, tester, log_handler): hasattr(tester, 'pktgen') and \ getattr(tester, 'pktgen'): tester.pktgen.logger.config_execution('pktgen') - elif hasattr(tester, 'ixia_packet_gen') and \ - getattr(tester, 'ixia_packet_gen'): - tester.ixia_packet_gen.logger.config_execution('ixia') except Exception as ex: pass diff --git a/framework/etgen.py b/framework/etgen.py deleted file mode 100644 index acfa2960..00000000 --- a/framework/etgen.py +++ /dev/null @@ -1,972 +0,0 @@ -# BSD LICENSE -# -# Copyright(c) 2010-2014 Intel Corporation. All rights reserved. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Intel Corporation nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import re -import string -import time -from config import IxiaConf -from ssh_connection import SSHConnection -from settings import SCAPY2IXIA -from logger import getLogger -from exception import VerifyFailure -from utils import create_mask - - -class SoftwarePacketGenerator(): - - """ - Software WindRiver packet generator for performance measurement. - """ - - def __init__(self, tester): - self.tester = tester - - def packet_generator(self, portList, rate_percent): - # bind ports - self.tester.send_expect("insmod igb_uio.ko", "#") - - bind_cmd = "" - allow_list = "" - ports = [] - tx_ports = [] - for (tx_port, rx_port, pcap_file) in portList: - if tx_port not in ports: - ports.append(tx_port) - tx_ports.append(tx_port) - if rx_port not in ports: - ports.append(rx_port) - - for port in ports: - bind_cmd += " %s" % self.tester.ports_info[port]['pci'] - allow_list += " -w %s" % self.tester.ports_info[port]['pci'] - - self.tester.send_expect("./dpdk-devbind.py --bind=igb_uio %s" % bind_cmd, "#") - - # assign core for ports - map_cmd = "" - port_index = list(range(len(ports))) - port_map = dict(list(zip(ports, port_index))) - self.tester.init_reserved_core() - - # reserve one core for master process - used_cores = list() - master_core = self.tester.get_reserved_core("1C", socket=0) - - if len(master_core) < 1: - raise VerifyFailure("Not enough core for performance!!!") - - used_cores.append(int(master_core[0])) - - # allocate cores for each port - for port in ports: - numa = self.tester.get_port_numa(port) - cores = self.tester.get_reserved_core("2C", socket=numa) - - if len(cores) < 2: - raise VerifyFailure("Not enough cores for performance!!!") - - map_cmd += "[%s:%s].%d, " % (cores[0], cores[1], port_map[port]) - used_cores.append(int(cores[0])) - used_cores.append(int(cores[1])) - - # prepare pcap for every port - pcap_cmd = "" - for (tx_port, rx_port, pcap_file) in portList: - pcap_cmd += " -s %d:%s" % (port_map[tx_port], pcap_file) - - # Selected 2 for -n to optimize results on Burage - cores_mask = create_mask(used_cores) - - # allocate enough memory for 4 ports - socket_mem = "--socket-mem 1024,1024" - - # current support version is dpdk v18.02 + pktgen v3.5.0 - pkt_cmd = "./pktgen -n 2 -c {CORE} --file-prefix=pktgen {ALLOW} " \ - "{MEM} -- -P -m \"{CORE_MAP}\" {PCAP}".format(CORE=cores_mask, - ALLOW=allow_list, MEM=socket_mem, CORE_MAP=map_cmd, PCAP=pcap_cmd) - - self.tester.send_expect(pkt_cmd, "Pktgen:/>", 100) - self.tester.send_expect("disable screen", "Pktgen:/>") - - if rate_percent != 100: - self.tester.send_expect("set all rate %s" % rate_percent, "Pktgen:/>") - else: - self.tester.send_expect("set all rate 100", "Pktgen:/>") - - self.tester.send_expect("start all", "Pktgen:/>") - time.sleep(10) - out = self.tester.send_expect("lua \"prints('portRates', pktgen.portStats('all', 'rate'))\"", "Pktgen:/>") - rx_bps = 0 - rx_pps = 0 - tx_bps = 0 - rx_match = r"\[\"mbits_rx\"\] = (\d+)," - port_stats = re.findall(rx_match, out) - for port_stat in port_stats: - rx_bps += int(port_stat) - - tx_match = r"\[\"mbits_tx\"\] = (\d+)," - port_stats = re.findall(tx_match, out) - for port_stat in port_stats: - tx_bps += int(port_stat) - - pps_match = r"\[\"pkts_rx\"\] = (\d+)," - port_stats = re.findall(pps_match, out) - for port_stat in port_stats: - rx_pps += int(port_stat) - - self.tester.send_expect("stop all", "Pktgen:/>") - self.tester.send_expect("quit", "#") - # restore stty setting - self.tester.send_expect('stty -echo', '#') - self.tester.kill_all(killall=True) - self.tester.restore_interfaces() - - return rx_bps, tx_bps, rx_pps - - def throughput(self, portList, rate_percent=100): - (bps_rx, _, pps_rx) = self.packet_generator(portList, rate_percent) - return bps_rx, pps_rx - - def loss(self, portList, ratePercent): - (bps_rx, bps_tx, _) = self.packet_generator(portList, ratePercent) - assert bps_tx != 0 - return (float(bps_tx) - float(bps_rx)) / float(bps_tx), float(bps_tx), float(bps_rx) - - -class IxiaPacketGenerator(SSHConnection): - - """ - IXIA packet generator for performance measurement. - """ - - def __init__(self, tester): - self.tester = tester - self.NAME = 'ixia' - self.logger = getLogger(self.NAME) - super(IxiaPacketGenerator, self).__init__(self.get_ip_address(), - self.NAME, self.tester.get_username(), - self.get_password()) - super(IxiaPacketGenerator, self).init_log(self.logger) - - self.tcl_cmds = [] - self.chasId = None - self.conRelation = {} - - ixiaRef = self.tester.get_external_traffic_generator() - - ixiacfg = IxiaConf() - ixiaPorts = ixiacfg.load_ixia_config() - if ixiaRef is None or ixiaRef not in ixiaPorts: - return - - self.ixiaVersion = ixiaPorts[ixiaRef]["Version"] - self.ports = ixiaPorts[ixiaRef]["Ports"] - - if 'force100g' in ixiaPorts[ixiaRef]: - self.enable100g = ixiaPorts[ixiaRef]['force100g'] - else: - self.enable100g = 'disable' - - self.logger.info(self.ixiaVersion) - self.logger.info(self.ports) - - self.tclServerIP = ixiaPorts[ixiaRef]["IP"] - - # prepare tcl shell and ixia library - self.send_expect("tclsh", "% ") - self.send_expect("source ./IxiaWish.tcl", "% ") - self.send_expect("set ::env(IXIA_VERSION) %s" % self.ixiaVersion, "% ") - out = self.send_expect("package req IxTclHal", "% ") - self.logger.debug("package req IxTclHal return:" + out) - if self.ixiaVersion in out: - if not self.tcl_server_login(): - self.close() - self.session = None - for port in self.ports: - port['speed'] = self.get_line_rate(self.chasId, port) - - def get_line_rate(self, chasid, port): - return self.send_expect("stat getLineSpeed %s %s %s" % (chasid, port['card'], port['port']), '%') - - def get_ip_address(self): - return self.tester.get_ip_address() - - def get_password(self): - return self.tester.get_password() - - def add_tcl_cmd(self, cmd): - """ - Add one tcl command into command list. - """ - self.tcl_cmds.append(cmd) - - def clean(self): - """ - Clean ownership of IXIA devices and logout tcl session. - """ - self.close() - self.send_expect("clearOwnershipAndLogout", "% ") - - def parse_pcap(self, fpcap): - dump_str1 = "cmds = []\n" - dump_str2 = "for i in rdpcap('%s', -1):\n" % fpcap - dump_str3 = " if 'VXLAN' in i.command():\n" + \ - " vxlan_str = ''\n" + \ - " l = len(i[VXLAN])\n" + \ - " vxlan = str(i[VXLAN])\n" + \ - " first = True\n" + \ - " for j in range(l):\n" + \ - " if first:\n" + \ - " vxlan_str += \"VXLAN(hexval='%02X\" %ord(vxlan[j])\n" + \ - " first = False\n" + \ - " else:\n" + \ - " vxlan_str += \" %02X\" %ord(vxlan[j])\n" + \ - " vxlan_str += \"\')\"\n" + \ - " command = re.sub(r\"VXLAN(.*)\", vxlan_str, i.command())\n" + \ - " else:\n" + \ - " command = i.command()\n" + \ - " cmds.append(command)\n" + \ - "print cmds\n" + \ - "exit()" - - f = open("dumppcap.py", "w") - f.write(dump_str1) - f.write(dump_str2) - f.write(dump_str3) - f.close() - - self.session.copy_file_to("dumppcap.py") - out = self.send_expect("scapy -c dumppcap.py 2>/dev/null", "% ", 120) - flows = eval(out) - return flows - - def ether(self, port, src, dst, type): - """ - Configure Ether protocol. - """ - self.add_tcl_cmd("protocol config -ethernetType ethernetII") - self.add_tcl_cmd('stream config -sa "%s"' % self.macToTclFormat(src)) - self.add_tcl_cmd('stream config -da "%s"' % self.macToTclFormat(dst)) - - def ip(self, port, frag, src, proto, tos, dst, chksum, len, version, flags, ihl, ttl, id, options=None): - """ - Configure IP protocol. - """ - self.add_tcl_cmd("protocol config -name ip") - self.add_tcl_cmd('ip config -sourceIpAddr "%s"' % src) - self.add_tcl_cmd('ip config -destIpAddr "%s"' % dst) - self.add_tcl_cmd("ip config -ttl %d" % ttl) - self.add_tcl_cmd("ip config -totalLength %d" % len) - self.add_tcl_cmd("ip config -fragment %d" % frag) - self.add_tcl_cmd("ip config -ipProtocol %d" % proto) - self.add_tcl_cmd("ip config -identifier %d" % id) - self.add_tcl_cmd("stream config -framesize %d" % (len + 18)) - self.add_tcl_cmd("ip set %d %d %d" % (self.chasId, port['card'], port['port'])) - - def macToTclFormat(self, macAddr): - """ - Convert normal mac address format into IXIA's format. - """ - macAddr = macAddr.upper() - return "%s %s %s %s %s %s" % (macAddr[:2], macAddr[3:5], macAddr[6:8], macAddr[9:11], macAddr[12:14], macAddr[15:17]) - - def ipv6(self, port, version, tc, fl, plen, nh, hlim, src, dst): - """ - Configure IPv6 protocol. - """ - self.add_tcl_cmd("protocol config -name ipV6") - self.add_tcl_cmd('ipV6 setDefault') - self.add_tcl_cmd('ipV6 config -destAddr "%s"' % self.ipv6_to_tcl_format(dst)) - self.add_tcl_cmd('ipV6 config -sourceAddr "%s"' % self.ipv6_to_tcl_format(src)) - self.add_tcl_cmd('ipV6 config -flowLabel %d' % fl) - self.add_tcl_cmd('ipV6 config -nextHeader %d' % nh) - self.add_tcl_cmd('ipV6 config -hopLimit %d' % hlim) - self.add_tcl_cmd('ipV6 config -trafficClass %d' % tc) - self.add_tcl_cmd("ipV6 clearAllExtensionHeaders") - self.add_tcl_cmd("ipV6 addExtensionHeader %d" % nh) - - self.add_tcl_cmd("stream config -framesize %d" % (plen + 40 + 18)) - self.add_tcl_cmd("ipV6 set %d %d %d" % (self.chasId, port['card'], port['port'])) - - def udp(self, port, dport, sport, len, chksum): - """ - Configure UDP protocol. - """ - self.add_tcl_cmd("udp setDefault") - self.add_tcl_cmd("udp config -sourcePort %d" % sport) - self.add_tcl_cmd("udp config -destPort %d" % dport) - self.add_tcl_cmd("udp config -length %d" % len) - self.add_tcl_cmd("udp set %d %d %d" % - (self.chasId, port['card'], port['port'])) - - def vxlan(self, port, hexval): - self.add_tcl_cmd("protocolPad setDefault") - self.add_tcl_cmd("protocol config -enableProtocolPad true") - self.add_tcl_cmd("protocolPad config -dataBytes \"%s\"" % hexval) - self.add_tcl_cmd("protocolPad set %d %d %d" % - (self.chasId, port['card'], port['port'])) - - def tcp(self, port, sport, dport, seq, ack, dataofs, reserved, flags, window, chksum, urgptr, options=None): - """ - Configure TCP protocol. - """ - self.add_tcl_cmd("tcp setDefault") - self.add_tcl_cmd("tcp config -sourcePort %d" % sport) - self.add_tcl_cmd("tcp config -destPort %d" % dport) - self.add_tcl_cmd("tcp set %d %d %d" % (self.chasId, port['card'], port['port'])) - - def sctp(self, port, sport, dport, tag, chksum): - """ - Configure SCTP protocol. - """ - self.add_tcl_cmd("tcp config -sourcePort %d" % sport) - self.add_tcl_cmd("tcp config -destPort %d" % dport) - self.add_tcl_cmd("tcp set %d %d %d" % (self.chasId, port['card'], port['port'])) - - def dot1q(self, port, prio, id, vlan, type): - """ - Configure 8021Q protocol. - """ - self.add_tcl_cmd("protocol config -enable802dot1qTag true") - self.add_tcl_cmd("vlan config -vlanID %d" % vlan) - self.add_tcl_cmd("vlan config -userPriority %d" % prio) - self.add_tcl_cmd("vlan set %d %d %d" % (self.chasId, port['card'], port['port'])) - - def config_stream(self, fpcap, txport, rate_percent, stream_id=1, latency=False): - """ - Configure IXIA stream and enable multiple flows. - """ - flows = self.parse_pcap(fpcap) - - self.add_tcl_cmd("ixGlobalSetDefault") - self.config_ixia_stream(rate_percent, flows, latency) - - pat = re.compile(r"(\w+)\((.*)\)") - for flow in flows: - for header in flow.split('/'): - match = pat.match(header) - params = eval('dict(%s)' % match.group(2)) - method_name = match.group(1) - if method_name == 'VXLAN': - method = getattr(self, method_name.lower()) - method(txport, **params) - break - if method_name in SCAPY2IXIA: - method = getattr(self, method_name.lower()) - method(txport, **params) - - self.add_tcl_cmd("stream set %d %d %d %d" % (self.chasId, txport[ - 'card'], txport['port'], stream_id)) - stream_id += 1 - - if len(flows) > 1: - stream_id -= 1 - self.add_tcl_cmd("stream config -dma gotoFirst") - self.add_tcl_cmd("stream set %d %d %d %d" % - (self.chasId, txport['card'], txport['port'], stream_id)) - - def config_ixia_stream(self, rate_percent, flows, latency): - """ - Configure IXIA stream with rate and latency. - Override this method if you want to add custom stream configuration. - """ - self.add_tcl_cmd("stream config -rateMode usePercentRate") - self.add_tcl_cmd("stream config -percentPacketRate %s" % rate_percent) - self.add_tcl_cmd("stream config -numFrames 1") - if len(flows) == 1: - self.add_tcl_cmd("stream config -dma contPacket") - else: - self.add_tcl_cmd("stream config -dma advance") - # request by packet Group - if latency is not False: - self.add_tcl_cmd("stream config -fir true") - - def tcl_server_login(self): - """ - Connect to tcl server and take ownership of all the ports needed. - """ - out = self.send_expect("ixConnectToTclServer %s" % self.tclServerIP, "% ", 30) - self.logger.debug("ixConnectToTclServer return:" + out) - if out.strip()[-1] != '0': - return False - - self.send_expect("ixLogin IxiaTclUser", "% ") - - out = self.send_expect("ixConnectToChassis %s" % self.tclServerIP, "% ", 30) - if out.strip()[-1] != '0': - return False - - out = self.send_expect("set chasId [ixGetChassisID %s]" % self.tclServerIP, "% ") - self.chasId = int(out.strip()) - - out = self.send_expect("ixClearOwnership [list %s]" % ' '.join( - ['[list %d %d %d]' % (self.chasId, item['card'], item['port']) for item in self.ports]), "% ", 10) - if out.strip()[-1] != '0': - return False - out = self.send_expect("ixTakeOwnership [list %s] force" % ' '.join( - ['[list %d %d %d]' % (self.chasId, item['card'], item['port']) for item in self.ports]), "% ", 10) - if out.strip()[-1] != '0': - return False - - return True - - def tcl_server_logout(self): - """ - Disconnect to tcl server and make sure has been logged out. - """ - self.send_expect("ixDisconnectFromChassis %s" % self.tclServerIP, "%") - self.send_expect("ixLogout", "%") - self.send_expect("ixDisconnectTclServer %s" % self.tclServerIP, "%") - - def config_port(self, pList): - """ - Configure ports and make them ready for performance validation. - """ - pl = list() - for item in pList: - self.add_tcl_cmd("port setFactoryDefaults chasId %d %d" % ( - item['card'], item['port'])) - # if the line rate is 100G and we need this port work in 100G mode, - # we need to add some configure to make it so. - if int(self.get_line_rate(self.chasId, item).strip()) == 100000 and self.enable100g == 'enable': - self.add_tcl_cmd("port config -ieeeL1Defaults 0") - self.add_tcl_cmd("port config -autonegotiate false") - self.add_tcl_cmd("port config -enableRsFec true") - self.add_tcl_cmd("port set %d %d %d" % (self.chasId, item['card'], item['port'])) - - pl.append('[list %d %d %d]' % (self.chasId, item['card'], item['port'])) - - self.add_tcl_cmd("set portList [list %s]" % ' '.join(pl)) - - self.add_tcl_cmd("ixClearTimeStamp portList") - self.add_tcl_cmd("ixWritePortsToHardware portList") - self.add_tcl_cmd("ixCheckLinkState portList") - - def set_ixia_port_list(self, pList): - """ - Implement ports/streams configuration on specified ports. - """ - self.add_tcl_cmd("set portList [list %s]" % - ' '.join(['[list %d %d %d]' % - (self.chasId, item['card'], item['port']) for item in pList])) - - def send_ping6(self, pci, mac, ipv6): - """ - Send ping6 packet from IXIA ports. - """ - self.send_expect("source ./ixTcl1.0/ixiaPing6.tcl", "% ") - out = self.send_expect('ping6 "%s" "%s" %d %d %d' % - (self.ipv6_to_tcl_format(ipv6), self.macToTclFormat(mac), self.chasId, self.pci_to_port(pci)['card'], self.pci_to_port(pci)['port']), "% ", 90) - return out - - def ipv6_to_tcl_format(self, ipv6): - """ - Convert normal IPv6 address to IXIA format. - """ - ipv6 = ipv6.upper() - singleAddr = ipv6.split(":") - if '' == singleAddr[0]: - singleAddr = singleAddr[1:] - if '' in singleAddr: - tclFormatAddr = '' - addStr = '0:' * (8 - len(singleAddr)) + '0' - for i in range(len(singleAddr)): - if singleAddr[i] == '': - tclFormatAddr += addStr + ":" - else: - tclFormatAddr += singleAddr[i] + ":" - tclFormatAddr = tclFormatAddr[0:len(tclFormatAddr) - 1] - return tclFormatAddr - else: - return ipv6 - - def get_ports(self): - """ - API to get ixia ports - """ - plist = list() - if self.session is None: - return plist - - for p in self.ports: - plist.append({'type': 'ixia', 'pci': 'IXIA:%d.%d' % (p['card'], p['port'])}) - return plist - - def pci_to_port(self, pci): - """ - Convert IXIA fake pci to IXIA port. - """ - ixia_pci_regex = "IXIA:(\d*).(\d*)" - m = re.match(ixia_pci_regex, pci) - if m is None: - return {'card': -1, 'port': -1} - - return {'card': int(m.group(1)), 'port': int(m.group(2))} - - def loss(self, portList, ratePercent, delay=5): - """ - Run loss performance test and return loss rate. - """ - rxPortlist, txPortlist = self._configure_everything(portList, ratePercent) - return self.get_loss_packet_rate(rxPortlist, txPortlist, delay) - - def get_loss_packet_rate(self, rxPortlist, txPortlist, delay=5): - """ - Get RX/TX packet statistics and calculate loss rate. - """ - time.sleep(delay) - - self.send_expect("ixStopTransmit portList", "%", 10) - time.sleep(2) - sendNumber = 0 - for port in txPortlist: - self.stat_get_stat_all_stats(port) - sendNumber += self.get_frames_sent() - time.sleep(0.5) - - self.logger.info("send :%f" % sendNumber) - - assert sendNumber != 0 - - revNumber = 0 - for port in rxPortlist: - self.stat_get_stat_all_stats(port) - revNumber += self.get_frames_received() - self.logger.info("rev :%f" % revNumber) - - return float(sendNumber - revNumber) / sendNumber, sendNumber, revNumber - - def latency(self, portList, ratePercent, delay=5): - """ - Run latency performance test and return latency statistics. - """ - rxPortlist, txPortlist = self._configure_everything(portList, ratePercent, True) - return self.get_packet_latency(rxPortlist) - - def get_packet_latency(self, rxPortlist): - """ - Stop IXIA transmit and return latency statistics. - """ - latencyList = [] - time.sleep(10) - self.send_expect("ixStopTransmit portList", "%", 10) - for rx_port in rxPortlist: - self.pktGroup_get_stat_all_stats(rx_port) - latency = {"port": rx_port, - "min": self.get_min_latency(), - "max": self.get_max_latency(), - "average": self.get_average_latency()} - latencyList.append(latency) - return latencyList - - def throughput(self, port_list, rate_percent=100, delay=5): - """ - Run throughput performance test and return throughput statistics. - """ - rxPortlist, txPortlist = self._configure_everything(port_list, rate_percent) - return self.get_transmission_results(rxPortlist, txPortlist, delay) - - """ - This function could be used to check the packets' order whether same as the receive sequence. - Please notice that this function only support single-stream mode. - """ - def is_packet_ordered(self, port_list, delay): - rxPortlist, txPortlist = self.prepare_port_list(port_list) - self.prepare_ixia_for_transmission(txPortlist, rxPortlist) - self.send_expect('port config -receiveMode [expr $::portCapture|$::portRxSequenceChecking|$::portRxModeWidePacketGroup]', '%') - self.send_expect('port config -autonegotiate true', '%') - self.send_expect('ixWritePortsToHardware portList', '%') - self.send_expect('set streamId 1', '%') - self.send_expect('stream setDefault', '%') - self.send_expect('ixStartPortPacketGroups %d %d %d' % (self.chasId, self.ports[0]['card'], self.ports[0]['port']), '%') - self.send_expect('ixStartTransmit portList', '%') - self.send_expect('after 1000 * %d' % delay, '%') - self.send_expect('ixStopTransmit portList', '%') - self.send_expect('ixStopPortPacketGroups %d %d %d' % (self.chasId, self.ports[0]['card'], self.ports[0]['port']), '%') - self.send_expect('packetGroupStats get %d %d %d 1 1' % (self.chasId, self.ports[0]['card'], self.ports[0]['port']), '%') - self.send_expect('packetroupStats getGroup 1', '%') - self.send_expect('set reverseSequenceError [packetGroupStats cget -reverseSequenceError]]', '%') - output = self.send_expect('puts $reverseSequenceError', '%') - return int(output[:-2]) - - def _configure_everything(self, port_list, rate_percent, latency=False): - """ - Prepare and configure IXIA ports for performance test. - """ - rxPortlist, txPortlist = self.prepare_port_list(port_list, rate_percent, latency) - self.prepare_ixia_for_transmission(txPortlist, rxPortlist) - self.configure_transmission() - self.start_transmission() - self.clear_tcl_commands() - return rxPortlist, txPortlist - - def clear_tcl_commands(self): - """ - Clear all commands in command list. - """ - del self.tcl_cmds[:] - - def start_transmission(self): - """ - Run commands in command list. - """ - fileContent = "\n".join(self.tcl_cmds) + "\n" - self.tester.create_file(fileContent, 'ixiaConfig.tcl') - self.send_expect("source ixiaConfig.tcl", "% ", 75) - - def configure_transmission(self, latency=False): - """ - Start IXIA ports transmission. - """ - self.add_tcl_cmd("ixStartTransmit portList") - - def prepare_port_list(self, portList, rate_percent=100, latency=False): - """ - Configure stream and flow on every IXIA ports. - """ - txPortlist = set() - rxPortlist = set() - - for (txPort, rxPort, pcapFile) in portList: - txPortlist.add(txPort) - rxPortlist.add(rxPort) - - # port init - self.config_port([self.pci_to_port( - self.tester.get_pci(port)) for port in txPortlist.union(rxPortlist)]) - - # stream/flow setting - for (txPort, rxPort, pcapFile) in portList: - self.config_stream(pcapFile, self.pci_to_port(self.tester.get_pci(txPort)), rate_percent, 1, latency) - - # config stream before packetGroup - if latency is not False: - for (txPort, rxPort, pcapFile) in portList: - flow_num = len(self.parse_pcap(pcapFile)) - self.config_pktGroup_rx(self.pci_to_port(self.tester.get_pci(rxPort))) - self.config_pktGroup_tx(self.pci_to_port(self.tester.get_pci(txPort))) - return rxPortlist, txPortlist - - def prepare_ixia_for_transmission(self, txPortlist, rxPortlist): - """ - Clear all statistics and implement configuration to IXIA hardware. - """ - self.add_tcl_cmd("ixClearStats portList") - self.set_ixia_port_list([self.pci_to_port(self.tester.get_pci(port)) for port in txPortlist]) - self.add_tcl_cmd("ixWriteConfigToHardware portList") - for port in txPortlist: - self.start_pktGroup(self.pci_to_port(self.tester.get_pci(port))) - for port in rxPortlist: - self.start_pktGroup(self.pci_to_port(self.tester.get_pci(port))) - - def hook_transmission_func(self): - pass - - def get_transmission_results(self, rx_port_list, tx_port_list, delay=5): - """ - Override this method if you want to change the way of getting results - back from IXIA. - """ - time.sleep(delay) - bpsRate = 0 - rate = 0 - oversize = 0 - for port in rx_port_list: - self.stat_get_rate_stat_all_stats(port) - out = self.send_expect("stat cget -framesReceived", '%', 10) - rate += int(out.strip()) - out = self.send_expect("stat cget -bitsReceived", '% ', 10) - self.logger.debug("port %d bits rate:" % (port) + out) - bpsRate += int(out.strip()) - out = self.send_expect("stat cget -oversize", '%', 10) - oversize += int(out.strip()) - - self.logger.info("Rate: %f Mpps" % (rate * 1.0 / 1000000)) - self.logger.info("Mbps rate: %f Mbps" % (bpsRate * 1.0 / 1000000)) - - self.hook_transmission_func() - - self.send_expect("ixStopTransmit portList", "%", 30) - - if rate == 0 and oversize > 0: - return (bpsRate, oversize) - else: - return (bpsRate, rate) - - def config_ixia_dcb_init(self, rxPort, txPort): - """ - Configure Ixia for DCB. - """ - self.send_expect("source ./ixTcl1.0/ixiaDCB.tcl", "% ") - self.send_expect("configIxia %d %s" % (self.chasId, ' '.join(["%s" % ( - repr(self.conRelation[port][n])) for port in [rxPort, txPort] for n in range(3)])), "% ", 100) - - def config_port_dcb(self, direction, tc): - """ - Configure Port for DCB. - """ - self.send_expect("configPort %s %s" % (direction, tc), "% ", 100) - - def cfgStreamDcb(self, stream, rate, prio, types): - """ - Configure Stream for DCB. - """ - self.send_expect("configStream %s %s %s %s" % (stream, rate, prio, types), "% ", 100) - - def get_connection_relation(self, dutPorts): - """ - Get the connect relations between DUT and Ixia. - """ - for port in dutPorts: - info = self.tester.get_pci(self.tester.get_local_port(port)).split('.') - self.conRelation[port] = [int(info[0]), int(info[1]), repr(self.tester.dut.get_mac_address(port).replace(':', ' ').upper())] - return self.conRelation - - def config_pktGroup_rx(self, rxport): - """ - Sets the transmit Packet Group configuration of the stream - Default streamID is 1 - """ - self.add_tcl_cmd("port config -receiveMode $::portRxModeWidePacketGroup") - self.add_tcl_cmd("port set %d %d %d" % (self.chasId, rxport['card'], rxport['port'])) - self.add_tcl_cmd("packetGroup setDefault") - self.add_tcl_cmd("packetGroup config -latencyControl cutThrough") - self.add_tcl_cmd("packetGroup setRx %d %d %d" % (self.chasId, rxport['card'], rxport['port'])) - self.add_tcl_cmd("packetGroup setTx %d %d %d 1" % (self.chasId, rxport['card'], rxport['port'])) - - def config_pktGroup_tx(self, txport): - """ - Configure tx port pktGroup for latency. - """ - self.add_tcl_cmd("packetGroup setDefault") - self.add_tcl_cmd("packetGroup config -insertSignature true") - self.add_tcl_cmd("packetGroup setTx %d %d %d 1" % (self.chasId, - txport['card'], txport['port'])) - - def start_pktGroup(self, port): - """ - Start tx port pktGroup for latency. - """ - self.add_tcl_cmd("ixStartPortPacketGroups %d %d %d" % (self.chasId, - port['card'], port['port'])) - - def pktGroup_get_stat_all_stats(self, port_number): - """ - Stop Packet Group operation on port and get current Packet Group - statistics on port. - """ - port = self.pci_to_port(self.tester.get_pci(port_number)) - self.send_expect("ixStopPortPacketGroups %d %d %d" % (self.chasId, port['card'], port['port']), "%", 100) - self.send_expect("packetGroupStats get %d %d %d 0 16384" % (self.chasId, port['card'], port['port']), "%", 100) - self.send_expect("packetGroupStats getGroup 0", "%", 100) - - def close(self): - """ - We first close the tclsh session opened at the beginning, - then the SSH session. - """ - if self.isalive(): - self.send_expect('exit', '# ') - super(IxiaPacketGenerator, self).close() - - def stat_get_stat_all_stats(self, port_number): - """ - Sends a IXIA TCL command to obtain all the stat values on a given port. - """ - port = self.pci_to_port(self.tester.get_pci(port_number)) - command = 'stat get statAllStats {0} {1} {2}' - command = command.format(self.chasId, port['card'], port['port']) - self.send_expect(command, '% ', 10) - - def prepare_ixia_internal_buffers(self, port_number): - """ - Tells IXIA to prepare the internal buffers were the frames were captured. - """ - port = self.pci_to_port(self.tester.get_pci(port_number)) - command = 'capture get {0} {1} {2}' - command = command.format(self.chasId, port['card'], port['port']) - self.send_expect(command, '% ', 30) - - def stat_get_rate_stat_all_stats(self, port_number): - """ - All statistics of specified IXIA port. - """ - port = self.pci_to_port(self.tester.get_pci(port_number)) - command = 'stat getRate statAllStats {0} {1} {2}' - command = command.format(self.chasId, port['card'], port['port']) - self.send_expect(command, '% ', 30) - out = self.send_expect(command, '% ', 30) - - def ixia_capture_buffer(self, port_number, first_frame, last_frame): - """ - Tells IXIA to load the captured frames into the internal buffers. - """ - port = self.pci_to_port(self.tester.get_pci(port_number)) - command = 'captureBuffer get {0} {1} {2} {3} {4}' - command = command.format(self.chasId, port['card'], port['port'], - first_frame, last_frame) - self.send_expect(command, '%', 60) - - def ixia_export_buffer_to_file(self, frames_filename): - """ - Tells IXIA to dump the frames it has loaded in its internal buffer to a - text file. - """ - command = 'captureBuffer export %s' % frames_filename - self.send_expect(command, '%', 30) - - def _stat_cget_value(self, requested_value): - """ - Sends a IXIA TCL command to obtain a given stat value. - """ - command = "stat cget -" + requested_value - result = self.send_expect(command, '%', 10) - return int(result.strip()) - - def _capture_cget_value(self, requested_value): - """ - Sends a IXIA TCL command to capture certain number of packets. - """ - command = "capture cget -" + requested_value - result = self.send_expect(command, '%', 10) - return int(result.strip()) - - def _packetgroup_cget_value(self, requested_value): - """ - Sends a IXIA TCL command to get pktGroup stat value. - """ - command = "packetGroupStats cget -" + requested_value - result = self.send_expect(command, '%', 10) - return int(result.strip()) - - def number_of_captured_packets(self): - """ - Returns the number of packets captured by IXIA on a previously set - port. Call self.stat_get_stat_all_stats(port) before. - """ - return self._capture_cget_value('nPackets') - - def get_frames_received(self): - """ - Returns the number of packets captured by IXIA on a previously set - port. Call self.stat_get_stat_all_stats(port) before. - """ - if self._stat_cget_value('framesReceived') != 0: - return self._stat_cget_value('framesReceived') - else: - # if the packet size is large than 1518, this line will avoid return - # a wrong number - return self._stat_cget_value('oversize') - - def get_flow_control_frames(self): - """ - Returns the number of control frames captured by IXIA on a - previously set port. Call self.stat_get_stat_all_stats(port) before. - """ - return self._stat_cget_value('flowControlFrames') - - def get_frames_sent(self): - """ - Returns the number of packets sent by IXIA on a previously set - port. Call self.stat_get_stat_all_stats(port) before. - """ - return self._stat_cget_value('framesSent') - - def get_transmit_duration(self): - """ - Returns the duration in nanosecs of the last transmission on a - previously set port. Call self.stat_get_stat_all_stats(port) before. - """ - return self._stat_cget_value('transmitDuration') - - def get_min_latency(self): - """ - Returns the minimum latency in nanoseconds of the frames in the - retrieved capture buffer. Call packetGroupStats get before. - """ - return self._packetgroup_cget_value('minLatency') - - def get_max_latency(self): - """ - Returns the maximum latency in nanoseconds of the frames in the - retrieved capture buffer. Call packetGroupStats get before. - """ - return self._packetgroup_cget_value('maxLatency') - - def get_average_latency(self): - """ - Returns the average latency in nanoseconds of the frames in the - retrieved capture buffer. Call packetGroupStats get before. - """ - return self._packetgroup_cget_value('averageLatency') - - def _transmission_pre_config(self, port_list, rate_percent, latency=False): - """ - Prepare and configure IXIA ports for performance test. And remove the transmission step in this config sequence. - This function is set only for function send_number_packets for nic_single_core_perf test case use - """ - rxPortlist, txPortlist = self.prepare_port_list(port_list, rate_percent, latency) - self.prepare_ixia_for_transmission(txPortlist, rxPortlist) - self.start_transmission() - self.clear_tcl_commands() - return rxPortlist, txPortlist - - def send_number_packets(self, portList, ratePercent, packetNum): - """ - Configure ixia to send fixed number of packets - Note that this function is only set for test_suite nic_single_core_perf, - Not for common use - """ - rxPortlist, txPortlist = self._transmission_pre_config(portList, ratePercent) - - self.send_expect("stream config -numFrames %s" % packetNum, "%", 5) - self.send_expect("stream config -dma stopStream", "%", 5) - for txPort in txPortlist: - port = self.pci_to_port(self.tester.get_pci(txPort)) - self.send_expect("stream set %d %d %d 1" % (self.chasId, port['card'], port['port']), "%", 5) - - self.send_expect("ixWritePortsToHardware portList", "%", 5) - self.send_expect("ixClearStats portList", "%", 5) - self.send_expect("ixStartTransmit portList", "%", 5) - time.sleep(10) - - rxPackets = 0 - for port in txPortlist: - self.stat_get_stat_all_stats(port) - txPackets = self.get_frames_sent() - while txPackets != packetNum: - time.sleep(10) - self.stat_get_stat_all_stats(port) - txPackets = self.get_frames_sent() - rxPackets += self.get_frames_received() - self.logger.info("Received packets :%s" % rxPackets) - - return rxPackets diff --git a/framework/logger.py b/framework/logger.py index 63e1d831..5a04bdd2 100644 --- a/framework/logger.py +++ b/framework/logger.py @@ -58,9 +58,6 @@ logging.SUITE_DUT_OUTPUT = logging.DEBUG + 3 logging.SUITE_TESTER_CMD = logging.INFO + 4 logging.SUITE_TESTER_OUTPUT = logging.DEBUG + 4 -logging.DTS_IXIA_CMD = logging.INFO + 5 -logging.DTS_IXIA_OUTPUT = logging.DEBUG + 5 - logging.DTS_VIRTDUT_CMD = logging.INFO + 6 logging.DTS_VIRTDUT_OUTPUT = logging.DEBUG + 6 @@ -75,9 +72,6 @@ logging.addLevelName(logging.DTS_TESTER_CMD, 'DTS_TESTER_CMD') logging.addLevelName(logging.DTS_TESTER_OUTPUT, 'DTS_TESTER_OUTPUT') logging.addLevelName(logging.DTS_TESTER_RESULT, 'DTS_TESTER_RESULT') -logging.addLevelName(logging.DTS_IXIA_CMD, 'DTS_IXIA_CMD') -logging.addLevelName(logging.DTS_IXIA_OUTPUT, 'DTS_IXIA_OUTPUT') - logging.addLevelName(logging.DTS_VIRTDUT_CMD, 'VIRTDUT_CMD') logging.addLevelName(logging.DTS_VIRTDUT_OUTPUT, 'VIRTDUT_OUTPUT') @@ -140,12 +134,6 @@ class BaseLoggerAdapter(logging.LoggerAdapter): def suite_tester_output(self, msg, *args, **kwargs): self.log(logging.SUITE_TESTER_OUTPUT, msg, *args, **kwargs) - def dts_ixia_cmd(self, msg, *args, **kwargs): - self.log(logging.DTS_IXIA_CMD, msg, *args, **kwargs) - - def dts_ixia_output(self, msg, *args, **kwargs): - self.log(logging.DTS_IXIA_OUTPUT, msg, *args, **kwargs) - def dts_virtdut_cmd(self, msg, *args, **kwargs): self.log(logging.DTS_VIRTDUT_CMD, msg, *args, **kwargs) @@ -174,8 +162,6 @@ class ColorHandler(logging.StreamHandler): logging.DTS_TESTER_CMD: '', # SYSTEM logging.SUITE_DUT_CMD: '', # SYSTEM logging.SUITE_TESTER_CMD: '', # SYSTEM - logging.DTS_IXIA_CMD: '', # SYSTEM - logging.DTS_IXIA_OUTPUT: '', # SYSTEM logging.DTS_PKTGEN_CMD: '', # SYSTEM logging.DTS_PKTGEN_OUTPUT: '', # SYSTEM logging.DTS_VIRTDUT_CMD: '', # SYSTEM @@ -317,9 +303,6 @@ class DTSLOG(BaseLoggerAdapter): self.info_lvl = logging.DTS_TESTER_CMD self.debug_lvl = logging.DTS_TESTER_OUTPUT self.warn_lvl = logging.DTS_TESTER_RESULT - elif crb.startswith('ixia'): - self.info_lvl = logging.DTS_IXIA_CMD - self.debug_lvl = logging.DTS_IXIA_OUTPUT elif crb.startswith('pktgen'): self.info_lvl = logging.DTS_PKTGEN_CMD self.debug_lvl = logging.DTS_PKTGEN_OUTPUT @@ -352,9 +335,6 @@ class DTSLOG(BaseLoggerAdapter): elif crb == 'tester': self.info_lvl = logging.SUITE_TESTER_CMD self.debug_lvl = logging.SUITE_TESTER_OUTPUT - elif crb == 'ixia': - self.info_lvl = logging.DTS_IXIA_CMD - self.debug_lvl = logging.DTS_IXIA_OUTPUT elif crb == 'pktgen': self.info_lvl = logging.DTS_PKTGEN_CMD self.debug_lvl = logging.DTS_PKTGEN_OUTPUT diff --git a/framework/project_dpdk.py b/framework/project_dpdk.py index d96f8d63..51d32229 100644 --- a/framework/project_dpdk.py +++ b/framework/project_dpdk.py @@ -40,7 +40,7 @@ from crb import Crb from dut import Dut from tester import Tester from logger import getLogger -from settings import IXIA, DRIVERS +from settings import DRIVERS from utils import RED @@ -707,16 +707,6 @@ class DPDKtester(Tester): self.tester_prerequisites() self.set_promisc() - # use software pktgen for performance test - if perf_test is True: - try: - if self.crb[IXIA] is not None: - self.logger.info("Use hardware packet generator") - except Exception as e: - self.logger.warning("Use default software pktgen") - out = self.send_expect("ls /root/igb_uio.ko", "# ") - assert ("No such file or directory" not in out), "Can not find /root/igb_uio.ko for performance" - self.setup_memory() self.stage = "post-init" diff --git a/framework/settings.py b/framework/settings.py index fe7c01b5..c08b8709 100644 --- a/framework/settings.py +++ b/framework/settings.py @@ -226,7 +226,6 @@ TIMEOUT = 15 """ Global macro for dts. """ -IXIA = "ixia" PKTGEN = "pktgen" PKTGEN_DPDK = "dpdk" PKTGEN_TREX = "trex" diff --git a/framework/tester.py b/framework/tester.py index ec233b8a..8f6e97ae 100644 --- a/framework/tester.py +++ b/framework/tester.py @@ -38,10 +38,9 @@ import subprocess import os from time import sleep from settings import NICS, load_global_setting, PERF_SETTING -from settings import IXIA, USERNAME, PKTGEN, PKTGEN_GRP +from settings import USERNAME, PKTGEN, PKTGEN_GRP from crb import Crb from net_device import GetNicObj -from etgen import IxiaPacketGenerator, SoftwarePacketGenerator import random from utils import (GREEN, convert_int2ip, convert_ip2int, check_crb_python_version) @@ -78,7 +77,6 @@ class Tester(Crb): self.bgItf = '' self.re_run_time = 0 self.pktgen = None - self.ixia_packet_gen = None self.tmp_scapy_module_dir = '/tmp/dep' # prepare for scapy env self.scapy_sessions_li = list() @@ -130,10 +128,7 @@ class Tester(Crb): if self.it_uses_external_generator(): if self.is_pktgen: self.pktgen_init() - else: - self.ixia_packet_gen = IxiaPacketGenerator(self) return - self.packet_gen = SoftwarePacketGenerator(self) def set_re_run(self, re_run_time): """ @@ -183,20 +178,12 @@ class Tester(Crb): try: # if pktgen_group is set, take pktgen config file as first selection if self.is_pktgen: - return True - elif self.crb[IXIA] is not None: return True except Exception as e: return False return False - def get_external_traffic_generator(self): - """ - Return IXIA object. - """ - return self.crb[IXIA] - def it_uses_external_generator(self): """ Check whether IXIA generator is ready for performance test. @@ -456,8 +443,6 @@ class Tester(Crb): if self.it_uses_external_generator(): if self.is_pktgen: self._scan_pktgen_ports() - else: - self.ports_info.extend(self.ixia_packet_gen.get_ports()) self.save_serializer_ports() for port_info in self.ports_info: @@ -572,8 +557,6 @@ class Tester(Crb): self.ports_info[localPort]['pci'], mac, ipv6) elif self.ports_info[localPort]['type'].lower() == 'trex': return "Not implemented yet" - elif self.ports_info[localPort]['type'].lower() in 'ixia': - return self.ixia_packet_gen.send_ping6(self.ports_info[localPort]['pci'], mac, ipv6) else: return self.send_expect("ping6 -w 5 -c 5 -A %s%%%s" % (ipv6, self.ports_info[localPort]['intf']), "# ", 10) @@ -671,60 +654,6 @@ class Tester(Crb): return out - def traffic_generator_throughput(self, portList, rate_percent=100, delay=5): - """ - Run throughput performance test on specified ports. - """ - if self.check_port_list(portList, 'ixia'): - return self.ixia_packet_gen.throughput(portList, rate_percent, delay) - if not self.check_port_list(portList): - self.logger.warning("exception by mixed port types") - return None - return self.packet_gen.throughput(portList, rate_percent) - - def verify_packet_order(self, portList, delay): - if self.check_port_list(portList, 'ixia'): - return self.ixia_packet_gen.is_packet_ordered(portList, delay) - else: - self.logger.warning("Only ixia port support check verify packet order function") - return False - - def run_rfc2544(self, portlist, delay=120, permit_loss_rate=0): - """ - test_rate: the line rate we are going to test. - """ - test_rate = float(100) - - self.logger.info("test rate: %f " % test_rate) - loss_rate, tx_num, rx_num = self.traffic_generator_loss(portlist, test_rate, delay) - while loss_rate > permit_loss_rate: - test_rate = float(1 - loss_rate) * test_rate - loss_rate, tx_num, rx_num = self.traffic_generator_loss(portlist, test_rate, delay) - - self.logger.info("zero loss rate is %s" % test_rate) - return test_rate, tx_num, rx_num - - - def traffic_generator_loss(self, portList, ratePercent, delay=60): - """ - Run loss performance test on specified ports. - """ - if self.check_port_list(portList, 'ixia'): - return self.ixia_packet_gen.loss(portList, ratePercent, delay) - elif not self.check_port_list(portList): - self.logger.warning("exception by mixed port types") - return None - return self.packet_gen.loss(portList, ratePercent) - - def traffic_generator_latency(self, portList, ratePercent=100, delay=5): - """ - Run latency performance test on specified ports. - """ - if self.check_port_list(portList, 'ixia'): - return self.ixia_packet_gen.latency(portList, ratePercent, delay) - else: - return None - def parallel_transmit_ptks(self, pkt=None, intf='', send_times=1, interval=0.01): """ Callable function for parallel processes @@ -824,20 +753,6 @@ class Tester(Crb): return True - def extend_external_packet_generator(self, clazz, instance): - """ - Update packet generator function, will implement later. - """ - # packet generator has forbidden suite class to override parent class methods - if self.is_pktgen: - return - # discard this in future - if self.it_uses_external_generator(): - self.ixia_packet_gen.__class__ = clazz - current_attrs = instance.__dict__ - instance.__dict__ = self.ixia_packet_gen.__dict__ - instance.__dict__.update(current_attrs) - def tcpdump_sniff_packets(self, intf, count=0, filters=None, lldp_forbid=True): """ Wrapper for packet module sniff_packets @@ -879,9 +794,6 @@ class Tester(Crb): if 'start_trex' in list(self.pktgen.conf.keys()): self.restore_trex_interfaces() self.pktgen = None - elif self.ixia_packet_gen: - self.ixia_packet_gen.close() - self.ixia_packet_gen = None if self.scapy_sessions_li: for i in self.scapy_sessions_li: From patchwork Tue Aug 31 08:22:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yufen.Mo" X-Patchwork-Id: 97592 X-Patchwork-Delegate: lijuan.tu@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4F83FA0C46; Tue, 31 Aug 2021 10:21:38 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 49F6F406A2; Tue, 31 Aug 2021 10:21:38 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mails.dpdk.org (Postfix) with ESMTP id 20F19406A2 for ; Tue, 31 Aug 2021 10:21:35 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10092"; a="216576693" X-IronPort-AV: E=Sophos;i="5.84,365,1620716400"; d="scan'208";a="216576693" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2021 01:21:35 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,365,1620716400"; d="scan'208";a="540921796" Received: from dpdk-moyufen06.sh.intel.com ([10.67.116.208]) by fmsmga002.fm.intel.com with ESMTP; 31 Aug 2021 01:21:33 -0700 From: Yufen Mo To: dts@dpdk.org, lijuan.tu@intel.com, yingyax.han@intel.com, junx.w.zhou@intel.com Cc: Yufen Mo Date: Tue, 31 Aug 2021 16:22:16 +0800 Message-Id: <20210831082220.47375-3-yufengx.mo@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20210831082220.47375-1-yufengx.mo@intel.com> References: <20210831082220.47375-1-yufengx.mo@intel.com> MIME-Version: 1.0 Subject: [dts] [PATCH V2 2/6] tests: remove etgen X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" remove etgen relevant source code. Signed-off-by: Yufen Mo --- tests/TestSuite_af_xdp_2.py | 2 +- tests/TestSuite_distributor.py | 2 - tests/TestSuite_efd.py | 1 - tests/TestSuite_iavf.py | 1 - tests/TestSuite_multiprocess.py | 1 - tests/TestSuite_ntb.py | 1 - tests/TestSuite_packet_ordering.py | 1 - tests/TestSuite_performance_thread.py | 1 - tests/TestSuite_pmd.py | 1 - tests/TestSuite_rteflow_priority.py | 1 - tests/TestSuite_userspace_ethtool.py | 127 +++--------------- tests/TestSuite_vhost_virtio_pmd_interrupt.py | 1 - tests/TestSuite_virtio_event_idx_interrupt.py | 1 - tests/TestSuite_vm_power_manager.py | 3 +- tests/TestSuite_vmdq.py | 1 - tests/TestSuite_vmdq_dcb.py | 1 - 16 files changed, 23 insertions(+), 123 deletions(-) diff --git a/tests/TestSuite_af_xdp_2.py b/tests/TestSuite_af_xdp_2.py index 40a3d416..bcc9a751 100644 --- a/tests/TestSuite_af_xdp_2.py +++ b/tests/TestSuite_af_xdp_2.py @@ -45,7 +45,7 @@ class TestAfXdp(TestCase): Run at the start of each test suite. """ #self.verify(self.nic in ("fortville_spirit"), "the port can not run this suite") - self.tester.extend_external_packet_generator(TestAfXdp, self) + self.frame_sizes = [64, 128, 256, 512, 1024, 1518] self.dut_ports = self.dut.get_ports() self.verify(len(self.dut_ports) >= 2, "Insufficient ports for testing") diff --git a/tests/TestSuite_distributor.py b/tests/TestSuite_distributor.py index cd88977d..09a493b3 100644 --- a/tests/TestSuite_distributor.py +++ b/tests/TestSuite_distributor.py @@ -45,8 +45,6 @@ class TestDistributor(TestCase): """ Run at the start of each test suite. """ - self.tester.extend_external_packet_generator(TestDistributor, self) - # reduce tx queues for enable many workers self.dut.send_expect("sed -i -e 's/.*txRings = .*/\\tconst uint16_t rxRings = 1, txRings = 1;/' ./examples/distributor/main.c", "#") out = self.dut.build_dpdk_apps("./examples/distributor") diff --git a/tests/TestSuite_efd.py b/tests/TestSuite_efd.py index 787733ca..7d1e0a86 100644 --- a/tests/TestSuite_efd.py +++ b/tests/TestSuite_efd.py @@ -44,7 +44,6 @@ class TestEFD(TestCase): """ Run at the start of each test suite. """ - self.tester.extend_external_packet_generator(TestEFD, self) self.build_server_node_efd() diff --git a/tests/TestSuite_iavf.py b/tests/TestSuite_iavf.py index 9656b4fc..adaa1304 100644 --- a/tests/TestSuite_iavf.py +++ b/tests/TestSuite_iavf.py @@ -57,7 +57,6 @@ class TestIavf(TestCase): supported_vf_driver = ['pci-stub', 'vfio-pci'] def set_up_all(self): - self.tester.extend_external_packet_generator(TestIavf, self) self.dut_ports = self.dut.get_ports(self.nic) self.verify(len(self.dut_ports) > 1, "Insufficient ports") self.vm0 = None diff --git a/tests/TestSuite_multiprocess.py b/tests/TestSuite_multiprocess.py index 743ca1f3..8752a727 100644 --- a/tests/TestSuite_multiprocess.py +++ b/tests/TestSuite_multiprocess.py @@ -58,7 +58,6 @@ class TestMultiprocess(TestCase): # self.verify('bsdapp' not in self.target, "Multiprocess not support freebsd") self.verify(len(self.dut.get_all_cores()) >= 4, "Not enough Cores") - self.tester.extend_external_packet_generator(TestMultiprocess, self) self.dut_ports = self.dut.get_ports() self.socket = self.dut.get_numa_id(self.dut_ports[0]) diff --git a/tests/TestSuite_ntb.py b/tests/TestSuite_ntb.py index e5013132..01e10620 100644 --- a/tests/TestSuite_ntb.py +++ b/tests/TestSuite_ntb.py @@ -55,7 +55,6 @@ class TestNtb(TestCase): self.host_mac = self.ntb_host.get_mac_address(self.host_port) self.client_mac = self.ntb_client.get_mac_address(self.client_port) - self.tester.extend_external_packet_generator(TestNtb, self) self.frame_sizes = [64, 128, 256, 512, 1024, 1518] self.header_size = HEADER_SIZE['eth'] + HEADER_SIZE['ip'] + HEADER_SIZE['udp'] self.pktgen_helper = PacketGeneratorHelper() diff --git a/tests/TestSuite_packet_ordering.py b/tests/TestSuite_packet_ordering.py index 807a3c0d..2280b8b1 100644 --- a/tests/TestSuite_packet_ordering.py +++ b/tests/TestSuite_packet_ordering.py @@ -48,7 +48,6 @@ class TestPacketOrdering(TestCase): Executes the Packet Ordering prerequisites. Creates a simple scapy packet to be used later on the tests. It also compiles the example app. """ - self.tester.extend_external_packet_generator(TestPacketOrdering, self) self.dut_ports = self.dut.get_ports(self.nic) global valports valports = [_ for _ in self.dut_ports if self.tester.get_local_port(_) != -1] diff --git a/tests/TestSuite_performance_thread.py b/tests/TestSuite_performance_thread.py index 3ff20150..459d9a11 100644 --- a/tests/TestSuite_performance_thread.py +++ b/tests/TestSuite_performance_thread.py @@ -47,7 +47,6 @@ class TestPerformanceThread(TestCase): """ Run at the start of each test suite. """ - self.tester.extend_external_packet_generator(TestPerformanceThread, self) self.dut_ports = self.dut.get_ports(self.nic) global valports valports = [_ for _ in self.dut_ports if self.tester.get_local_port(_) != -1] diff --git a/tests/TestSuite_pmd.py b/tests/TestSuite_pmd.py index 48d35831..afc36d9f 100644 --- a/tests/TestSuite_pmd.py +++ b/tests/TestSuite_pmd.py @@ -58,7 +58,6 @@ class TestPmd(TestCase): PMD prerequisites. """ - self.tester.extend_external_packet_generator(TestPmd, self) self.frame_sizes = [64, 72, 128, 256, 512, 1024, 1280, 1518] diff --git a/tests/TestSuite_rteflow_priority.py b/tests/TestSuite_rteflow_priority.py index 353dc8f9..b0bbf245 100644 --- a/tests/TestSuite_rteflow_priority.py +++ b/tests/TestSuite_rteflow_priority.py @@ -42,7 +42,6 @@ from time import sleep from scapy.utils import struct, socket, PcapWriter import utils -from etgen import IxiaPacketGenerator from test_case import TestCase from settings import HEADER_SIZE from pmd_output import PmdOutput diff --git a/tests/TestSuite_userspace_ethtool.py b/tests/TestSuite_userspace_ethtool.py index fd65d718..4536b7d1 100644 --- a/tests/TestSuite_userspace_ethtool.py +++ b/tests/TestSuite_userspace_ethtool.py @@ -41,14 +41,14 @@ import re from test_case import TestCase from packet import Packet import random -from etgen import IxiaPacketGenerator from settings import HEADER_SIZE from settings import SCAPY2IXIA +from pktgen import PacketGeneratorHelper from utils import RED from exception import VerifyFailure -class TestUserspaceEthtool(TestCase, IxiaPacketGenerator): +class TestUserspaceEthtool(TestCase): def set_up_all(self): """ @@ -76,9 +76,8 @@ class TestUserspaceEthtool(TestCase, IxiaPacketGenerator): self.pause_time = 65535 self.frame_size = 64 self.pause_rate = 0.50 - - # update IxiaPacketGenerator function from local - self.tester.extend_external_packet_generator(TestUserspaceEthtool, self) + # create an instance to set stream field setting + self.pktgen_helper = PacketGeneratorHelper() def set_up(self): """ @@ -635,45 +634,6 @@ class TestUserspaceEthtool(TestCase, IxiaPacketGenerator): self.dut.send_expect("quit", "# ") - def test_perf_port_rx_pause(self): - """ - Test ethtool app flow control configure - """ - self.dut.send_expect(self.cmd, "EthApp>", 60) - # enable pause rx - self.dut.send_expect("pause 0 rx", "EthApp") - - # calculate number of packets - pps = self.wirespeed(self.nic, self.frame_size, 1) * 1000000.0 - # get line rate - linerate = pps * (self.frame_size + 20) * 8 - # calculate default sleep time for one pause frame - sleep = (1 / linerate) * self.pause_time * 512 - # calculate packets dropped in sleep time - self.n_pkts = int((sleep / (1 / pps)) * (1 / self.pause_rate)) - - tgen_input = [] - headers_size = HEADER_SIZE['eth'] + HEADER_SIZE['ip'] + \ - HEADER_SIZE['udp'] - payload_size = self.frame_size - headers_size - self.tester.scapy_append('wrpcap("pause_rx.pcap", [Ether()/IP()/UDP()/("X"*%d)])' % payload_size) - self.tester.scapy_execute() - # rx and tx is the same port - tester_port = self.tester.get_local_port(self.ports[0]) - tgen_input.append((tester_port, tester_port, "pause_rx.pcap")) - - ori_func = self.config_stream - self.config_stream = self.config_stream_pause_rx - _, rx_pps = self.tester.traffic_generator_throughput(tgen_input) - self.config_stream = ori_func - - rate = rx_pps / pps - # rate should same as expected rate - self.verify(rate > (self.pause_rate - 0.01) and - rate < (self.pause_rate + 0.01), "Failed to handle Rx pause frame") - - self.dut.send_expect("quit", "# ") - def test_perf_port_tx_pause(self): """ Test ethtool app flow control configure @@ -691,78 +651,33 @@ class TestUserspaceEthtool(TestCase, IxiaPacketGenerator): headers_size = HEADER_SIZE['eth'] + HEADER_SIZE['ip'] + \ HEADER_SIZE['udp'] payload_size = self.frame_size - headers_size - self.tester.scapy_append('wrpcap("pause_tx.pcap", [Ether()/IP()/UDP()/("X"*%d)])' % payload_size) + dst_mac = self.dut.get_mac_address(0) + self.tester.scapy_append( + 'wrpcap("/root/pause_tx.pcap", [Ether(dst="%s")/IP()/UDP()/("X"*%d)])' % (dst_mac, payload_size)) self.tester.scapy_execute() # rx and tx is the same port tester_port = self.tester.get_local_port(self.ports[0]) - tgen_input.append((tester_port, tester_port, "pause_tx.pcap")) - - self.wirespeed(self.nic, self.frame_size, 1) * 1000000.0 - _, tx_pps = self.tester.traffic_generator_throughput(tgen_input) - + tgen_input.append((tester_port, tester_port, "/root/pause_tx.pcap")) + + # run traffic generator + streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, 100, + None, self.tester.pktgen) + traffic_opt = {'throughput_stat_flag': True} + loss, rx_throughput = self.tester.pktgen._measure_loss( + stream_ids=streams, options=traffic_opt) + tx_pps = rx_throughput[1] + sent_pkts, recv_pkts = list(loss.values())[0][1:] + self.dut.send_expect("quit", "# ") + self.dut.send_expect("sed -i -e '/usleep(10);$/d' %s" % main_file, "# ") + # rebuild sample app + self.build_ethtool() # verify ixia transmit line rate dropped pps = self.wirespeed(self.nic, self.frame_size, 1) * 1000000.0 rate = tx_pps / pps self.verify(rate < 0.1, "Failed to slow down transmit speed") - # verify received packets more than sent - self.stat_get_stat_all_stats(tester_port) - sent_pkts = self.get_frames_sent() - recv_pkts = self.get_frames_received() self.verify((float(recv_pkts) / float(sent_pkts)) > 1.05, "Failed to transmit pause frame") - self.dut.send_expect("quit", "# ") - self.dut.send_expect("sed -i -e '/usleep(10);$/d' %s" % main_file, "# ") - # rebuild sample app - self.build_ethtool() - - def config_stream_pause_rx(self, fpcap, txport, rate_percent, stream_id=1, latency=False): - """ - Configure IXIA stream with pause frame and normal packet - """ - # enable flow control on port - self.add_tcl_cmd("port config -flowControl true") - self.add_tcl_cmd("port config -flowControlType ieee8023x") - self.add_tcl_cmd("port set %d %d %d" % (self.chasId, txport['card'], txport['port'])) - - flows = self.parse_pcap(fpcap) - - self.add_tcl_cmd("ixGlobalSetDefault") - self.add_tcl_cmd("stream config -rateMode usePercentRate") - self.add_tcl_cmd("stream config -percentPacketRate 100") - self.add_tcl_cmd("stream config -numBursts 1") - self.add_tcl_cmd("stream config -numFrames %d" % self.n_pkts) - self.add_tcl_cmd("stream config -dma advance") - - pat = re.compile(r"(\w+)\((.*)\)") - for header in flows[0].split('/'): - match = pat.match(header) - params = eval('dict(%s)' % match.group(2)) - method_name = match.group(1) - if method_name in SCAPY2IXIA: - method = getattr(self, method_name.lower()) - method(txport, **params) - - # stream id start from 1 - self.add_tcl_cmd("stream set %d %d %d %d" % (self.chasId, txport['card'], txport['port'], 1)) - - # pause frame stream - self.add_tcl_cmd("stream config -rateMode usePercentRate") - self.add_tcl_cmd("stream config -percentPacketRate 100") - self.add_tcl_cmd("stream config -numBursts 1") - self.add_tcl_cmd("stream config -numFrames 1") - self.add_tcl_cmd("stream config -dma gotoFirst") - - self.add_tcl_cmd("protocol setDefault") - self.add_tcl_cmd("protocol config -name pauseControl") - self.add_tcl_cmd("pauseControl setDefault") - self.add_tcl_cmd("pauseControl config -da \"01 80 C2 00 00 01\"") - self.add_tcl_cmd("pauseControl config -pauseTime %d" % self.pause_time) - self.add_tcl_cmd("pauseControl config -pauseControlType ieee8023x") - self.add_tcl_cmd("pauseControl set %d %d %d" % (self.chasId, txport['card'], txport['port'])) - self.add_tcl_cmd("stream set %d %d %d %d" % - (self.chasId, txport['card'], txport['port'], 2)) - def tear_down(self): """ Run after each test case. diff --git a/tests/TestSuite_vhost_virtio_pmd_interrupt.py b/tests/TestSuite_vhost_virtio_pmd_interrupt.py index 675a15ee..5dd2f830 100644 --- a/tests/TestSuite_vhost_virtio_pmd_interrupt.py +++ b/tests/TestSuite_vhost_virtio_pmd_interrupt.py @@ -49,7 +49,6 @@ class TestVhostVirtioPmdInterrupt(TestCase): """ Run at the start of each test suite. """ - self.tester.extend_external_packet_generator(TestVhostVirtioPmdInterrupt, self) self.fix_ip = False self.nb_cores = 4 self.queues = 4 diff --git a/tests/TestSuite_virtio_event_idx_interrupt.py b/tests/TestSuite_virtio_event_idx_interrupt.py index 37634f05..09918992 100644 --- a/tests/TestSuite_virtio_event_idx_interrupt.py +++ b/tests/TestSuite_virtio_event_idx_interrupt.py @@ -49,7 +49,6 @@ class TestVirtioIdxInterrupt(TestCase): """ Run at the start of each test suite. """ - self.tester.extend_external_packet_generator(TestVirtioIdxInterrupt, self) self.queues = 1 self.nb_cores = 1 self.dut_ports = self.dut.get_ports() diff --git a/tests/TestSuite_vm_power_manager.py b/tests/TestSuite_vm_power_manager.py index fca122bb..f650ba28 100644 --- a/tests/TestSuite_vm_power_manager.py +++ b/tests/TestSuite_vm_power_manager.py @@ -37,12 +37,11 @@ VM power manager test suite. import re import utils from test_case import TestCase -from etgen import IxiaPacketGenerator from settings import HEADER_SIZE from qemu_libvirt import LibvirtKvm -class TestVmPowerManager(TestCase, IxiaPacketGenerator): +class TestVmPowerManager(TestCase): def set_up_all(self): """ diff --git a/tests/TestSuite_vmdq.py b/tests/TestSuite_vmdq.py index 3f2ccde2..6dae54a4 100644 --- a/tests/TestSuite_vmdq.py +++ b/tests/TestSuite_vmdq.py @@ -50,7 +50,6 @@ class TestVmdq(TestCase): """ Run at the start of each test suite. """ - self.tester.extend_external_packet_generator(TestVmdq, self) self.dut_ports = self.dut.get_ports(self.nic) self.verify(len(self.dut_ports) >= 2, "Insufficient ports") diff --git a/tests/TestSuite_vmdq_dcb.py b/tests/TestSuite_vmdq_dcb.py index 5f0da0fb..2a248f8c 100644 --- a/tests/TestSuite_vmdq_dcb.py +++ b/tests/TestSuite_vmdq_dcb.py @@ -51,7 +51,6 @@ class TestVmdqDcb(TestCase): """ Run at the start of each test suite. """ - self.tester.extend_external_packet_generator(TestVmdqDcb, self) self.dut_ports = self.dut.get_ports(self.nic) self.verify(len(self.dut_ports) >= 2, "Insufficient ports") self.socket = self.dut.get_numa_id(self.dut_ports[0]) From patchwork Tue Aug 31 08:22:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yufen.Mo" X-Patchwork-Id: 97593 X-Patchwork-Delegate: lijuan.tu@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 76ABEA0C46; Tue, 31 Aug 2021 10:21:40 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 709B340E09; Tue, 31 Aug 2021 10:21:40 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mails.dpdk.org (Postfix) with ESMTP id BD60140041 for ; Tue, 31 Aug 2021 10:21:38 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10092"; a="216576699" X-IronPort-AV: E=Sophos;i="5.84,365,1620716400"; d="scan'208";a="216576699" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2021 01:21:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,365,1620716400"; d="scan'208";a="540921804" Received: from dpdk-moyufen06.sh.intel.com ([10.67.116.208]) by fmsmga002.fm.intel.com with ESMTP; 31 Aug 2021 01:21:36 -0700 From: Yufen Mo To: dts@dpdk.org, lijuan.tu@intel.com, yingyax.han@intel.com, junx.w.zhou@intel.com Cc: Yufen Mo Date: Tue, 31 Aug 2021 16:22:17 +0800 Message-Id: <20210831082220.47375-4-yufengx.mo@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20210831082220.47375-1-yufengx.mo@intel.com> References: <20210831082220.47375-1-yufengx.mo@intel.com> MIME-Version: 1.0 Subject: [dts] [PATCH V2 3/6] tests/vxlan: move to pktgen from etgen X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" #. remove etgen relevant source code. #. update perf test cases to pktgen. #. dpdk remove legacy filter command, perf test cases need to use rte flow command. Signed-off-by: Yufen Mo --- tests/TestSuite_vxlan.py | 186 ++++++++++++++++++++++++++------------- 1 file changed, 124 insertions(+), 62 deletions(-) diff --git a/tests/TestSuite_vxlan.py b/tests/TestSuite_vxlan.py index fdb6616d..fdf6170f 100644 --- a/tests/TestSuite_vxlan.py +++ b/tests/TestSuite_vxlan.py @@ -57,7 +57,7 @@ from scapy.route import * from test_case import TestCase from settings import HEADER_SIZE, FOLDERS -from etgen import IxiaPacketGenerator +from pktgen import PacketGeneratorHelper import packet # @@ -283,7 +283,7 @@ class VxlanTestConfig(object): return len(self.pkt) + 4 -class TestVxlan(TestCase, IxiaPacketGenerator): +class TestVxlan(TestCase): def set_up_all(self): """ @@ -301,9 +301,6 @@ class TestVxlan(TestCase, IxiaPacketGenerator): # Based on h/w type, choose how many ports to use ports = self.dut.get_ports() - # update IxiaPacketGenerator function by local - self.tester.extend_external_packet_generator(TestVxlan, self) - # Verify that enough ports are available self.verify(len(ports) >= 2, "Insufficient ports for testing") global valports @@ -396,6 +393,68 @@ class TestVxlan(TestCase, IxiaPacketGenerator): 'omac-imac-tenid', 'recvqueue': 'Multi'} ] + self.pktgen_helper = PacketGeneratorHelper() + + def set_fields(self): + fields_config = { + 'ip': { + 'src': {'action': 'random'}, + 'dst': {'action': 'random'}, + },} + return fields_config + + def suite_measure_throughput(self, tgen_input, use_vm=False): + vm_config = self.set_fields() + self.tester.pktgen.clear_streams() + streams = self.pktgen_helper.prepare_stream_from_tginput( + tgen_input, 100, vm_config if use_vm else None, self.tester.pktgen) + result = self.tester.pktgen.measure_throughput(stream_ids=streams) + + return result + + def perf_tunnel_filter_set_rule(self, rule_config): + rule_list = { + # check inner mac + inner vlan filter can work + 'imac-ivlan': + f'flow create {rule_config.get("dut_port")} ingress pattern eth / ' + f'ipv4 / udp / vxlan / eth dst is {rule_config.get("inner_mac_dst")} / ' + f'vlan tci is {rule_config.get("inner_vlan")} / end actions pf / ' + f'queue index {rule_config.get("queue")} / end', + # check inner mac + inner vlan + tunnel id filter can work + 'imac-ivlan-tenid': + f'flow create {rule_config.get("dut_port")} ingress pattern eth / ' + f'ipv4 / udp / vxlan vni is {rule_config.get("vni")} / ' + f'eth dst is {rule_config.get("inner_mac_dst")} / ' + f'vlan tci is {rule_config.get("inner_vlan")} / ' + f'end actions pf / queue index {rule_config.get("queue")} / end', + # check inner mac + tunnel id filter can work + 'imac-tenid': + f'flow create {rule_config.get("dut_port")} ingress pattern eth / ' + f'ipv4 / udp / vxlan vni is {rule_config.get("vni")} / ' + f'eth dst is {rule_config.get("inner_mac_dst")} / end actions pf / ' + f'queue index {rule_config.get("queue")} / end', + # check inner mac filter can work + 'imac': + f'flow create {rule_config.get("dut_port")} ingress pattern eth / ' + f'ipv4 / udp / vxlan / eth dst is {rule_config.get("inner_mac_dst")} / end actions pf / ' + f'queue index {rule_config.get("queue")} / end', + # check outer mac + inner mac + tunnel id filter can work + 'omac-imac-tenid': + f'flow create {rule_config.get("dut_port")} ingress pattern ' + f'eth dst is {rule_config.get("outer_mac_dst")} / ' + f'ipv4 / udp / vxlan vni is {rule_config.get("vni")} / ' + f'eth dst is {rule_config.get("inner_mac_dst")} / ' + f'end actions pf / queue index {rule_config.get("queue")} / end', + } + rule = rule_list.get(rule_config.get("tun_filter")) + if not rule: + msg = "not support format" + self.logger.error(msg) + return + out = self.dut.send_expect(rule, "testpmd>", 3) + pat = "Flow rule #\d+ created" + self.verify(re.findall(pat, out, re.M), "Flow rule create failed") + def send_and_detect(self, **kwargs): """ send vxlan packet and check whether testpmd detect the correct @@ -886,11 +945,17 @@ class TestVxlan(TestCase, IxiaPacketGenerator): self.enable_vxlan(dut_port) if tun_filter != 'None': - args = [dut_port, config.outer_mac_dst, - config.inner_mac_dst, config.inner_ip_dst, - config.inner_vlan, tun_filter, - config.vni, 0] - self.tunnel_filter_add(*args) + rule_config = { + 'dut_port': dut_port, + 'outer_mac_dst': config.outer_mac_dst, + 'inner_mac_dst': config.inner_mac_dst, + 'inner_ip_dst': config.inner_ip_dst, + 'inner_vlan': config.inner_vlan, + 'tun_filter': tun_filter, + 'vni': config.vni, + 'queue': 0 + } + self.perf_tunnel_filter_set_rule(rule_config) if perf_config['Packet'] == 'Normal': config.outer_udp_dst = 63 @@ -917,35 +982,22 @@ class TestVxlan(TestCase, IxiaPacketGenerator): pkt = config.create_pcap() pkts.append(pkt) - args = [dut_port, config.outer_mac_dst, - config.inner_mac_dst, config.inner_ip_dst, - config.inner_vlan, tun_filter, - config.vni, (queue + 1)] - self.tunnel_filter_add(*args) + rule_config = { + 'dut_port': dut_port, + 'outer_mac_dst': config.outer_mac_dst, + 'inner_mac_dst': config.inner_mac_dst, + 'inner_ip_dst': config.inner_ip_dst, + 'inner_vlan': config.inner_vlan, + 'tun_filter': tun_filter, + 'vni': config.vni, + 'queue': (queue + 1), + } + self.perf_tunnel_filter_set_rule(rule_config) # save pkt list into pcap file wrpcap(config.pcap_file, pkts) self.tester.session.copy_file_to(config.pcap_file) - def ip_random(self, port, frag, src, proto, tos, dst, chksum, len, - options, version, flags, ihl, ttl, id): - self.add_tcl_cmd("protocol config -name ip") - self.add_tcl_cmd('ip config -sourceIpAddr "%s"' % src) - self.add_tcl_cmd('ip config -sourceIpAddrMode ipIncrHost') - self.add_tcl_cmd('ip config -sourceIpAddrRepeatCount %d' % 64) - self.add_tcl_cmd('ip config -destIpAddr "%s"' % dst) - self.add_tcl_cmd('ip config -destIpMask "255.255.0.0" ') - self.add_tcl_cmd('ip config -destIpAddrMode ipRandom') - self.add_tcl_cmd('ip config -destIpAddrRepeatCount 65536') - self.add_tcl_cmd("ip config -ttl %d" % ttl) - self.add_tcl_cmd("ip config -totalLength %d" % len) - self.add_tcl_cmd("ip config -fragment %d" % frag) - self.add_tcl_cmd("ip config -ipProtocol %d" % proto) - self.add_tcl_cmd("ip config -identifier %d" % id) - self.add_tcl_cmd("stream config -framesize %d" % (len + 18)) - self.add_tcl_cmd("ip set %d %d %d" % - (self.chasId, port['card'], port['port'])) - def combine_pcap(self, dest_pcap, src_pcap): pkts = rdpcap(dest_pcap) if len(pkts) != 1: @@ -1002,15 +1054,9 @@ class TestVxlan(TestCase, IxiaPacketGenerator): else: wirespeed = self.wirespeed(self.nic, PACKET_LEN, 1) - if recv_queue == 'Multi' and tun_filter == "None": - ip_ori = self.ip - self.ip = self.ip_random - # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input) - - if recv_queue == 'Multi' and tun_filter == "None": - self.ip = ip_ori + use_vm = True if recv_queue == 'Multi' and tun_filter == "None" else False + _, pps = self.suite_measure_throughput(tgen_input, use_vm=use_vm) pps /= 1000000.0 perf_config['Mpps'] = pps @@ -1020,8 +1066,9 @@ class TestVxlan(TestCase, IxiaPacketGenerator): self.dut.send_expect("quit", "# ", 10) # verify every queue work fine + check_queue = 0 if recv_queue == 'Multi': - for queue in range(self.tunnel_multiqueue): + for queue in range(check_queue): self.verify("Queue= %d -> TX Port" % (queue) in out, "Queue %d no traffic" % queue) @@ -1033,6 +1080,7 @@ class TestVxlan(TestCase, IxiaPacketGenerator): self.result_table_print() + def test_perf_vxlan_checksum_performance_2ports(self): self.result_table_create(self.chksum_header) vxlan = VxlanTestConfig(self, payload_size=self.vxlan_payload) @@ -1053,8 +1101,10 @@ class TestVxlan(TestCase, IxiaPacketGenerator): socket=self.ports_socket) core_mask = utils.create_mask(core_list) - tgen_dut = self.tester.get_local_port(self.dut_port) - tgen_tester = self.tester.get_local_port(self.recv_port) + self.dut_ports = self.dut.get_ports_performance(force_different_nic=False) + tx_port = self.tester.get_local_port(self.dut_ports[0]) + rx_port = self.tester.get_local_port(self.dut_ports[1]) + for cal in self.cal_type: recv_queue = cal['recvqueue'] print((utils.GREEN("Measure checksum performance of [%s %s %s]" @@ -1063,9 +1113,10 @@ class TestVxlan(TestCase, IxiaPacketGenerator): # configure flows tgen_input = [] if recv_queue == 'Multi': - self.combine_pcap("vxlan1.pcap", "vxlan1_1.pcap") - self.tester.session.copy_file_to("vxlan1.pcap") - tgen_input.append((tgen_dut, tgen_tester, "vxlan1.pcap")) + tgen_input.append((tx_port, rx_port, "vxlan1.pcap")) + tgen_input.append((tx_port, rx_port, "vxlan1_1.pcap")) + else: + tgen_input.append((tx_port, rx_port, "vxlan1.pcap")) # multi queue and signle queue commands if recv_queue == 'Multi': @@ -1078,24 +1129,34 @@ class TestVxlan(TestCase, IxiaPacketGenerator): self.dut.send_expect(pmd_cmd, "testpmd> ", 100) self.dut.send_expect("set fwd csum", "testpmd>", 10) - self.dut.send_expect("csum parse-tunnel on %d" % - self.dut_port, "testpmd>", 10) - self.dut.send_expect("csum parse-tunnel on %d" % - self.recv_port, "testpmd>", 10) self.enable_vxlan(self.dut_port) self.enable_vxlan(self.recv_port) # redirect flow to another queue by tunnel filter - args = [self.dut_port, vxlan.outer_mac_dst, - vxlan.inner_mac_dst, vxlan.inner_ip_dst, - 0, 'imac', vxlan.vni, 0] - self.tunnel_filter_add(*args) + rule_config = { + 'dut_port': self.dut_port, + 'outer_mac_dst': vxlan.outer_mac_dst, + 'inner_mac_dst': vxlan.inner_mac_dst, + 'inner_ip_dst': vxlan.inner_ip_dst, + 'inner_vlan': 0, + 'tun_filter': 'imac', + 'vni': vxlan.vni, + 'queue': 0 + } + self.perf_tunnel_filter_set_rule(rule_config) if recv_queue == 'Multi': - args = [self.dut_port, vxlan_queue.outer_mac_dst, - vxlan_queue.inner_mac_dst, vxlan_queue.inner_ip_dst, - 0, 'imac', vxlan_queue.vni, 1] - self.tunnel_filter_add(*args) + rule_config = { + 'dut_port': self.dut_port, + 'outer_mac_dst': vxlan_queue.outer_mac_dst, + 'inner_mac_dst': vxlan_queue.inner_mac_dst, + 'inner_ip_dst': vxlan_queue.inner_ip_dst, + 'inner_vlan': 0, + 'tun_filter': 'imac', + 'vni': vxlan.vni, + 'queue': 1 + } + self.perf_tunnel_filter_set_rule(rule_config) for pro in cal['csum']: self.csum_set_type(pro, self.dut_port) @@ -1106,7 +1167,7 @@ class TestVxlan(TestCase, IxiaPacketGenerator): wirespeed = self.wirespeed(self.nic, PACKET_LEN, 1) # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input) + _, pps = self.suite_measure_throughput(tgen_input) pps /= 1000000.0 cal['Mpps'] = pps @@ -1116,8 +1177,9 @@ class TestVxlan(TestCase, IxiaPacketGenerator): self.dut.send_expect("quit", "# ", 10) # verify every queue work fine + check_queue = 1 if recv_queue == 'Multi': - for queue in range(self.tunnel_multiqueue): + for queue in range(check_queue): self.verify("Queue= %d -> TX Port" % (queue) in out, "Queue %d no traffic" % queue) From patchwork Tue Aug 31 08:22:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yufen.Mo" X-Patchwork-Id: 97594 X-Patchwork-Delegate: lijuan.tu@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9E68DA0C46; Tue, 31 Aug 2021 10:21:44 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 983F240E01; Tue, 31 Aug 2021 10:21:44 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mails.dpdk.org (Postfix) with ESMTP id A71D140041 for ; Tue, 31 Aug 2021 10:21:41 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10092"; a="216576704" X-IronPort-AV: E=Sophos;i="5.84,365,1620716400"; d="scan'208";a="216576704" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2021 01:21:41 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,365,1620716400"; d="scan'208";a="540921810" Received: from dpdk-moyufen06.sh.intel.com ([10.67.116.208]) by fmsmga002.fm.intel.com with ESMTP; 31 Aug 2021 01:21:38 -0700 From: Yufen Mo To: dts@dpdk.org, lijuan.tu@intel.com, yingyax.han@intel.com, junx.w.zhou@intel.com Cc: Yufen Mo Date: Tue, 31 Aug 2021 16:22:18 +0800 Message-Id: <20210831082220.47375-5-yufengx.mo@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20210831082220.47375-1-yufengx.mo@intel.com> References: <20210831082220.47375-1-yufengx.mo@intel.com> MIME-Version: 1.0 Subject: [dts] [PATCH V2 4/6] tests/eventdev_perf: move to pktgen from etgen X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" #. remove etgen relevant source code. #. update perf test cases to pktgen. #. update compile bin to meson build. Signed-off-by: Yufen Mo --- tests/TestSuite_eventdev_perf.py | 293 ++++++++++++++++++++----------- 1 file changed, 195 insertions(+), 98 deletions(-) diff --git a/tests/TestSuite_eventdev_perf.py b/tests/TestSuite_eventdev_perf.py index fd142e89..7730cd1e 100644 --- a/tests/TestSuite_eventdev_perf.py +++ b/tests/TestSuite_eventdev_perf.py @@ -43,14 +43,14 @@ from test_case import TestCase from time import sleep from settings import HEADER_SIZE from pmd_output import PmdOutput -from etgen import IxiaPacketGenerator +from pktgen import PacketGeneratorHelper from settings import FOLDERS from system_info import SystemInfo import perf_report from datetime import datetime -class TestEventdevPerf(TestCase,IxiaPacketGenerator): +class TestEventdevPerf(TestCase): def set_up_all(self): """ @@ -58,7 +58,6 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): PMD prerequisites. """ - self.tester.extend_external_packet_generator(TestEventdevPerf, self) self.frame_sizes = [64, 128, 256, 512, 1024, 1518] @@ -111,6 +110,30 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): self.pmdout = PmdOutput(self.dut) + self.build_eventdev_app() + + if self.logger.log_path.startswith(os.sep): + self.output_path = self.logger.log_path + else: + cur_path = os.path.dirname( + os.path.dirname(os.path.realpath(__file__))) + self.output_path = os.sep.join([cur_path, self.logger.log_path]) + + self.pktgen_helper = PacketGeneratorHelper() + + def suite_measure_throughput(self, tgen_input, rate_percent, delay): + streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, rate_percent, + None, self.tester.pktgen) + result = self.tester.pktgen.measure_throughput(stream_ids=streams) + + return result + + def build_eventdev_app(self): + self.app_command = self.dut.apps_name["eventdev_pipeline"] + out = self.dut.build_dpdk_apps("examples/eventdev_pipeline") + self.verify("Error" not in out, "compilation error 1") + self.verify("No such file" not in out, "compilation error 2") + def set_up(self): """ Run before each test case. @@ -120,7 +143,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): def eventdev_cmd(self, test_type, stlist, nports, worker_cores): self.Port_pci_ids = [] - command_line1 = "dpdk-test-eventdev -l %s -w %s" + command_line1 = self.app_command + " -l %s -w %s" for i in range(0, nports): self.Port_pci_ids.append(self.dut.ports_info[i]['pci']) ## Adding core-list and pci-ids @@ -144,7 +167,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -174,12 +197,13 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -221,7 +245,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -251,12 +275,13 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -299,7 +324,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -329,12 +354,13 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -377,7 +403,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -407,12 +433,13 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -455,7 +482,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -485,12 +512,13 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -533,7 +561,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -563,12 +591,13 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -611,10 +640,10 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -645,11 +674,15 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % ( + os.sep.join([self.output_path, "event_test1.pcap"]), payload_size)) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % ( + os.sep.join([self.output_path, "event_test2.pcap"]), payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -692,10 +725,10 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -725,12 +758,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -773,10 +810,10 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -806,12 +843,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -854,10 +895,10 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -887,12 +928,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -935,10 +980,10 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -968,12 +1013,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -1016,10 +1065,10 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -1049,12 +1098,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -1098,16 +1151,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[2]), self.tester.get_local_port(self.dut_ports[3]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test3.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[3]), self.tester.get_local_port(self.dut_ports[2]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test4.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -1137,12 +1190,22 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test3.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test4.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -1184,16 +1247,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[2]), self.tester.get_local_port(self.dut_ports[3]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test3.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[3]), self.tester.get_local_port(self.dut_ports[2]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test4.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -1223,12 +1286,22 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test3.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test4.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -1271,16 +1344,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[2]), self.tester.get_local_port(self.dut_ports[3]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test3.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[3]), self.tester.get_local_port(self.dut_ports[2]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test4.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -1310,12 +1383,22 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test3.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test4.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -1358,16 +1441,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[2]), self.tester.get_local_port(self.dut_ports[3]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test3.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[3]), self.tester.get_local_port(self.dut_ports[2]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test4.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -1397,12 +1480,22 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test3.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test4.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -1445,16 +1538,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[2]), self.tester.get_local_port(self.dut_ports[3]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test3.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[3]), self.tester.get_local_port(self.dut_ports[2]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test4.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: core_config = test_cycle['cores'] @@ -1483,12 +1576,22 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test3.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test4.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -1531,16 +1634,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[2]), self.tester.get_local_port(self.dut_ports[3]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test3.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[3]), self.tester.get_local_port(self.dut_ports[2]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test4.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -1570,12 +1673,22 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test3.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test4.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -1603,22 +1716,6 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator): self.result_table_print() - def ip(self, port, frag, src, proto, tos, dst, chksum, len, options, version, flags, ihl, ttl, id): - self.add_tcl_cmd("protocol config -name ip") - self.add_tcl_cmd('ip config -sourceIpAddr "%s"' % src) - self.add_tcl_cmd("ip config -sourceIpAddrMode ipIncrHost") - self.add_tcl_cmd("ip config -sourceIpAddrRepeatCount 100") - self.add_tcl_cmd('ip config -destIpAddr "%s"' % dst) - self.add_tcl_cmd("ip config -destIpAddrMode ipIdle") - self.add_tcl_cmd("ip config -ttl %d" % ttl) - self.add_tcl_cmd("ip config -totalLength %d" % len) - self.add_tcl_cmd("ip config -fragment %d" % frag) - self.add_tcl_cmd("ip config -ipProtocol ipV4ProtocolReserved255") - self.add_tcl_cmd("ip config -identifier %d" % id) - self.add_tcl_cmd("stream config -framesize %d" % (len + 18)) - self.add_tcl_cmd("ip set %d %d %d" % (self.chasId, port['card'], port['port'])) - - def tear_down(self): """ Run after each test case. From patchwork Tue Aug 31 08:22:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yufen.Mo" X-Patchwork-Id: 97595 X-Patchwork-Delegate: lijuan.tu@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C59ADA0C46; Tue, 31 Aug 2021 10:21:45 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C000740687; Tue, 31 Aug 2021 10:21:45 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mails.dpdk.org (Postfix) with ESMTP id 6E72540041 for ; Tue, 31 Aug 2021 10:21:44 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10092"; a="216576711" X-IronPort-AV: E=Sophos;i="5.84,365,1620716400"; d="scan'208";a="216576711" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2021 01:21:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,365,1620716400"; d="scan'208";a="540921819" Received: from dpdk-moyufen06.sh.intel.com ([10.67.116.208]) by fmsmga002.fm.intel.com with ESMTP; 31 Aug 2021 01:21:41 -0700 From: Yufen Mo To: dts@dpdk.org, lijuan.tu@intel.com, yingyax.han@intel.com, junx.w.zhou@intel.com Cc: Yufen Mo Date: Tue, 31 Aug 2021 16:22:19 +0800 Message-Id: <20210831082220.47375-6-yufengx.mo@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20210831082220.47375-1-yufengx.mo@intel.com> References: <20210831082220.47375-1-yufengx.mo@intel.com> MIME-Version: 1.0 Subject: [dts] [PATCH V2 5/6] tests/eventdev_pipeline_perf: move to pktgen from etgen X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" #. remove etgen relevant source code. #. update perf test cases to pktgen. #. update compile bin to meson build. Signed-off-by: Yufen Mo --- tests/TestSuite_eventdev_pipeline_perf.py | 170 ++++++++++++++-------- 1 file changed, 111 insertions(+), 59 deletions(-) diff --git a/tests/TestSuite_eventdev_pipeline_perf.py b/tests/TestSuite_eventdev_pipeline_perf.py index 361b47ee..69cb4aa4 100644 --- a/tests/TestSuite_eventdev_pipeline_perf.py +++ b/tests/TestSuite_eventdev_pipeline_perf.py @@ -43,14 +43,14 @@ from test_case import TestCase from time import sleep from settings import HEADER_SIZE from pmd_output import PmdOutput -from etgen import IxiaPacketGenerator +from pktgen import PacketGeneratorHelper from settings import FOLDERS from system_info import SystemInfo import perf_report from datetime import datetime -class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): +class TestEventdevPipelinePerf(TestCase): def set_up_all(self): """ @@ -58,7 +58,6 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): PMD prerequisites. """ - self.tester.extend_external_packet_generator(TestEventdevPipelinePerf, self) self.frame_sizes = [64, 128, 256, 512, 1024, 1518] @@ -111,6 +110,30 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): self.pmdout = PmdOutput(self.dut) + self.build_eventdev_app() + + if self.logger.log_path.startswith(os.sep): + self.output_path = self.logger.log_path + else: + cur_path = os.path.dirname( + os.path.dirname(os.path.realpath(__file__))) + self.output_path = os.sep.join([cur_path, self.logger.log_path]) + + self.pktgen_helper = PacketGeneratorHelper() + + def suite_measure_throughput(self, tgen_input, rate_percent, delay): + streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, rate_percent, + None, self.tester.pktgen) + result = self.tester.pktgen.measure_throughput(stream_ids=streams) + + return result + + def build_eventdev_app(self): + self.app_command = self.dut.apps_name["eventdev_pipeline"] + out = self.dut.build_dpdk_apps("examples/eventdev_pipeline") + self.verify("Error" not in out, "compilation error 1") + self.verify("No such file" not in out, "compilation error 2") + def set_up(self): """ Run before each test case. @@ -120,7 +143,7 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): def eventdev_cmd(self, stlist, nports, wmask): self.Port_pci_ids = [] - command_line1 = "dpdk-eventdev_pipeline -c %s -w %s" + command_line1 = self.app_command + " -c %s -w %s" for i in range(0, nports): self.Port_pci_ids.append(self.dut.ports_info[i]['pci']) ## Adding core-list and pci-ids @@ -143,7 +166,7 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -170,12 +193,13 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -217,7 +241,7 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -244,12 +268,13 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -291,7 +316,7 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -318,12 +343,13 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -365,10 +391,10 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -395,12 +421,16 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -442,10 +472,10 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -472,12 +502,16 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -519,10 +553,10 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -549,12 +583,16 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -596,16 +634,16 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[2]), self.tester.get_local_port(self.dut_ports[3]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test3.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[3]), self.tester.get_local_port(self.dut_ports[2]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test4.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -632,12 +670,22 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test3.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test4.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -679,16 +727,16 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[2]), self.tester.get_local_port(self.dut_ports[3]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test3.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[3]), self.tester.get_local_port(self.dut_ports[2]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test4.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -715,12 +763,22 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test3.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test4.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -762,16 +820,16 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): tgen_input = [] tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test1.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[2]), self.tester.get_local_port(self.dut_ports[3]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test2.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test3.pcap"]))) tgen_input.append((self.tester.get_local_port(self.dut_ports[3]), self.tester.get_local_port(self.dut_ports[2]), - "event_test.pcap")) + os.sep.join([self.output_path, "event_test4.pcap"]))) # run testpmd for each core config for test_cycle in self.test_cycles: @@ -798,12 +856,22 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): # create pcap file self.logger.info("Running with frame size %d " % frame_size) payload_size = frame_size - self.headers_size + pcap = os.sep.join([self.output_path, "event_test1.pcap"]) self.tester.scapy_append( - 'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size)) + 'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test2.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test3.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) + pcap = os.sep.join([self.output_path, "event_test4.pcap"]) + self.tester.scapy_append( + 'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size)) self.tester.scapy_execute() # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60) + _, pps = self.suite_measure_throughput(tgen_input, 100, 60) pps /= 1000000.0 pct = pps * 100 / wirespeed test_cycle['Mpps'][frame_size] = float('%.3f' % pps) @@ -831,22 +899,6 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator): self.result_table_print() - def ip(self, port, frag, src, proto, tos, dst, chksum, len, options, version, flags, ihl, ttl, id): - self.add_tcl_cmd("protocol config -name ip") - self.add_tcl_cmd('ip config -sourceIpAddr "%s"' % src) - self.add_tcl_cmd("ip config -sourceIpAddrMode ipIncrHost") - self.add_tcl_cmd("ip config -sourceIpAddrRepeatCount 100") - self.add_tcl_cmd('ip config -destIpAddr "%s"' % dst) - self.add_tcl_cmd("ip config -destIpAddrMode ipIdle") - self.add_tcl_cmd("ip config -ttl %d" % ttl) - self.add_tcl_cmd("ip config -totalLength %d" % len) - self.add_tcl_cmd("ip config -fragment %d" % frag) - self.add_tcl_cmd("ip config -ipProtocol ipV4ProtocolReserved255") - self.add_tcl_cmd("ip config -identifier %d" % id) - self.add_tcl_cmd("stream config -framesize %d" % (len + 18)) - self.add_tcl_cmd("ip set %d %d %d" % (self.chasId, port['card'], port['port'])) - - def tear_down(self): """ Run after each test case. From patchwork Tue Aug 31 08:22:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yufen.Mo" X-Patchwork-Id: 97596 X-Patchwork-Delegate: lijuan.tu@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id ED590A0C46; Tue, 31 Aug 2021 10:21:47 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E71CF40DDE; Tue, 31 Aug 2021 10:21:47 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mails.dpdk.org (Postfix) with ESMTP id BB6FD40041 for ; Tue, 31 Aug 2021 10:21:46 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10092"; a="216576719" X-IronPort-AV: E=Sophos;i="5.84,365,1620716400"; d="scan'208";a="216576719" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2021 01:21:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,365,1620716400"; d="scan'208";a="540921827" Received: from dpdk-moyufen06.sh.intel.com ([10.67.116.208]) by fmsmga002.fm.intel.com with ESMTP; 31 Aug 2021 01:21:44 -0700 From: Yufen Mo To: dts@dpdk.org, lijuan.tu@intel.com, yingyax.han@intel.com, junx.w.zhou@intel.com Cc: Yufen Mo Date: Tue, 31 Aug 2021 16:22:20 +0800 Message-Id: <20210831082220.47375-7-yufengx.mo@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20210831082220.47375-1-yufengx.mo@intel.com> References: <20210831082220.47375-1-yufengx.mo@intel.com> MIME-Version: 1.0 Subject: [dts] [PATCH V2 6/6] tests/fdir: move to pktgen from etgen X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" #. remove etgen relevant source code. #. update perf test cases to pktgen. Signed-off-by: Yufen Mo --- tests/TestSuite_fdir.py | 43 ++++++++++++++--------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/tests/TestSuite_fdir.py b/tests/TestSuite_fdir.py index 007db26d..a02255fa 100644 --- a/tests/TestSuite_fdir.py +++ b/tests/TestSuite_fdir.py @@ -42,16 +42,16 @@ from time import sleep from scapy.utils import struct, socket, PcapWriter import utils -from etgen import IxiaPacketGenerator from test_case import TestCase from settings import HEADER_SIZE from pmd_output import PmdOutput +from pktgen import PacketGeneratorHelper import sys import imp -class TestFdir(TestCase, IxiaPacketGenerator): +class TestFdir(TestCase): # # @@ -140,7 +140,6 @@ class TestFdir(TestCase, IxiaPacketGenerator): PMD prerequisites. """ - self.tester.extend_external_packet_generator(TestFdir, self) #self.verify('bsdapp' not in self.path, "FDIR not support freebsd") # this feature support Fortville, Niantic #self.verify(self.nic in ["kawela_2", "niantic", "bartonhills", "82545EM", @@ -208,6 +207,8 @@ class TestFdir(TestCase, IxiaPacketGenerator): for test_cycle in self.test_cycles: self.table_header.append("%s Mpps" % test_cycle['cores']) self.table_header.append("% linerate") + # create an instance to set stream field setting + self.pktgen_helper = PacketGeneratorHelper() def set_up(self): """ @@ -1180,7 +1181,10 @@ class TestFdir(TestCase, IxiaPacketGenerator): dst_ip_temp = self.dst_ip print("*src_ip_temp = " + src_ip_temp + "dst_ip_temp = " + dst_ip_temp) flows.append("Ether(src='52:00:00:00:00:00', dst='00:1B:21:8E:B2:30')/IP(src='%s',dst='%s')/UDP(sport=%d,dport=%d)/Raw(load='%s' + 'X'*(%d - 42 - %d))" % (src_ip_temp, dst_ip_temp, 1021, 1021, self.payload, frame_size, self.flexlength)) - self.scapyCmds.append('wrpcap("/root/test.pcap", [%s])' % string.join(flows, ',')) + self.scapyCmds.append('wrpcap("/root/test1.pcap", [%s])' % ','.join(flows)) + flows = [] + flows.append("Ether(src='52:00:00:00:00:01', dst='00:1B:21:8E:B2:31')/IP(src='%s',dst='%s')/UDP(sport=%d,dport=%d)/Raw(load='%s' + 'X'*(%d - 42 - %d))" % (src_ip_temp, dst_ip_temp, 1021, 1021, self.payload, frame_size, self.flexlength)) + self.scapyCmds.append('wrpcap("/root/test2.pcap", [%s])' % ','.join(flows)) def perf_fdir_performance_2ports(self, test_type, num_rules, num_flows): """ @@ -1191,10 +1195,10 @@ class TestFdir(TestCase, IxiaPacketGenerator): tgen_input.append((self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), - "/root/test.pcap")) + "/root/test1.pcap")) tgen_input.append((self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), - "/root/test.pcap")) + "/root/test2.pcap")) print("self.ports_socket=%s" % (self.ports_socket)) # run testpmd for each core config @@ -1229,7 +1233,6 @@ class TestFdir(TestCase, IxiaPacketGenerator): out = self.dut.send_expect(command_line, "testpmd> ", 100) print(out) - self.dut.send_expect("set verbose 1", "testpmd>") self.fdir_get_flexbytes() if test_type in ["fdir_noflex", "fdir_2flex", "fdir_16flex"]: @@ -1264,12 +1267,14 @@ class TestFdir(TestCase, IxiaPacketGenerator): """ # run traffic generator - _, pps = self.tester.traffic_generator_throughput(tgen_input) + streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, 100, + None, self.tester.pktgen) + _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams) """ _, pps, _ = self.throughputRate(tgen_input) """ - out = self.dut.send_expect("show port stats all", "testpmd> ") + out = self.dut.send_expect("show port stats all", "testpmd> ", timeout=60) print(out) pps /= 1000000.0 @@ -1297,26 +1302,6 @@ class TestFdir(TestCase, IxiaPacketGenerator): self.result_table_print() - def ip(self, port, frag, src, proto, tos, dst, chksum, len, version, flags, ihl, ttl, id, options=None): - """ - Configure IP protocol. - """ - self.add_tcl_cmd("protocol config -name ip") - self.add_tcl_cmd('ip config -sourceIpAddr "%s"' % src) - self.add_tcl_cmd("ip config -sourceIpAddrMode ipIncrHost") - self.add_tcl_cmd("ip config -sourceIpAddrRepeatCount 64") - self.add_tcl_cmd('ip config -destIpAddr "%s"' % dst) - self.add_tcl_cmd("ip config -destIpAddrMode ipIncrHost") - self.add_tcl_cmd("ip config -destIpAddrRepeatCount 64") - self.add_tcl_cmd("ip config -ttl %d" % ttl) - self.add_tcl_cmd("ip config -totalLength %d" % len) - self.add_tcl_cmd("ip config -fragment %d" % frag) - # self.add_tcl_cmd("ip config -ipProtocol %d" % proto) - self.add_tcl_cmd("ip config -ipProtocol ipV4ProtocolReserved255") - self.add_tcl_cmd("ip config -identifier %d" % id) - self.add_tcl_cmd("stream config -framesize %d" % (len + 18)) - self.add_tcl_cmd("ip set %d %d %d" % (self.chasId, port['card'], port['port'])) - def test_perf_fdir_performance_2ports(self): """ fdir Performance Benchmarking with 2 ports.