2020-07-21 14:55:23

by Paolo Pisati

[permalink] [raw]
Subject: [PATCH] selftests: txtimestamp: tear down setup() 'tc' and 'ip' env on EXIT

Add a cleanup() path upon exit, making it possible to run the test twice in a
row:

$ sudo bash -x ./txtimestamp.sh
+ set -e
++ ip netns identify
+ [[ '' == \r\o\o\t ]]
+ main
+ [[ 0 -eq 0 ]]
+ run_test_all
+ setup
+ tc qdisc add dev lo root netem delay 1ms
Error: Exclusivity flag on, cannot modify.

Signed-off-by: Paolo Pisati <[email protected]>
---
tools/testing/selftests/net/txtimestamp.sh | 10 ++++++++++
1 file changed, 10 insertions(+)

diff --git a/tools/testing/selftests/net/txtimestamp.sh b/tools/testing/selftests/net/txtimestamp.sh
index eea6f5193693..77f29cabff87 100755
--- a/tools/testing/selftests/net/txtimestamp.sh
+++ b/tools/testing/selftests/net/txtimestamp.sh
@@ -23,6 +23,14 @@ setup() {
action mirred egress redirect dev ifb_netem0
}

+cleanup() {
+ tc filter del dev lo parent ffff:
+ tc qdisc del dev lo handle ffff: ingress
+ tc qdisc del dev ifb_netem0 root
+ ip link del ifb_netem0
+ tc qdisc del dev lo root
+}
+
run_test_v4v6() {
# SND will be delayed 1000us
# ACK will be delayed 6000us: 1 + 2 ms round-trip
@@ -75,6 +83,8 @@ main() {
fi
}

+trap cleanup EXIT
+
if [[ "$(ip netns identify)" == "root" ]]; then
./in_netns.sh $0 $@
else
--
2.27.0


2020-07-21 15:05:33

by Willem de Bruijn

[permalink] [raw]
Subject: Re: [PATCH] selftests: txtimestamp: tear down setup() 'tc' and 'ip' env on EXIT

On Tue, Jul 21, 2020 at 10:52 AM Paolo Pisati
<[email protected]> wrote:
>
> Add a cleanup() path upon exit, making it possible to run the test twice in a
> row:
>
> $ sudo bash -x ./txtimestamp.sh
> + set -e
> ++ ip netns identify
> + [[ '' == \r\o\o\t ]]
> + main
> + [[ 0 -eq 0 ]]
> + run_test_all
> + setup
> + tc qdisc add dev lo root netem delay 1ms
> Error: Exclusivity flag on, cannot modify.
>
> Signed-off-by: Paolo Pisati <[email protected]>

The test should already clean up after itself, by being run inside a
network namespace. That is a more robust method to ensure that all
state is reset.

The issue here is that the else branch is taken in

if [[ "$(ip netns identify)" == "root" ]]; then
./in_netns.sh $0 $@
else
main $@
fi

because the ip netns identify usually returns an empty string, not
"root". If we fix that, no need to add additional cleanup.

2020-07-21 16:17:49

by Paolo Pisati

[permalink] [raw]
Subject: [PATCH v2] selftest: txtimestamp: fix net ns entry logic

According to 'man 8 ip-netns', if `ip netns identify` returns an empty string,
there's no net namespace associated with current PID: fix the net ns entrance
logic.

Signed-off-by: Paolo Pisati <[email protected]>
---
tools/testing/selftests/net/txtimestamp.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/net/txtimestamp.sh b/tools/testing/selftests/net/txtimestamp.sh
index eea6f5193693..31637769f59f 100755
--- a/tools/testing/selftests/net/txtimestamp.sh
+++ b/tools/testing/selftests/net/txtimestamp.sh
@@ -75,7 +75,7 @@ main() {
fi
}

-if [[ "$(ip netns identify)" == "root" ]]; then
+if [[ -z "$(ip netns identify)" ]]; then
./in_netns.sh $0 $@
else
main $@
--
2.27.0

2020-07-21 16:29:52

by Willem de Bruijn

[permalink] [raw]
Subject: Re: [PATCH v2] selftest: txtimestamp: fix net ns entry logic

On Tue, Jul 21, 2020 at 12:17 PM Paolo Pisati
<[email protected]> wrote:
>
> According to 'man 8 ip-netns', if `ip netns identify` returns an empty string,
> there's no net namespace associated with current PID: fix the net ns entrance
> logic.
>
> Signed-off-by: Paolo Pisati <[email protected]>

Fixes: cda261f421ba ("selftests: add txtimestamp kselftest")

Acked-by: Willem de Bruijn <[email protected]>

Thanks for the fix.

2020-07-21 23:14:43

by David Miller

[permalink] [raw]
Subject: Re: [PATCH v2] selftest: txtimestamp: fix net ns entry logic

From: Paolo Pisati <[email protected]>
Date: Tue, 21 Jul 2020 18:17:10 +0200

> According to 'man 8 ip-netns', if `ip netns identify` returns an empty string,
> there's no net namespace associated with current PID: fix the net ns entrance
> logic.
>
> Signed-off-by: Paolo Pisati <[email protected]>

Applied, thanks.

2020-07-22 08:40:22

by Paolo Pisati

[permalink] [raw]
Subject: Re: [PATCH v2] selftest: txtimestamp: fix net ns entry logic

On Tue, Jul 21, 2020 at 6:26 PM Willem de Bruijn
<[email protected]> wrote:
>
> Fixes: cda261f421ba ("selftests: add txtimestamp kselftest")
>
> Acked-by: Willem de Bruijn <[email protected]>

Besides, is it just me or this test fails frequently? I've been
running it on 5.4.x, 5.7.x and 5.8-rcX and it often fails:

...
USR: 1595405084 s 947366 us (seq=0, len=0)
SND: 1595405084 s 948686 us (seq=9, len=10) (USR +1319 us)
ERROR: 6542 us expected between 6000 and 6500
ACK: 1595405084 s 953908 us (seq=9, len=10) (USR +6541 us)
USR: 1595405084 s 997979 us (seq=0, len=0)
SND: 1595405084 s 999101 us (seq=19, len=10) (USR +1121 us)
ACK: 1595405085 s 4438 us (seq=19, len=10) (USR +6458 us)
USR: 1595405085 s 49317 us (seq=0, len=0)
SND: 1595405085 s 50680 us (seq=29, len=10) (USR +1363 us)
ERROR: 6661 us expected between 6000 and 6500
ACK: 1595405085 s 55978 us (seq=29, len=10) (USR +6661 us)
USR: 1595405085 s 101049 us (seq=0, len=0)
SND: 1595405085 s 102342 us (seq=39, len=10) (USR +1293 us)
ERROR: 6578 us expected between 6000 and 6500
ACK: 1595405085 s 107627 us (seq=39, len=10) (USR +6577 us)
USR-SND: count=4, avg=1274 us, min=1121 us, max=1363 us
USR-ACK: count=4, avg=6559 us, min=6458 us, max=6661 us


In particular, "run_test_v4v6 ${args} # tcp" is the most
susceptible to failures (though i've seen the udp variant fail too).
--
bye,
p.

2020-07-22 12:51:32

by Willem de Bruijn

[permalink] [raw]
Subject: Re: [PATCH v2] selftest: txtimestamp: fix net ns entry logic

On Wed, Jul 22, 2020 at 4:37 AM Paolo Pisati <[email protected]> wrote:
>
> On Tue, Jul 21, 2020 at 6:26 PM Willem de Bruijn
> <[email protected]> wrote:
> >
> > Fixes: cda261f421ba ("selftests: add txtimestamp kselftest")
> >
> > Acked-by: Willem de Bruijn <[email protected]>
>
> Besides, is it just me or this test fails frequently? I've been
> running it on 5.4.x, 5.7.x and 5.8-rcX and it often fails:
>
> ...
> USR: 1595405084 s 947366 us (seq=0, len=0)
> SND: 1595405084 s 948686 us (seq=9, len=10) (USR +1319 us)
> ERROR: 6542 us expected between 6000 and 6500
> ACK: 1595405084 s 953908 us (seq=9, len=10) (USR +6541 us)
> USR: 1595405084 s 997979 us (seq=0, len=0)
> SND: 1595405084 s 999101 us (seq=19, len=10) (USR +1121 us)
> ACK: 1595405085 s 4438 us (seq=19, len=10) (USR +6458 us)
> USR: 1595405085 s 49317 us (seq=0, len=0)
> SND: 1595405085 s 50680 us (seq=29, len=10) (USR +1363 us)
> ERROR: 6661 us expected between 6000 and 6500
> ACK: 1595405085 s 55978 us (seq=29, len=10) (USR +6661 us)
> USR: 1595405085 s 101049 us (seq=0, len=0)
> SND: 1595405085 s 102342 us (seq=39, len=10) (USR +1293 us)
> ERROR: 6578 us expected between 6000 and 6500
> ACK: 1595405085 s 107627 us (seq=39, len=10) (USR +6577 us)
> USR-SND: count=4, avg=1274 us, min=1121 us, max=1363 us
> USR-ACK: count=4, avg=6559 us, min=6458 us, max=6661 us
>
>
> In particular, "run_test_v4v6 ${args} # tcp" is the most
> susceptible to failures (though i've seen the udp variant fail too).

Not for me. The interval bounds have been set as is based on previous
experience.

Are you running it inside a VM? Especially qemu without kvm
acceleration could increase jitter.

The reports are not far outside the bounds. They can be extended a bit
if that considerably reduces flakiness.