Message ID | 20240625010210.2002310-4-kuba@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | selftests: drv-net: rss_ctx: add tests for RSS contexts | expand |
On Mon, Jun 24, 2024 at 06:02:09PM -0700, Jakub Kicinski wrote: > Teach the load generator how to wait for at least given number > of packets to be received. This will be useful for filtering > where we'll want to send a non-trivial number of packets and > make sure they landed in right queues. > > Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviwed-by: Breno Leitao <leitao@debian.org>
Jakub Kicinski wrote: > Teach the load generator how to wait for at least given number > of packets to be received. This will be useful for filtering > where we'll want to send a non-trivial number of packets and > make sure they landed in right queues. > > Signed-off-by: Jakub Kicinski <kuba@kernel.org> > --- > v2: > - add comment that pps or pkt_cnt are mutually exclusive (David) > - rename variables (David) > --- > .../selftests/drivers/net/lib/py/load.py | 30 ++++++++++++++----- > 1 file changed, 23 insertions(+), 7 deletions(-) > > diff --git a/tools/testing/selftests/drivers/net/lib/py/load.py b/tools/testing/selftests/drivers/net/lib/py/load.py > index abdb677bdb1c..31f82f1e32c1 100644 > --- a/tools/testing/selftests/drivers/net/lib/py/load.py > +++ b/tools/testing/selftests/drivers/net/lib/py/load.py > @@ -18,15 +18,31 @@ from lib.py import ksft_pr, cmd, ip, rand_port, wait_port_listen > background=True, host=env.remote) > > # Wait for traffic to ramp up > - pkt = ip("-s link show dev " + env.ifname, json=True)[0]["stats64"]["rx"]["packets"] > + if not self._wait_pkts(pps=1000): > + self.stop(verbose=True) > + raise Exception("iperf3 traffic did not ramp up") > + > + def _wait_pkts(self, pkt_cnt=None, pps=None): > + """ > + Wait until we've seen pkt_cnt or until traffic ramps up to pps. > + Only one of pkt_cnt or pss can be specified. > + """ > + pkt_end = ip("-s link show dev " + self.env.ifname, json=True)[0]["stats64"]["rx"]["packets"] nit: kind of confusing that the first reading is called pkt_end. I'd s/pkt_end/pkt_start and pkt_start/pkt_now. Obviously only bikeshedding at this point. Feel free to ignore. > for _ in range(50): > time.sleep(0.1) > - now = ip("-s link show dev " + env.ifname, json=True)[0]["stats64"]["rx"]["packets"] > - if now - pkt > 1000: > - return > - pkt = now > - self.stop(verbose=True) > - raise Exception("iperf3 traffic did not ramp up") > + pkt_start = ip("-s link show dev " + self.env.ifname, json=True)[0]["stats64"]["rx"]["packets"] > + if pps: > + if pkt_start - pkt_end > pps / 10: > + return True > + pkt_end = pkt_start > + elif pkt_cnt: > + if pkt_start - pkt_end > pkt_cnt: > + return True > + return False > + > + def wait_pkts_and_stop(self, pkt_cnt): > + failed = not self._wait_pkts(pkt_cnt=pkt_cnt) > + self.stop(verbose=failed) > > def stop(self, verbose=None): > self._iperf_client.process(terminate=True) > -- > 2.45.2 >
diff --git a/tools/testing/selftests/drivers/net/lib/py/load.py b/tools/testing/selftests/drivers/net/lib/py/load.py index abdb677bdb1c..31f82f1e32c1 100644 --- a/tools/testing/selftests/drivers/net/lib/py/load.py +++ b/tools/testing/selftests/drivers/net/lib/py/load.py @@ -18,15 +18,31 @@ from lib.py import ksft_pr, cmd, ip, rand_port, wait_port_listen background=True, host=env.remote) # Wait for traffic to ramp up - pkt = ip("-s link show dev " + env.ifname, json=True)[0]["stats64"]["rx"]["packets"] + if not self._wait_pkts(pps=1000): + self.stop(verbose=True) + raise Exception("iperf3 traffic did not ramp up") + + def _wait_pkts(self, pkt_cnt=None, pps=None): + """ + Wait until we've seen pkt_cnt or until traffic ramps up to pps. + Only one of pkt_cnt or pss can be specified. + """ + pkt_end = ip("-s link show dev " + self.env.ifname, json=True)[0]["stats64"]["rx"]["packets"] for _ in range(50): time.sleep(0.1) - now = ip("-s link show dev " + env.ifname, json=True)[0]["stats64"]["rx"]["packets"] - if now - pkt > 1000: - return - pkt = now - self.stop(verbose=True) - raise Exception("iperf3 traffic did not ramp up") + pkt_start = ip("-s link show dev " + self.env.ifname, json=True)[0]["stats64"]["rx"]["packets"] + if pps: + if pkt_start - pkt_end > pps / 10: + return True + pkt_end = pkt_start + elif pkt_cnt: + if pkt_start - pkt_end > pkt_cnt: + return True + return False + + def wait_pkts_and_stop(self, pkt_cnt): + failed = not self._wait_pkts(pkt_cnt=pkt_cnt) + self.stop(verbose=failed) def stop(self, verbose=None): self._iperf_client.process(terminate=True)
Teach the load generator how to wait for at least given number of packets to be received. This will be useful for filtering where we'll want to send a non-trivial number of packets and make sure they landed in right queues. Signed-off-by: Jakub Kicinski <kuba@kernel.org> --- v2: - add comment that pps or pkt_cnt are mutually exclusive (David) - rename variables (David) --- .../selftests/drivers/net/lib/py/load.py | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-)