[Fuego] [PATCH 5/5] iperf3: add retries if the server is busy

Daniel Sangorrin daniel.sangorrin at toshiba.co.jp
Fri Mar 9 05:50:30 UTC 2018

The iperf3 server can only serve iperf3 clients one at a time.
For that reason, running the test on multiple boards at the
same time would end up in an error for all boards except the
one that arrived first.

One solution would be to start multiple servers using
different ports, and asking Fuego users to write the default
port on their board files.

Here I am taking another solution that does not require
doing that and therefore is less confusing. The idea is
to allow iperf3 clients to retry the connection several
times (with 30 seconds intervals). This approach also has the
benefit that by ensuring that only one test can run at the
same time, the cpu/network utilization of the server is not
affected by other boards.

Signed-off-by: Daniel Sangorrin <daniel.sangorrin at toshiba.co.jp>
 engine/tests/Benchmark.iperf3/fuego_test.sh | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/engine/tests/Benchmark.iperf3/fuego_test.sh b/engine/tests/Benchmark.iperf3/fuego_test.sh
index 4c27ce1..528eba8 100755
--- a/engine/tests/Benchmark.iperf3/fuego_test.sh
+++ b/engine/tests/Benchmark.iperf3/fuego_test.sh
@@ -19,9 +19,24 @@ function test_run {
         echo "ERROR: set the server ip on the spec or board file"
         return 1
-    echo "Using server ip address: $IPERF3_SERVER_IP"
-    echo "Starting iperf3 client on the target (CLIENT IP: $IPADDR)"
-    cmd "cd $BOARD_TESTDIR/fuego.$TESTDIR; ./iperf3 -V -c $IPERF3_SERVER_IP -f M -J --logfile $BOARD_TESTDIR/fuego.$TESTDIR/output.json --get-server-output $BENCHMARK_IPERF3_CLIENT_PARAMS"
+    echo "Starting iperf3 client on the target (CLIENT IP: $IPADDR, SERVER IP: $IPERF3_SERVER_IP)"
+    json_file=$(mktemp)
+    for i in 1 2 3 4 5 6; do
+        cmd "$BOARD_TESTDIR/fuego.$TESTDIR/iperf3 -V -c $IPERF3_SERVER_IP -J --logfile $BOARD_TESTDIR/fuego.$TESTDIR/output.json --get-server-output $BENCHMARK_IPERF3_CLIENT_PARAMS" && break || \
+            echo "The server seems busy running another iperf3 test. Trying again in 30 seconds"
+        # that was our last try so abort the job
+        if [ $i -eq 6 ]; then
+            abort_job "The server seems busy running another iperf3 test."
+        fi
+        # remove the json file before retrying, otherwise it gets appended
+        cmd "rm -f $BOARD_TESTDIR/fuego.$TESTDIR/output.json"
+        sleep 30
+    done
+    rm -f $json_file
     report "cat $BOARD_TESTDIR/fuego.$TESTDIR/output.json"

More information about the Fuego mailing list