X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=tests%2Fbenchmark%2Frunhash.sh;h=c3f42ebe327bb231e9a7bf503afe4ac6117ecec9;hb=HEAD;hp=2ae73e971c8a71cd2b2e7da175b5c35efa2dd636;hpb=ad46005890368f9c306f0c510b3d4b08c47b66f8;p=urcu.git diff --git a/tests/benchmark/runhash.sh b/tests/benchmark/runhash.sh index 2ae73e9..c3f42eb 100755 --- a/tests/benchmark/runhash.sh +++ b/tests/benchmark/runhash.sh @@ -1,6 +1,30 @@ -#!/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" -source ../utils/tap.sh + +# 1st parameter: seconds per test +DURATION=$1 + +if [ "x${DURATION}" = "x" ]; then + echo "usage: $0 [DURATION]" + exit 1 +fi NUM_TESTS=17 @@ -13,18 +37,15 @@ diag "Executing Hash table test" # add/remove/random # - validate that "nr_leaked" is always 0 in SUMMARY for all tests -# 1st parameter: seconds per test -TIME_UNITS=$1 - -TESTPROG=./test_urcu_hash +TESTPROG="${URCU_TESTS_BUILDDIR}/benchmark/test_urcu_hash" #thread multiplier: number of processors divided by 4. -NUM_CPUS=$(nproc) +NUM_CPUS="$(urcu_nproc)" if [[ ${NUM_CPUS} -lt 4 ]]; then NUM_CPUS=4 # Floor at 4 due to following assumptions. fi -THREAD_MUL=$(( ${NUM_CPUS} / 4 )) +THREAD_MUL=$((NUM_CPUS / 4)) EXTRA_PARAMS=-v @@ -32,19 +53,19 @@ EXTRA_PARAMS=-v # rw test, single key, replace and del randomly, 4 threads, auto resize. # key range: init, lookup, and update: 0 to 0 -okx ${TESTPROG} 0 $((4*${THREAD_MUL})) ${TIME_UNITS} -A -s -M 1 -N 1 -O 1 ${EXTRA_PARAMS} +okx "${TESTPROG}" 0 $((4*THREAD_MUL)) "${DURATION}" -A -s -M 1 -N 1 -O 1 ${EXTRA_PARAMS} # rw test, single key, add unique and del randomly, 4 threads, auto resize. # key range: init, lookup, and update: 0 to 0 -okx ${TESTPROG} 0 $((4*${THREAD_MUL})) ${TIME_UNITS} -A -u -M 1 -N 1 -O 1 ${EXTRA_PARAMS} +okx "${TESTPROG}" 0 $((4*THREAD_MUL)) "${DURATION}" -A -u -M 1 -N 1 -O 1 ${EXTRA_PARAMS} # rw test, single key, replace and del randomly, 2 lookup threads, 2 update threads, auto resize. # key range: init, lookup, and update: 0 to 0 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -s -M 1 -N 1 -O 1 ${EXTRA_PARAMS} +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -s -M 1 -N 1 -O 1 ${EXTRA_PARAMS} # rw test, single key, add and del randomly, 2 lookup threads, 2 update threads, auto resize. # key range: init, lookup, and update: 0 to 0 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -M 1 -N 1 -O 1 ${EXTRA_PARAMS} +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -M 1 -N 1 -O 1 ${EXTRA_PARAMS} # ** test updates vs lookups with default table @@ -52,17 +73,17 @@ okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -M 1 # rw test, 2 lookup, 2 update threads, add and del randomly, auto resize. # max 1048576 buckets # key range: init, lookup, and update: 0 to 999999 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A ${EXTRA_PARAMS} +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add_replace and del randomly, auto resize. # max 1048576 buckets # key range: init, lookup, and update: 0 to 999999 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -s ${EXTRA_PARAMS} +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -s ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add_unique and del randomly, auto resize. # max 1048576 buckets # key range: init, lookup, and update: 0 to 999999 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -u ${EXTRA_PARAMS} +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -u ${EXTRA_PARAMS} # test memory management backends @@ -71,21 +92,21 @@ okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -u ${ # max buckets: 1048576 # key range: init, lookup, and update: 0 to 99999999 # mm backend: "order" -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -m 1 -n 1048576 -i \ +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -m 1 -n 1048576 -i \ -M 100000000 -N 100000000 -O 100000000 -B order ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add only, auto resize. # max buckets: 1048576 # key range: init, lookup, and update: 0 to 99999999 # mm backend: "chunk" -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -m 1 -n 1048576 -i \ +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -m 1 -n 1048576 -i \ -M 100000000 -N 100000000 -O 100000000 -B chunk ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add only, auto resize. # max buckets: 1048576 # key range: init, lookup, and update: 0 to 99999999 # mm backend: "mmap" -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -m 1 -n 1048576 -i \ +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -m 1 -n 1048576 -i \ -M 100000000 -N 100000000 -O 100000000 -B mmap ${EXTRA_PARAMS} @@ -97,7 +118,7 @@ okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -m 1 # key range: lookup: 1000000 to 1999999 # NOTE: reader threads in this test should never have a successful # lookup. TODO -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -R 1000000 ${EXTRA_PARAMS} # ** small key range @@ -105,19 +126,19 @@ okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ # rw test, 2 lookup, 2 update threads, add and del randomly, auto resize. # max 1048576 buckets # key range: init, update, and lookups: 0 to 9 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -M 10 -N 10 -O 10 ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add_unique and del randomly, auto resize. # max 1048576 buckets # key range: init, update, and lookups: 0 to 9 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -M 10 -N 10 -O 10 -u ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add_replace and del randomly, auto resize. # max 1048576 buckets # key range: init, update, and lookups: 0 to 9 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -M 10 -N 10 -O 10 -s ${EXTRA_PARAMS} # ** lookup for known keys @@ -129,7 +150,7 @@ okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ # key range: updates: 10 to 19 # NOTE: reader threads in this test should always have successful # lookups. TODO -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -M 10 -N 10 -O 10 -R 0 -T 0 -S 10 -k 10 -s ${EXTRA_PARAMS} # ** Uniqueness test @@ -138,12 +159,12 @@ okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ # max 1048576 buckets # asserts that no duplicates are observed by reader threads # standard length hash chains -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -U ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add_unique, add_replace and del randomly, auto resize. # max 1048576 buckets # asserts that no duplicates are observed by reader threads # create long hash chains: using modulo 4 on keys as hash -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx "${TESTPROG}" $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -U -C 4 ${EXTRA_PARAMS}