All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Horman <horms@kernel.org>
To: Nimrod Oren <noren@nvidia.com>
Cc: Andrew Lunn <andrew+netdev@lunn.ch>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Shuah Khan <shuah@kernel.org>,
	Willem de Bruijn <willemb@google.com>,
	netdev@vger.kernel.org, linux-kselftest@vger.kernel.org,
	Gal Pressman <gal@nvidia.com>,
	Carolina Jubran <cjubran@nvidia.com>
Subject: Re: [PATCH net v2] selftests: drv-net: wait for iperf client to stop sending
Date: Wed, 23 Jul 2025 16:37:11 +0100	[thread overview]
Message-ID: <20250723153711.GG1036606@horms.kernel.org> (raw)
In-Reply-To: <20250722122655.3194442-1-noren@nvidia.com>

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@nvidia.com>
> Reviewed-by: Gal Pressman <gal@nvidia.com>
> Reviewed-by: Carolina Jubran <cjubran@nvidia.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@kernel.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.

  reply	other threads:[~2025-07-23 15:37 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-22 12:26 [PATCH net v2] selftests: drv-net: wait for iperf client to stop sending Nimrod Oren
2025-07-23 15:37 ` Simon Horman [this message]
2025-07-24  2:00 ` patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250723153711.GG1036606@horms.kernel.org \
    --to=horms@kernel.org \
    --cc=andrew+netdev@lunn.ch \
    --cc=cjubran@nvidia.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=gal@nvidia.com \
    --cc=kuba@kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=noren@nvidia.com \
    --cc=pabeni@redhat.com \
    --cc=shuah@kernel.org \
    --cc=willemb@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.