From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 0F55AAAA2 for ; Thu, 19 Apr 2018 16:50:30 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Apr 2018 07:50:30 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,469,1517904000"; d="scan'208";a="192775863" Received: from dpdk-test32.sh.intel.com ([10.67.119.129]) by orsmga004.jf.intel.com with ESMTP; 19 Apr 2018 07:50:29 -0700 From: Marvin Liu To: dts@dpdk.org Cc: Marvin Liu Date: Fri, 20 Apr 2018 06:38:52 +0800 Message-Id: <1524177533-112630-1-git-send-email-yong.liu@intel.com> X-Mailer: git-send-email 1.9.3 Subject: [dts] [PATCH v1 1/2] framework/etgen: support latest dpdk-pktgen X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Apr 2018 14:50:31 -0000 Removed outdated dpdk-pktgen support, current support version is dpdk v18.02 + dpdk-pktgen v3.5.0. Ports statistics will be retrieved from lua output. Also enlarged memory size for supporting at least four ports. Signed-off-by: Marvin Liu diff --git a/framework/config.py b/framework/config.py index f7f347a..71b1c37 100644 --- a/framework/config.py +++ b/framework/config.py @@ -288,6 +288,9 @@ class CrbsConf(UserConf): 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 == 'channels': crb['memory channels'] = int(value) diff --git a/framework/etgen.py b/framework/etgen.py index b96b8ed..2856a28 100644 --- a/framework/etgen.py +++ b/framework/etgen.py @@ -54,6 +54,7 @@ class SoftwarePacketGenerator(): self.tester.send_expect("insmod igb_uio.ko", "#") bind_cmd = "" + white_list = "" ports = [] tx_ports = [] for (tx_port, rx_port, pcap_file) in portList: @@ -65,6 +66,7 @@ class SoftwarePacketGenerator(): for port in ports: bind_cmd += " %s" % self.tester.ports_info[port]['pci'] + white_list += " -w %s" % self.tester.ports_info[port]['pci'] self.tester.send_expect("./dpdk-devbind.py --bind=igb_uio %s" % bind_cmd, "#") @@ -73,6 +75,17 @@ class SoftwarePacketGenerator(): port_index = range(len(ports)) port_map = dict(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) @@ -81,39 +94,58 @@ class SoftwarePacketGenerator(): 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])) - # create pcap for every port + # 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(self.tester.get_core_list("all")) + cores_mask = create_mask(used_cores) + + # allocate enough memory for 4 ports + socket_mem = "--socket-mem 1024,1024" - self.tester.send_expect("./pktgen -n 2 -c %s --proc-type auto --socket-mem 256,256 -- -P -m \"%s\" %s" - % (cores_mask, map_cmd, pcap_cmd), "Pktgen >", 100) + # current support version is dpdk v18.02 + pktgen v3.5.0 + pkt_cmd = "./pktgen -n 2 -c {CORE} --file-prefix=pktgen {WHITE} " \ + "{MEM} -- -P -m \"{CORE_MAP}\" {PCAP}".format(CORE=cores_mask, + WHITE=white_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>") + 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("set all rate 100", "Pktgen:/>") - self.tester.send_expect("start all", "Pktgen>") + self.tester.send_expect("start all", "Pktgen:/>") time.sleep(10) - out = self.tester.send_expect("clr", "Pktgen>") - - match = r"Bits per second: (\d+)+/(\d+)" - m = re.search(match, out) - - match = r"Packets per second: (\d+)+/(\d+)" - n = re.search(match, out) - - rx_bps = int(m.group(1)) - rx_pps = int(n.group(1)) - tx_bps = int(m.group(2)) - - self.tester.send_expect("stop all", "Pktgen>") - self.tester.send_expect("quit", "# ") + 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() -- 1.9.3