commit e91b935a75b8e92052441b553dc19d223061385f Author: Jiri Pirko jpirko@redhat.com Date: Wed Jun 29 17:33:08 2011 +0200
TestPktgenTx: add multi-dev multi-thread support
Signed-off-by: Jiri Pirko jpirko@redhat.com
Tests/TestPktgenTx.py | 54 +++++++++++++++++++++++++++++++++++++----------- 1 files changed, 41 insertions(+), 13 deletions(-) --- diff --git a/Tests/TestPktgenTx.py b/Tests/TestPktgenTx.py index 5d68062..5e48f2c 100644 --- a/Tests/TestPktgenTx.py +++ b/Tests/TestPktgenTx.py @@ -12,6 +12,7 @@ jpirko@redhat.com (Jiri Pirko)
import logging import re +import os from Common.TestsCommon import TestGeneric from Common.ExecCmd import exec_cmd, ExecCmdFail
@@ -22,9 +23,37 @@ class Pktgen: def set(self, val): exec_cmd("echo "%s" > %s" % (val, self._dev))
+class PktgenWorkers: + def __init__(self): + self._current = 0 + self._cpunum = int(os.sysconf('SC_NPROCESSORS_ONLN')) + self._wrkrs = {} + + def _init_current_wrkr(self): + num = self._current + wrkr = Pktgen("/proc/net/pktgen/kpktgend_%d" % (num)) + wrkr.set("rem_device_all") + wrkr.set("max_before_softirq 5000") + self._wrkrs[num] = wrkr + + def _get_wrkr(self): + num = self._current + if not num in self._wrkrs: + self._init_current_wrkr() + wrkr = self._wrkrs[num] + num += 1 + if num == self._cpunum: + num = 0 + self._current = num + return wrkr + + def add_device(self, dev_name): + wrkr = self._get_wrkr() + wrkr.set("add_device %s" % dev_name) + class TestPktgenTx(TestGeneric): def run(self): - dev_name = self.get_mopt("netdev_name") + dev_names = self.get_multi_mopt("netdev_name") addr = self.get_mopt("addr", opt_type="addr") hwaddr = self.get_mopt("hwaddr") vlan_tci = self.get_opt("vlan_tci", default=0) @@ -32,20 +61,19 @@ class TestPktgenTx(TestGeneric): exec_cmd("modprobe pktgen")
pgctl = Pktgen("/proc/net/pktgen/pgctrl") - pgwrkr = Pktgen("/proc/net/pktgen/kpktgend_0") - pg = Pktgen("/proc/net/pktgen/%s" % dev_name) + pgwrkr = PktgenWorkers()
try: - pgwrkr.set("rem_device_all") - pgwrkr.set("add_device %s" % dev_name) - pgwrkr.set("max_before_softirq 5000") - pg.set("clone_skb 100000") - pg.set("pkt_size 60") - pg.set("dst %s" % addr) - pg.set("dst_mac %s" % hwaddr) - if vlan_tci: - pg.set("vlan_id %d" % vlan_tci) - pg.set("count 10000000") + for dev_name in dev_names: + pgwrkr.add_device(dev_name) + pg = Pktgen("/proc/net/pktgen/%s" % dev_name) + pg.set("clone_skb 100000") + pg.set("pkt_size 60") + pg.set("dst %s" % addr) + pg.set("dst_mac %s" % hwaddr) + if vlan_tci: + pg.set("vlan_id %d" % vlan_tci) + pg.set("count 10000000") pgctl.set("start") except ExecCmdFail: return self.set_fail("pktgen failed")
lnst-developers@lists.fedorahosted.org