* [bpf-next] samples/bpf: xdpsock: Fix race when running for fix duration of time
@ 2022-03-15 10:29 Niklas Söderlund
2022-03-15 16:00 ` patchwork-bot+netdevbpf
0 siblings, 1 reply; 2+ messages in thread
From: Niklas Söderlund @ 2022-03-15 10:29 UTC (permalink / raw)
To: Björn Töpel, Magnus Karlsson, Jonathan Lemon,
Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko
Cc: Louis Peens, Simon Horman, bpf, oss-drivers,
Niklas Söderlund
When running xdpsock for a fix duration of time before terminating
using --duration=<n>, there is a race condition that may cause xdpsock
to terminate immediately.
When running for a fixed duration of time the check to determine when to
terminate execution is in is_benchmark_done() and is being executed in
the context of the poller thread,
if (opt_duration > 0) {
unsigned long dt = (get_nsecs() - start_time);
if (dt >= opt_duration)
benchmark_done = true;
}
However start_time is only set after the poller thread have been
created. This leaves a small window when the poller thread is starting
and calls is_benchmark_done() for the first time that start_time is not
yet set. In that case start_time have its initial value of 0 and the
duration check fails as it do not correlate correctly for the
applications start time and immediately sets benchmark_done which in
turn terminates the xdpsock application.
Fix this by setting start_time before creating the poller thread.
Signed-off-by: Niklas Söderlund <niklas.soderlund@corigine.com>
Signed-off-by: Simon Horman <simon.horman@corigine.com>
---
samples/bpf/xdpsock_user.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/samples/bpf/xdpsock_user.c b/samples/bpf/xdpsock_user.c
index 19288a2bbc756d3f..6f3fe30ad283cf0a 100644
--- a/samples/bpf/xdpsock_user.c
+++ b/samples/bpf/xdpsock_user.c
@@ -1984,15 +1984,15 @@ int main(int argc, char **argv)
setlocale(LC_ALL, "");
+ prev_time = get_nsecs();
+ start_time = prev_time;
+
if (!opt_quiet) {
ret = pthread_create(&pt, NULL, poller, NULL);
if (ret)
exit_with_error(ret);
}
- prev_time = get_nsecs();
- start_time = prev_time;
-
/* Configure sched priority for better wake-up accuracy */
memset(&schparam, 0, sizeof(schparam));
schparam.sched_priority = opt_schprio;
--
2.35.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [bpf-next] samples/bpf: xdpsock: Fix race when running for fix duration of time
2022-03-15 10:29 [bpf-next] samples/bpf: xdpsock: Fix race when running for fix duration of time Niklas Söderlund
@ 2022-03-15 16:00 ` patchwork-bot+netdevbpf
0 siblings, 0 replies; 2+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-03-15 16:00 UTC (permalink / raw)
To: =?utf-8?q?Niklas_S=C3=B6derlund_=3Cniklas=2Esoderlund=40corigine=2Ecom=3E?=
Cc: bjorn, magnus.karlsson, jonathan.lemon, ast, daniel, andrii,
louis.peens, simon.horman, bpf, oss-drivers
Hello:
This patch was applied to bpf/bpf-next.git (master)
by Daniel Borkmann <daniel@iogearbox.net>:
On Tue, 15 Mar 2022 11:29:48 +0100 you wrote:
> When running xdpsock for a fix duration of time before terminating
> using --duration=<n>, there is a race condition that may cause xdpsock
> to terminate immediately.
>
> When running for a fixed duration of time the check to determine when to
> terminate execution is in is_benchmark_done() and is being executed in
> the context of the poller thread,
>
> [...]
Here is the summary with links:
- [bpf-next] samples/bpf: xdpsock: Fix race when running for fix duration of time
https://git.kernel.org/bpf/bpf-next/c/8fa42d78f635
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] 2+ messages in thread
end of thread, other threads:[~2022-03-15 16:00 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-15 10:29 [bpf-next] samples/bpf: xdpsock: Fix race when running for fix duration of time Niklas Söderlund
2022-03-15 16:00 ` 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