[dts] [PATCH v1 1/2] framework/etgen: support latest dpdk-pktgen
Marvin Liu
yong.liu at intel.com
Fri Apr 20 00:38:52 CEST 2018
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 <yong.liu at intel.com>
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
More information about the dts
mailing list