In order to unify what is printed in case of error, similar to what is
done in mptcp_connect.sh and mptcp_join.sh, it is interesting to do the
following modifications in simult_flows.sh:
- Print the rc errors at the end of the line.
- Print the MIB counters.
- Use the same ss options: add -M (MPTCP sockets) and -e (detailed
socket information).
While at it, also print of the 'max' time only in case of success,
because 'mptcp_connect.c' will already print this info in case of error,
e.g.:
transfer slower than expected! runtime 11948 ms, expected 11921 ms
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
tools/testing/selftests/net/mptcp/simult_flows.sh | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/simult_flows.sh b/tools/testing/selftests/net/mptcp/simult_flows.sh
index 8fa77c8e9b651171a34c89bfd5c9ded0288a5bde..e98e5907d52c2d0e9c0152efda82176861905cf1 100755
--- a/tools/testing/selftests/net/mptcp/simult_flows.sh
+++ b/tools/testing/selftests/net/mptcp/simult_flows.sh
@@ -155,6 +155,11 @@ do_transfer()
sleep 1
fi
+ NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \
+ nstat -n
+ NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \
+ nstat -n
+
timeout ${timeout_test} \
ip netns exec ${ns3} \
./mptcp_connect -jt ${timeout_poll} -l -p $port -T $max_time \
@@ -180,25 +185,31 @@ do_transfer()
kill ${cappid_connector}
fi
+ NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \
+ nstat | grep Tcp > /tmp/${ns3}.out
+ NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \
+ nstat | grep Tcp > /tmp/${ns1}.out
+
cmp $sin $cout > /dev/null 2>&1
local cmps=$?
cmp $cin $sout > /dev/null 2>&1
local cmpc=$?
- printf "%-16s" " max $max_time "
if [ $retc -eq 0 ] && [ $rets -eq 0 ] && \
[ $cmpc -eq 0 ] && [ $cmps -eq 0 ]; then
+ printf "%-16s" " max $max_time "
mptcp_lib_pr_ok
cat "$capout"
return 0
fi
- mptcp_lib_pr_fail
- echo "client exit code $retc, server $rets" 1>&2
+ mptcp_lib_pr_fail "client exit code $retc, server $rets"
echo -e "\nnetns ${ns3} socket stat for $port:" 1>&2
- ip netns exec ${ns3} ss -nita 1>&2 -o "sport = :$port"
+ ip netns exec ${ns3} ss -Menita 1>&2 -o "sport = :$port"
+ cat /tmp/${ns3}.out
echo -e "\nnetns ${ns1} socket stat for $port:" 1>&2
- ip netns exec ${ns1} ss -nita 1>&2 -o "dport = :$port"
+ ip netns exec ${ns1} ss -Menita 1>&2 -o "dport = :$port"
+ cat /tmp/${ns1}.out
ls -l $sin $cout
ls -l $cin $sout
--
2.47.1
Hi Matt, On Wed, 2025-01-08 at 19:40 +0100, Matthieu Baerts (NGI0) wrote: > In order to unify what is printed in case of error, similar to what > is > done in mptcp_connect.sh and mptcp_join.sh, it is interesting to do > the > following modifications in simult_flows.sh: > > - Print the rc errors at the end of the line. > > - Print the MIB counters. > > - Use the same ss options: add -M (MPTCP sockets) and -e (detailed > socket information). > > While at it, also print of the 'max' time only in case of success, > because 'mptcp_connect.c' will already print this info in case of > error, > e.g.: > > transfer slower than expected! runtime 11948 ms, expected 11921 ms > > Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> > --- > tools/testing/selftests/net/mptcp/simult_flows.sh | 21 > ++++++++++++++++----- > 1 file changed, 16 insertions(+), 5 deletions(-) > > diff --git a/tools/testing/selftests/net/mptcp/simult_flows.sh > b/tools/testing/selftests/net/mptcp/simult_flows.sh > index > 8fa77c8e9b651171a34c89bfd5c9ded0288a5bde..e98e5907d52c2d0e9c0152efda8 > 2176861905cf1 100755 > --- a/tools/testing/selftests/net/mptcp/simult_flows.sh > +++ b/tools/testing/selftests/net/mptcp/simult_flows.sh > @@ -155,6 +155,11 @@ do_transfer() > sleep 1 > fi > > + NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \ > + nstat -n > + NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \ > + nstat -n > + > timeout ${timeout_test} \ > ip netns exec ${ns3} \ > ./mptcp_connect -jt ${timeout_poll} -l -p $port -T $max_time \ > @@ -180,25 +185,31 @@ do_transfer() > kill ${cappid_connector} > fi > > + NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \ > + nstat | grep Tcp > /tmp/${ns3}.out > + NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \ > + nstat | grep Tcp > /tmp/${ns1}.out Here I got "nstat: history is aged out, resetting" warnings, and I don't know how to fix it: Selftest Test: ./simult_flows.sh TAP version 13 1..1 [ 1.022664] ip (155) used greatest stack depth: 12280 bytes left [ 1.316990] netem: version 1.3 # 01 balanced bwidth 7401nstat: history is aged out, resetting # nstat: history is aged out, resetting # max 7906 [ OK ] # 02 balanced bwidth - reverse direction 7394 max 7906 [ OK ] > + > cmp $sin $cout > /dev/null 2>&1 > local cmps=$? > cmp $cin $sout > /dev/null 2>&1 > local cmpc=$? > > - printf "%-16s" " max $max_time " > if [ $retc -eq 0 ] && [ $rets -eq 0 ] && \ > [ $cmpc -eq 0 ] && [ $cmps -eq 0 ]; then > + printf "%-16s" " max $max_time " > mptcp_lib_pr_ok > cat "$capout" > return 0 > fi > > - mptcp_lib_pr_fail > - echo "client exit code $retc, server $rets" 1>&2 > + mptcp_lib_pr_fail "client exit code $retc, server $rets" > echo -e "\nnetns ${ns3} socket stat for $port:" 1>&2 > - ip netns exec ${ns3} ss -nita 1>&2 -o "sport = :$port" > + ip netns exec ${ns3} ss -Menita 1>&2 -o "sport = :$port" > + cat /tmp/${ns3}.out > echo -e "\nnetns ${ns1} socket stat for $port:" 1>&2 > - ip netns exec ${ns1} ss -nita 1>&2 -o "dport = :$port" > + ip netns exec ${ns1} ss -Menita 1>&2 -o "dport = :$port" > + cat /tmp/${ns1}.out > ls -l $sin $cout > ls -l $cin $sout > >
Hi Geliang, On 10/01/2025 09:16, Geliang Tang wrote: > Hi Matt, > > On Wed, 2025-01-08 at 19:40 +0100, Matthieu Baerts (NGI0) wrote: >> In order to unify what is printed in case of error, similar to what >> is >> done in mptcp_connect.sh and mptcp_join.sh, it is interesting to do >> the >> following modifications in simult_flows.sh: >> >> - Print the rc errors at the end of the line. >> >> - Print the MIB counters. >> >> - Use the same ss options: add -M (MPTCP sockets) and -e (detailed >> socket information). >> >> While at it, also print of the 'max' time only in case of success, >> because 'mptcp_connect.c' will already print this info in case of >> error, >> e.g.: >> >> transfer slower than expected! runtime 11948 ms, expected 11921 ms >> >> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> >> --- >> tools/testing/selftests/net/mptcp/simult_flows.sh | 21 >> ++++++++++++++++----- >> 1 file changed, 16 insertions(+), 5 deletions(-) >> >> diff --git a/tools/testing/selftests/net/mptcp/simult_flows.sh >> b/tools/testing/selftests/net/mptcp/simult_flows.sh >> index >> 8fa77c8e9b651171a34c89bfd5c9ded0288a5bde..e98e5907d52c2d0e9c0152efda8 >> 2176861905cf1 100755 >> --- a/tools/testing/selftests/net/mptcp/simult_flows.sh >> +++ b/tools/testing/selftests/net/mptcp/simult_flows.sh >> @@ -155,6 +155,11 @@ do_transfer() >> sleep 1 >> fi >> >> + NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \ >> + nstat -n >> + NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \ >> + nstat -n >> + >> timeout ${timeout_test} \ >> ip netns exec ${ns3} \ >> ./mptcp_connect -jt ${timeout_poll} -l -p $port -T $max_time \ >> @@ -180,25 +185,31 @@ do_transfer() >> kill ${cappid_connector} >> fi >> >> + NSTAT_HISTORY=/tmp/${ns3}.nstat ip netns exec ${ns3} \ >> + nstat | grep Tcp > /tmp/${ns3}.out >> + NSTAT_HISTORY=/tmp/${ns1}.nstat ip netns exec ${ns1} \ >> + nstat | grep Tcp > /tmp/${ns1}.out > > Here I got "nstat: history is aged out, resetting" warnings, and I > don't know how to fix it: > > Selftest Test: ./simult_flows.sh > TAP version 13 > 1..1 > [ 1.022664] ip (155) used greatest stack depth: 12280 bytes left > [ 1.316990] netem: version 1.3 > # 01 balanced bwidth > 7401nstat: history is aged out, resetting > # nstat: history is aged out, resetting > # max 7906 [ OK ] > # 02 balanced bwidth - reverse direction 7394 > max 7906 [ OK ] Interesting: I already saw this message on NIPA, but I could not reproduce it on my side. Could you eventually try to find out what it is? Maybe the stats from files in /tmp are wrong inside your VM? The code of nstat is in the iproute2 repo: https://git.kernel.org/pub/scm/network/iproute2/iproute2-next.git/tree/misc/nstat.c#n691 if (!ignore_history) { FILE *tfp; long uptime = -1; if ((tfp = fopen("/proc/uptime", "r")) != NULL) { if (fscanf(tfp, "%ld", &uptime) != 1) uptime = -1; fclose(tfp); } if (uptime >= 0 && time(NULL) >= stb.st_mtime+uptime) { fprintf(stderr, "nstat: history is aged out, resetting\n"); if (ftruncate(fileno(hist_fp), 0) < 0) perror("nstat: ftruncate"); } } Cheers, Matt -- Sponsored by the NGI0 Core fund.
© 2016 - 2025 Red Hat, Inc.