public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: Stefano Brivio <sbrivio@redhat.com>
To: passt-dev@passt.top
Subject: [PATCH 6/7] test/lib: Wait on iperf3 clients to be done, then send SIGINT to servers
Date: Wed, 21 Sep 2022 22:55:06 +0200	[thread overview]
Message-ID: <20220921205507.2742203-7-sbrivio@redhat.com> (raw)
In-Reply-To: <20220921205507.2742203-1-sbrivio@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 1702 bytes --]

An iperf3 client might fail to send the control message indicating
the end of the test, if the kernel buffer doesn't accept it, and exit
without having sent it, as the control socket is non-blocking. Should
this happen, the server will just wait forever for this message,
instead of terminating.

Restore some of the behaviour that went away with the
"test: Rewrite test_iperf3" patch: instead of waiting on servers to
terminate, wait on the clients. When they are done, wait 2 seconds,
and then send SIGINT to the servers, which make them still write
out the JSON report before terminating.

Signed-off-by: Stefano Brivio <sbrivio(a)redhat.com>
---
 test/lib/test | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/test/lib/test b/test/lib/test
index a9ffe83..b69d519 100755
--- a/test/lib/test
+++ b/test/lib/test
@@ -32,13 +32,11 @@ test_iperf3() {
 	__time="${1}"; shift
 
 	pane_or_context_run_bg "${__sctx}" 				\
-		 '('							\
-		 '	for i in $(seq 0 '${__procs}'); do'		\
-		 '		iperf3 -s1J -p'${__port}' -i'${__time}	\
-		 '		   > s${i}.json &'			\
-		 '	done;'						\
-		 '	wait'						\
-		 ')'
+		 'for i in $(seq 0 '${__procs}'); do'			\
+		 '	(iperf3 -s1J -p'${__port}' -i'${__time}		\
+		 '	 > s${i}.json) &'				\
+		 '	echo $! > s${i}.pid &'				\
+		 'done'							\
 
 	sleep 1		# Wait for server to be ready
 
@@ -51,7 +49,9 @@ test_iperf3() {
 		 '	wait'						\
 		 ')'
 
-	pane_or_context_wait "${__sctx}"
+	# If client fails to deliver control message, tell server we're done
+	pane_or_context_run "${__sctx}" 				\
+		'sleep 2; kill -INT $(cat s*.pid); rm s*.pid'
 
 	__jval=".end.sum_received.bits_per_second"
 	for __opt in ${@}; do
-- 
@@ -32,13 +32,11 @@ test_iperf3() {
 	__time="${1}"; shift
 
 	pane_or_context_run_bg "${__sctx}" 				\
-		 '('							\
-		 '	for i in $(seq 0 '${__procs}'); do'		\
-		 '		iperf3 -s1J -p'${__port}' -i'${__time}	\
-		 '		   > s${i}.json &'			\
-		 '	done;'						\
-		 '	wait'						\
-		 ')'
+		 'for i in $(seq 0 '${__procs}'); do'			\
+		 '	(iperf3 -s1J -p'${__port}' -i'${__time}		\
+		 '	 > s${i}.json) &'				\
+		 '	echo $! > s${i}.pid &'				\
+		 'done'							\
 
 	sleep 1		# Wait for server to be ready
 
@@ -51,7 +49,9 @@ test_iperf3() {
 		 '	wait'						\
 		 ')'
 
-	pane_or_context_wait "${__sctx}"
+	# If client fails to deliver control message, tell server we're done
+	pane_or_context_run "${__sctx}" 				\
+		'sleep 2; kill -INT $(cat s*.pid); rm s*.pid'
 
 	__jval=".end.sum_received.bits_per_second"
 	for __opt in ${@}; do
-- 
2.35.1


  parent reply	other threads:[~2022-09-21 20:55 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-21 20:55 [PATCH 0/7] Fixes and workarounds for tests, Coverity warnings Stefano Brivio
2022-09-21 20:55 ` [PATCH 1/7] test/perf: Always use /sbin/sysctl in tcp test Stefano Brivio
2022-09-22  6:28   ` David Gibson
2022-09-21 20:55 ` [PATCH 2/7] test/perf: Switch performance test duration to 10 seconds instead of 30 Stefano Brivio
2022-09-22  6:29   ` David Gibson
2022-09-21 20:55 ` [PATCH 3/7] tap: Check return value of accept4() before calling getsockopt() Stefano Brivio
2022-09-22  6:30   ` David Gibson
2022-09-21 20:55 ` [PATCH 4/7] conf, tcp, udp: Arrays for ports need 2^16 values, not 2^16-8 Stefano Brivio
2022-09-22  6:43   ` David Gibson
2022-09-22  8:21     ` Stefano Brivio
2022-09-22 23:39       ` Stefano Brivio
2022-09-23  2:09         ` David Gibson
2022-09-21 20:55 ` [PATCH 5/7] test/lib: Restore IFS while executing directives in def blocks Stefano Brivio
2022-09-22  6:44   ` David Gibson
2022-09-22  8:25     ` Stefano Brivio
2022-09-23  6:55       ` David Gibson
2022-09-21 20:55 ` Stefano Brivio [this message]
2022-09-21 20:55 ` [PATCH 7/7] test/perf: Disable periodic throughput reports to avoid vhost hang Stefano Brivio
2022-09-22  6:46   ` David Gibson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220921205507.2742203-7-sbrivio@redhat.com \
    --to=sbrivio@redhat.com \
    --cc=passt-dev@passt.top \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

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 IMAP folder(s).