[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250723153711.GG1036606@horms.kernel.org>
Date: Wed, 23 Jul 2025 16:37:11 +0100
From: Simon Horman <horms@...nel.org>
To: Nimrod Oren <noren@...dia.com>
Cc: Andrew Lunn <andrew+netdev@...n.ch>,
"David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>,
Shuah Khan <shuah@...nel.org>,
Willem de Bruijn <willemb@...gle.com>, netdev@...r.kernel.org,
linux-kselftest@...r.kernel.org, Gal Pressman <gal@...dia.com>,
Carolina Jubran <cjubran@...dia.com>
Subject: Re: [PATCH net v2] selftests: drv-net: wait for iperf client to stop
sending
On Tue, Jul 22, 2025 at 03:26:55PM +0300, Nimrod Oren wrote:
> A few packets may still be sent out during the termination of iperf
> processes. These late packets cause failures in rss_ctx.py when they
> arrive on queues expected to be empty.
>
> Example failure observed:
>
> Check failed 2 != 0 traffic on inactive queues (context 1):
> [0, 0, 1, 1, 386385, 397196, 0, 0, 0, 0, ...]
>
> Check failed 4 != 0 traffic on inactive queues (context 2):
> [0, 0, 0, 0, 2, 2, 247152, 253013, 0, 0, ...]
>
> Check failed 2 != 0 traffic on inactive queues (context 3):
> [0, 0, 0, 0, 0, 0, 1, 1, 282434, 283070, ...]
>
> To avoid such failures, wait until all client sockets for the requested
> port are either closed or in the TIME_WAIT state.
>
> Fixes: 847aa551fa78 ("selftests: drv-net: rss_ctx: factor out send traffic and check")
> Signed-off-by: Nimrod Oren <noren@...dia.com>
> Reviewed-by: Gal Pressman <gal@...dia.com>
> Reviewed-by: Carolina Jubran <cjubran@...dia.com>
> ---
> Changelog:
> v2:
> - Replace fixed sleep with logic that waits for client sockets to close.
> - Update commit title and message to reflect new approach.
> v1: https://lore.kernel.org/all/20250629111812.644282-1-noren@nvidia.com/
Thanks, I believe that this addresses the review of v1
using the wait logic mentioned above.
Reviewed-by: Simon Horman <horms@...nel.org>
> ---
> .../selftests/drivers/net/lib/py/load.py | 23 +++++++++++++++----
> 1 file changed, 18 insertions(+), 5 deletions(-)
>
> diff --git a/tools/testing/selftests/drivers/net/lib/py/load.py b/tools/testing/selftests/drivers/net/lib/py/load.py
> index d9c10613ae67..44151b7b1a24 100644
> --- a/tools/testing/selftests/drivers/net/lib/py/load.py
> +++ b/tools/testing/selftests/drivers/net/lib/py/load.py
> @@ -1,5 +1,6 @@
> # SPDX-License-Identifier: GPL-2.0
>
> +import re
> import time
>
> from lib.py import ksft_pr, cmd, ip, rand_port, wait_port_listen
> @@ -10,12 +11,11 @@ class GenerateTraffic:
>
> self.env = env
>
> - if port is None:
> - port = rand_port()
> - self._iperf_server = cmd(f"iperf3 -s -1 -p {port}", background=True)
> - wait_port_listen(port)
> + self.port = rand_port() if port is None else port
> + self._iperf_server = cmd(f"iperf3 -s -1 -p {self.port}", background=True)
> + wait_port_listen(self.port)
> time.sleep(0.1)
> - self._iperf_client = cmd(f"iperf3 -c {env.addr} -P 16 -p {port} -t 86400",
> + self._iperf_client = cmd(f"iperf3 -c {env.addr} -P 16 -p {self.port} -t 86400",
> background=True, host=env.remote)
>
> # Wait for traffic to ramp up
> @@ -56,3 +56,16 @@ class GenerateTraffic:
> ksft_pr(">> Server:")
> ksft_pr(self._iperf_server.stdout)
> ksft_pr(self._iperf_server.stderr)
> + self._wait_client_stopped()
> +
> + def _wait_client_stopped(self, sleep=0.005, timeout=5):
> + end = time.monotonic() + timeout
> +
> + live_port_pattern = re.compile(fr":{self.port:04X} 0[^6] ")
I do have a concern about false positives with this pattern,
given that it may match anywhere on a line.
But it is a start and I don't think that concern needs to block progress.
> +
> + while time.monotonic() < end:
> + data = cmd("cat /proc/net/tcp*", host=self.env.remote).stdout
> + if not live_port_pattern.search(data):
> + return
> + time.sleep(sleep)
> + raise Exception(f"Waiting for client to stop timed out after {timeout}s")
+1 for the timeout mechanism.
Powered by blists - more mailing lists