Message ID | 20240705015725.680275-2-kuba@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | selftests: drv-net: rss_ctx: more tests | expand |
Jakub Kicinski wrote: > The basic test may fail without resetting the RSS indir table. > While at it reformat the doc a tiny bit. > > Signed-off-by: Jakub Kicinski <kuba@kernel.org> > --- > tools/testing/selftests/drivers/net/hw/rss_ctx.py | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/tools/testing/selftests/drivers/net/hw/rss_ctx.py b/tools/testing/selftests/drivers/net/hw/rss_ctx.py > index 475f2a63fcd5..de2a55c0f35c 100755 > --- a/tools/testing/selftests/drivers/net/hw/rss_ctx.py > +++ b/tools/testing/selftests/drivers/net/hw/rss_ctx.py > @@ -64,9 +64,8 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure > > > def test_rss_key_indir(cfg): > - """ > - Test basics like updating the main RSS key and indirection table. > - """ > + """Test basics like updating the main RSS key and indirection table.""" > + > if len(_get_rx_cnts(cfg)) < 2: > KsftSkipEx("Device has only one queue (or doesn't support queue stats)") > > @@ -89,6 +88,7 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure > > # Set the indirection table > ethtool(f"-X {cfg.ifname} equal 2") > + reset_indir = defer(ethtool, f"-X {cfg.ifname} default") > data = get_rss(cfg) > ksft_eq(0, min(data['rss-indirection-table'])) > ksft_eq(1, max(data['rss-indirection-table'])) > @@ -104,7 +104,7 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure > ksft_eq(sum(cnts[2:]), 0, "traffic on unused queues: " + str(cnts)) > > # Restore, and check traffic gets spread again > - ethtool(f"-X {cfg.ifname} default") > + reset_indir.exec() When is this explicit exec needed?
On Sat, 06 Jul 2024 09:53:41 -0400 Willem de Bruijn wrote: > > @@ -89,6 +88,7 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure > > > > # Set the indirection table > > ethtool(f"-X {cfg.ifname} equal 2") > > + reset_indir = defer(ethtool, f"-X {cfg.ifname} default") > > data = get_rss(cfg) > > ksft_eq(0, min(data['rss-indirection-table'])) > > ksft_eq(1, max(data['rss-indirection-table'])) > > @@ -104,7 +104,7 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure > > ksft_eq(sum(cnts[2:]), 0, "traffic on unused queues: " + str(cnts)) > > > > # Restore, and check traffic gets spread again > > - ethtool(f"-X {cfg.ifname} default") > > + reset_indir.exec() > > When is this explicit exec needed? When you want to run the cleanup _now_. We construct the cleanup as soon as we allocate the resource, it stays on the deferred list in case some exception makes us abort, but the test may want to free the resource or reconfigure it further as part of the test, in which case it can run .exec() (or cancel() to discard the clean up without running it). Here we do: 1. constrain RSS 2. run traffic (to check we're hitting expected queues) 3. reset RSS 4. run traffic (to check we're hitting all queues) so step 3 runs the cleanup of step 1 explicitly.
Jakub Kicinski wrote: > On Sat, 06 Jul 2024 09:53:41 -0400 Willem de Bruijn wrote: > > > @@ -89,6 +88,7 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure > > > > > > # Set the indirection table > > > ethtool(f"-X {cfg.ifname} equal 2") > > > + reset_indir = defer(ethtool, f"-X {cfg.ifname} default") > > > data = get_rss(cfg) > > > ksft_eq(0, min(data['rss-indirection-table'])) > > > ksft_eq(1, max(data['rss-indirection-table'])) > > > @@ -104,7 +104,7 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure > > > ksft_eq(sum(cnts[2:]), 0, "traffic on unused queues: " + str(cnts)) > > > > > > # Restore, and check traffic gets spread again > > > - ethtool(f"-X {cfg.ifname} default") > > > + reset_indir.exec() > > > > When is this explicit exec needed? > > When you want to run the cleanup _now_. > > We construct the cleanup as soon as we allocate the resource, > it stays on the deferred list in case some exception makes us abort, > but the test may want to free the resource or reconfigure it further > as part of the test, in which case it can run .exec() (or cancel() to > discard the clean up without running it). > > Here we do: > 1. constrain RSS > 2. run traffic (to check we're hitting expected queues) > 3. reset RSS > 4. run traffic (to check we're hitting all queues) > > so step 3 runs the cleanup of step 1 explicitly. Thanks. I was wondering why this test calls it explicitly, while others do not. Had overlooked step 4, which requires the reset.
diff --git a/tools/testing/selftests/drivers/net/hw/rss_ctx.py b/tools/testing/selftests/drivers/net/hw/rss_ctx.py index 475f2a63fcd5..de2a55c0f35c 100755 --- a/tools/testing/selftests/drivers/net/hw/rss_ctx.py +++ b/tools/testing/selftests/drivers/net/hw/rss_ctx.py @@ -64,9 +64,8 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure def test_rss_key_indir(cfg): - """ - Test basics like updating the main RSS key and indirection table. - """ + """Test basics like updating the main RSS key and indirection table.""" + if len(_get_rx_cnts(cfg)) < 2: KsftSkipEx("Device has only one queue (or doesn't support queue stats)") @@ -89,6 +88,7 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure # Set the indirection table ethtool(f"-X {cfg.ifname} equal 2") + reset_indir = defer(ethtool, f"-X {cfg.ifname} default") data = get_rss(cfg) ksft_eq(0, min(data['rss-indirection-table'])) ksft_eq(1, max(data['rss-indirection-table'])) @@ -104,7 +104,7 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure ksft_eq(sum(cnts[2:]), 0, "traffic on unused queues: " + str(cnts)) # Restore, and check traffic gets spread again - ethtool(f"-X {cfg.ifname} default") + reset_indir.exec() cnts = _get_rx_cnts(cfg) GenerateTraffic(cfg).wait_pkts_and_stop(20000)
The basic test may fail without resetting the RSS indir table. While at it reformat the doc a tiny bit. Signed-off-by: Jakub Kicinski <kuba@kernel.org> --- tools/testing/selftests/drivers/net/hw/rss_ctx.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)