X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=tests%2Fbenchmark%2Frun-urcu-tests.sh;h=13347ee1ce159843326564a3dcc6e04083a756de;hb=HEAD;hp=1df988add7b806f3e7e739f1667003e8572b04ec;hpb=f80aadcdd08e594e5758acc9ec5d7ef71725ac77;p=urcu.git diff --git a/tests/benchmark/run-urcu-tests.sh b/tests/benchmark/run-urcu-tests.sh index 1df988a..13347ee 100755 --- a/tests/benchmark/run-urcu-tests.sh +++ b/tests/benchmark/run-urcu-tests.sh @@ -1,45 +1,54 @@ -#!/bin/bash +#!/usr/bin/env bash +# +# SPDX-License-Identifier: GPL-2.0-only +# +# SPDX-FileCopyrightText: 2022 EfficiOS Inc. +# + +if [ "x${URCU_TESTS_SRCDIR:-}" != "x" ]; then + UTILSSH="$URCU_TESTS_SRCDIR/utils/utils.sh" +else + UTILSSH="$(dirname "$0")/../utils/utils.sh" +fi + +# Enable TAP +SH_TAP=1 + +# shellcheck source=../utils/utils.sh +source "$UTILSSH" -#first parameter: seconds per test + +# First parameter: seconds per test DURATION=$1 -if [ "x$DURATION" = "x" ]; then +if [ "x${DURATION}" = "x" ]; then echo "usage: $0 [DURATION]" exit 1 fi -. ../utils/tap.sh -. ./common.sh - -NUM_CPUS="1" -for i in nproc gnproc; do - NUM_CPUS=$($i 2>/dev/null) - if [ "$?" -eq "0" ]; then - break - else - NUM_CPUS="1" - fi -done +# Create a temporary file for tests output +TMPFILE=$(mktemp) + +# Set trap to delete the temporary file on exit and call tap.sh '_exit' +trap 'rm -f "$TMPFILE"; _exit' EXIT -#set to number of active CPUS +# Set to number of active CPUS +NUM_CPUS="$(urcu_nproc)" if [[ ${NUM_CPUS} -lt 4 ]]; then NUM_CPUS=4 # Floor at 4 due to following assumptions. fi # batch: 19 * 1 = 19 -# fraction: 15 * 29 = -# scalabilit NUM_CPUS * 15 -# reader 15 * 23 = -NUM_TESTS=$(( 19 + 435 + ( ${NUM_CPUS} * 15 ) + 345 )) +# fraction: 12 * 29 = +# scalabilit NUM_CPUS * 12 +# reader 12 * 23 = +NUM_TESTS=$(( 19 + 348 + ( NUM_CPUS * 12 ) + 276 )) plan_tests ${NUM_TESTS} #run all tests diag "Executing URCU tests" -tmpfile= -trap cleanup SIGINT SIGTERM EXIT -tmpfile=$(mktemp) #extra options, e.g. for setting affinity on even CPUs : #EXTRA_OPTS=$(for a in $(seq 0 2 127); do echo -n "-a ${a} "; done) @@ -59,6 +68,7 @@ tmpfile=$(mktemp) #x: vary update fraction from 0 to 0.0001 #fix number of readers and reader C.S. length, vary delay between updates #y: ops/s +EXTRA_OPTS="" diag "Executing batch RCU test" @@ -67,22 +77,22 @@ BATCH_ARRAY="1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144" BATCH_TEST_ARRAY="test_urcu_gc" -NR_WRITERS=$((${NUM_CPUS} / 2)) +NR_WRITERS=$((NUM_CPUS / 2)) +NR_READERS=$((NUM_CPUS - NR_WRITERS)) -NR_READERS=$((${NUM_CPUS} - ${NR_WRITERS})) for BATCH_SIZE in ${BATCH_ARRAY}; do for TEST in ${BATCH_TEST_ARRAY}; do - okx $test_time_bin ./${TEST} ${NR_READERS} ${NR_WRITERS} ${DURATION} \ - -d 0 -b ${BATCH_SIZE} ${EXTRA_OPTS} 2>${tmpfile} - cat $tmpfile | while read line; do - echo "# $line" - done + okx ${URCU_TESTS_TIME_BIN} "${URCU_TESTS_BUILDDIR}/benchmark/${TEST}" "${NR_READERS}" "${NR_WRITERS}" "${DURATION}" \ + -d 0 -b "${BATCH_SIZE}" ${EXTRA_OPTS} 2>"${TMPFILE}" + while read -r line; do + echo "## $line" + done <"${TMPFILE}" done done -TEST_ARRAY="test_urcu_gc test_urcu_signal_gc test_urcu_mb_gc test_urcu_qsbr_gc - test_urcu_lgc test_urcu_signal_lgc test_urcu_mb_lgc test_urcu_qsbr_lgc - test_urcu test_urcu_signal test_urcu_mb test_urcu_qsbr +TEST_ARRAY="test_urcu_gc test_urcu_mb_gc test_urcu_qsbr_gc + test_urcu_lgc test_urcu_mb_lgc test_urcu_qsbr_lgc + test_urcu test_urcu_mb test_urcu_qsbr test_rwlock test_perthreadlock test_mutex" #setting gc each 32768. ** UPDATE FOR YOUR ARCHITECTURE BASED ON TEST ABOVE ** @@ -93,16 +103,16 @@ diag "Executing update fraction test" WDELAY_ARRAY="0 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 33554432 67108864 134217728" -NR_WRITERS=$((${NUM_CPUS} / 2)) +NR_WRITERS=$((NUM_CPUS / 2)) +NR_READERS=$((NUM_CPUS - NR_WRITERS)) -NR_READERS=$((${NUM_CPUS} - ${NR_WRITERS})) for WDELAY in ${WDELAY_ARRAY}; do for TEST in ${TEST_ARRAY}; do - okx $test_time_bin ./${TEST} ${NR_READERS} ${NR_WRITERS} ${DURATION} \ - -d ${WDELAY} ${EXTRA_OPTS} 2>$tmpfile - cat $tmpfile | while read line; do - echo "# $line" - done + okx ${URCU_TESTS_TIME_BIN} "${URCU_TESTS_BUILDDIR}/benchmark/${TEST}" "${NR_READERS}" "${NR_WRITERS}" "${DURATION}" \ + -d "${WDELAY}" ${EXTRA_OPTS} 2>"${TMPFILE}" + while read -r line; do + echo "## $line" + done <"${TMPFILE}" done done @@ -115,13 +125,13 @@ diag "Executing scalability test" NR_WRITERS=0 -for NR_READERS in $(xseq 1 ${NUM_CPUS}); do +for NR_READERS in $(urcu_xseq 1 ${NUM_CPUS}); do for TEST in ${TEST_ARRAY}; do - okx $test_time_bin ./${TEST} ${NR_READERS} ${NR_WRITERS} ${DURATION} \ - ${EXTRA_OPTS} 2>$tmpfile - cat $tmpfile | while read line; do - echo "# $line" - done + okx ${URCU_TESTS_TIME_BIN} "${URCU_TESTS_BUILDDIR}/benchmark/${TEST}" "${NR_READERS}" "${NR_WRITERS}" "${DURATION}" \ + ${EXTRA_OPTS} 2>"${TMPFILE}" + while read -r line; do + echo "## $line" + done <"${TMPFILE}" done done @@ -140,10 +150,10 @@ READERCSLEN_ARRAY="0 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 3276 for READERCSLEN in ${READERCSLEN_ARRAY}; do for TEST in ${TEST_ARRAY}; do - okx $test_time_bin ./${TEST} ${NR_READERS} ${NR_WRITERS} ${DURATION} \ - -c ${READERCSLEN} ${EXTRA_OPTS} 2>$tmpfile - cat $tmpfile | while read line; do - echo "# $line" - done + okx ${URCU_TESTS_TIME_BIN} "${URCU_TESTS_BUILDDIR}/benchmark/${TEST}" "${NR_READERS}" "${NR_WRITERS}" "${DURATION}" \ + -c "${READERCSLEN}" ${EXTRA_OPTS} 2>"${TMPFILE}" + while read -r line; do + echo "## $line" + done <"${TMPFILE}" done done