commit e91b935a75b8e92052441b553dc19d223061385f
Author: Jiri Pirko <jpirko(a)redhat.com>
Date: Wed Jun 29 17:33:08 2011 +0200
TestPktgenTx: add multi-dev multi-thread support
Signed-off-by: Jiri Pirko <jpirko(a)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(a)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")
Show replies by date