* [PATCH net-next 1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh
@ 2024-05-10 0:57 Jakub Kicinski
2024-05-10 0:57 ` [PATCH net-next 2/2] selftests: net: increase the delay for relative cmsg_time.sh test Jakub Kicinski
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Jakub Kicinski @ 2024-05-10 0:57 UTC (permalink / raw
To: davem; +Cc: netdev, edumazet, pabeni, Jakub Kicinski, shuah, linux-kselftest
On slow machines the SND timestamp sometimes doesn't arrive before
we quit. The test only waits as long as the packet delay, so it's
easy for a race condition to happen.
Double the wait but do a bit of polling, once the SND timestamp
arrives there's no point to wait any longer.
This fixes the "TXTIME abs" failures on debug kernels, like:
Case ICMPv4 - TXTIME abs returned '', expected 'OK'
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: shuah@kernel.org
CC: linux-kselftest@vger.kernel.org
---
tools/testing/selftests/net/cmsg_sender.c | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/tools/testing/selftests/net/cmsg_sender.c b/tools/testing/selftests/net/cmsg_sender.c
index c79e65581dc3..f25268504937 100644
--- a/tools/testing/selftests/net/cmsg_sender.c
+++ b/tools/testing/selftests/net/cmsg_sender.c
@@ -333,16 +333,17 @@ static const char *cs_ts_info2str(unsigned int info)
return "unknown";
}
-static void
+static unsigned long
cs_read_cmsg(int fd, struct msghdr *msg, char *cbuf, size_t cbuf_sz)
{
struct sock_extended_err *see;
struct scm_timestamping *ts;
+ unsigned int ts_seen = 0;
struct cmsghdr *cmsg;
int i, err;
if (!opt.ts.ena)
- return;
+ return 0;
msg->msg_control = cbuf;
msg->msg_controllen = cbuf_sz;
@@ -396,8 +397,11 @@ cs_read_cmsg(int fd, struct msghdr *msg, char *cbuf, size_t cbuf_sz)
printf(" %5s ts%d %lluus\n",
cs_ts_info2str(see->ee_info),
i, rel_time);
+ ts_seen |= 1 << see->ee_info;
}
}
+
+ return ts_seen;
}
static void ca_set_sockopts(int fd)
@@ -509,10 +513,16 @@ int main(int argc, char *argv[])
err = ERN_SUCCESS;
if (opt.ts.ena) {
- /* Make sure all timestamps have time to loop back */
- usleep(opt.txtime.delay);
+ unsigned long seen;
+ int i;
- cs_read_cmsg(fd, &msg, cbuf, sizeof(cbuf));
+ /* Make sure all timestamps have time to loop back */
+ for (i = 0; i < 40; i++) {
+ seen = cs_read_cmsg(fd, &msg, cbuf, sizeof(cbuf));
+ if (seen & (1 << SCM_TSTAMP_SND))
+ break;
+ usleep(opt.txtime.delay / 20);
+ }
}
err_out:
--
2.45.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net-next 2/2] selftests: net: increase the delay for relative cmsg_time.sh test
2024-05-10 0:57 [PATCH net-next 1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh Jakub Kicinski
@ 2024-05-10 0:57 ` Jakub Kicinski
2024-05-10 2:25 ` Willem de Bruijn
2024-05-10 2:49 ` [PATCH net-next 1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh Willem de Bruijn
2024-05-11 1:30 ` patchwork-bot+netdevbpf
2 siblings, 1 reply; 6+ messages in thread
From: Jakub Kicinski @ 2024-05-10 0:57 UTC (permalink / raw
To: davem; +Cc: netdev, edumazet, pabeni, Jakub Kicinski, shuah, linux-kselftest
Slow machines can delay scheduling of the packets for milliseconds.
Increase the delay to 8ms if KSFT_MACHINE_SLOW. Try to limit the
variability by moving setsockopts earlier (before we read time).
This fixes the "TXTIME rel" failures on debug kernels, like:
Case ICMPv4 - TXTIME rel returned '', expected 'OK'
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: shuah@kernel.org
CC: linux-kselftest@vger.kernel.org
---
tools/testing/selftests/net/cmsg_sender.c | 32 +++++++++++++----------
tools/testing/selftests/net/cmsg_time.sh | 7 +++--
2 files changed, 23 insertions(+), 16 deletions(-)
diff --git a/tools/testing/selftests/net/cmsg_sender.c b/tools/testing/selftests/net/cmsg_sender.c
index f25268504937..b2df05ef71cb 100644
--- a/tools/testing/selftests/net/cmsg_sender.c
+++ b/tools/testing/selftests/net/cmsg_sender.c
@@ -260,15 +260,8 @@ cs_write_cmsg(int fd, struct msghdr *msg, char *cbuf, size_t cbuf_sz)
SOL_IPV6, IPV6_HOPLIMIT, &opt.v6.hlimit);
if (opt.txtime.ena) {
- struct sock_txtime so_txtime = {
- .clockid = CLOCK_MONOTONIC,
- };
__u64 txtime;
- if (setsockopt(fd, SOL_SOCKET, SO_TXTIME,
- &so_txtime, sizeof(so_txtime)))
- error(ERN_SOCKOPT, errno, "setsockopt TXTIME");
-
txtime = time_start_mono.tv_sec * (1000ULL * 1000 * 1000) +
time_start_mono.tv_nsec +
opt.txtime.delay * 1000;
@@ -284,13 +277,6 @@ cs_write_cmsg(int fd, struct msghdr *msg, char *cbuf, size_t cbuf_sz)
memcpy(CMSG_DATA(cmsg), &txtime, sizeof(txtime));
}
if (opt.ts.ena) {
- __u32 val = SOF_TIMESTAMPING_SOFTWARE |
- SOF_TIMESTAMPING_OPT_TSONLY;
-
- if (setsockopt(fd, SOL_SOCKET, SO_TIMESTAMPING,
- &val, sizeof(val)))
- error(ERN_SOCKOPT, errno, "setsockopt TIMESTAMPING");
-
cmsg = (struct cmsghdr *)(cbuf + cmsg_len);
cmsg_len += CMSG_SPACE(sizeof(__u32));
if (cbuf_sz < cmsg_len)
@@ -426,6 +412,24 @@ static void ca_set_sockopts(int fd)
setsockopt(fd, SOL_SOCKET, SO_PRIORITY,
&opt.sockopt.priority, sizeof(opt.sockopt.priority)))
error(ERN_SOCKOPT, errno, "setsockopt SO_PRIORITY");
+
+ if (opt.txtime.ena) {
+ struct sock_txtime so_txtime = {
+ .clockid = CLOCK_MONOTONIC,
+ };
+
+ if (setsockopt(fd, SOL_SOCKET, SO_TXTIME,
+ &so_txtime, sizeof(so_txtime)))
+ error(ERN_SOCKOPT, errno, "setsockopt TXTIME");
+ }
+ if (opt.ts.ena) {
+ __u32 val = SOF_TIMESTAMPING_SOFTWARE |
+ SOF_TIMESTAMPING_OPT_TSONLY;
+
+ if (setsockopt(fd, SOL_SOCKET, SO_TIMESTAMPING,
+ &val, sizeof(val)))
+ error(ERN_SOCKOPT, errno, "setsockopt TIMESTAMPING");
+ }
}
int main(int argc, char *argv[])
diff --git a/tools/testing/selftests/net/cmsg_time.sh b/tools/testing/selftests/net/cmsg_time.sh
index af85267ad1e3..1d7e756644bc 100755
--- a/tools/testing/selftests/net/cmsg_time.sh
+++ b/tools/testing/selftests/net/cmsg_time.sh
@@ -66,10 +66,13 @@ for i in "-4 $TGT4" "-6 $TGT6"; do
awk '/SND/ { if ($3 > 1000) print "OK"; }')
check_result $? "$ts" "OK" "$prot - TXTIME abs"
- ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t -d 1000 |
+ [ "$KSFT_MACHINE_SLOW" = yes ] && delay=8000 || delay=1000
+
+ ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t -d $delay |
awk '/SND/ {snd=$3}
/SCHED/ {sch=$3}
- END { if (snd - sch > 500) print "OK"; }')
+ END { if (snd - sch > '$((delay/2))') print "OK";
+ else print snd, "-", sch, "<", '$((delay/2))'; }')
check_result $? "$ts" "OK" "$prot - TXTIME rel"
done
done
--
2.45.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH net-next 2/2] selftests: net: increase the delay for relative cmsg_time.sh test
2024-05-10 0:57 ` [PATCH net-next 2/2] selftests: net: increase the delay for relative cmsg_time.sh test Jakub Kicinski
@ 2024-05-10 2:25 ` Willem de Bruijn
0 siblings, 0 replies; 6+ messages in thread
From: Willem de Bruijn @ 2024-05-10 2:25 UTC (permalink / raw
To: Jakub Kicinski, davem
Cc: netdev, edumazet, pabeni, Jakub Kicinski, shuah, linux-kselftest
Jakub Kicinski wrote:
> Slow machines can delay scheduling of the packets for milliseconds.
> Increase the delay to 8ms if KSFT_MACHINE_SLOW. Try to limit the
> variability by moving setsockopts earlier (before we read time).
>
> This fixes the "TXTIME rel" failures on debug kernels, like:
>
> Case ICMPv4 - TXTIME rel returned '', expected 'OK'
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Willem de Bruijn <willemb@google.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net-next 1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh
2024-05-10 0:57 [PATCH net-next 1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh Jakub Kicinski
2024-05-10 0:57 ` [PATCH net-next 2/2] selftests: net: increase the delay for relative cmsg_time.sh test Jakub Kicinski
@ 2024-05-10 2:49 ` Willem de Bruijn
2024-05-11 1:23 ` Jakub Kicinski
2024-05-11 1:30 ` patchwork-bot+netdevbpf
2 siblings, 1 reply; 6+ messages in thread
From: Willem de Bruijn @ 2024-05-10 2:49 UTC (permalink / raw
To: Jakub Kicinski, davem
Cc: netdev, edumazet, pabeni, Jakub Kicinski, shuah, linux-kselftest
Jakub Kicinski wrote:
> On slow machines the SND timestamp sometimes doesn't arrive before
> we quit. The test only waits as long as the packet delay, so it's
> easy for a race condition to happen.
>
> Double the wait but do a bit of polling, once the SND timestamp
> arrives there's no point to wait any longer.
>
> This fixes the "TXTIME abs" failures on debug kernels, like:
>
> Case ICMPv4 - TXTIME abs returned '', expected 'OK'
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Willem de Bruijn <willemb@google.com>
> diff --git a/tools/testing/selftests/net/cmsg_sender.c b/tools/testing/selftests/net/cmsg_sender.c
> index c79e65581dc3..f25268504937 100644
> --- a/tools/testing/selftests/net/cmsg_sender.c
> +++ b/tools/testing/selftests/net/cmsg_sender.c
> @@ -333,16 +333,17 @@ static const char *cs_ts_info2str(unsigned int info)
> return "unknown";
> }
>
> -static void
> +static unsigned long
> cs_read_cmsg(int fd, struct msghdr *msg, char *cbuf, size_t cbuf_sz)
> {
> struct sock_extended_err *see;
> struct scm_timestamping *ts;
> + unsigned int ts_seen = 0;
nit: mixing unsigned long and unsigned int
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net-next 1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh
2024-05-10 2:49 ` [PATCH net-next 1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh Willem de Bruijn
@ 2024-05-11 1:23 ` Jakub Kicinski
0 siblings, 0 replies; 6+ messages in thread
From: Jakub Kicinski @ 2024-05-11 1:23 UTC (permalink / raw
To: Willem de Bruijn; +Cc: davem, netdev, edumazet, pabeni, shuah, linux-kselftest
On Thu, 09 May 2024 22:49:50 -0400 Willem de Bruijn wrote:
> > struct sock_extended_err *see;
> > struct scm_timestamping *ts;
> > + unsigned int ts_seen = 0;
>
> nit: mixing unsigned long and unsigned int
Fixed when applying, thanks!
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net-next 1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh
2024-05-10 0:57 [PATCH net-next 1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh Jakub Kicinski
2024-05-10 0:57 ` [PATCH net-next 2/2] selftests: net: increase the delay for relative cmsg_time.sh test Jakub Kicinski
2024-05-10 2:49 ` [PATCH net-next 1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh Willem de Bruijn
@ 2024-05-11 1:30 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-05-11 1:30 UTC (permalink / raw
To: Jakub Kicinski; +Cc: davem, netdev, edumazet, pabeni, shuah, linux-kselftest
Hello:
This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Thu, 9 May 2024 17:57:04 -0700 you wrote:
> On slow machines the SND timestamp sometimes doesn't arrive before
> we quit. The test only waits as long as the packet delay, so it's
> easy for a race condition to happen.
>
> Double the wait but do a bit of polling, once the SND timestamp
> arrives there's no point to wait any longer.
>
> [...]
Here is the summary with links:
- [net-next,1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh
https://git.kernel.org/netdev/net-next/c/2d3b8dfd82d7
- [net-next,2/2] selftests: net: increase the delay for relative cmsg_time.sh test
https://git.kernel.org/netdev/net-next/c/b9d5f5711dd8
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-05-11 1:30 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-10 0:57 [PATCH net-next 1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh Jakub Kicinski
2024-05-10 0:57 ` [PATCH net-next 2/2] selftests: net: increase the delay for relative cmsg_time.sh test Jakub Kicinski
2024-05-10 2:25 ` Willem de Bruijn
2024-05-10 2:49 ` [PATCH net-next 1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh Willem de Bruijn
2024-05-11 1:23 ` Jakub Kicinski
2024-05-11 1:30 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).