Skip to content

Commit 1c5144a

Browse files
paulmckrcuNeeraj Upadhyay
authored andcommitted
torture: Add torture.sh --guest-cpu-limit argument for limited hosts
Some servers have limitations on the number of CPUs a given guest OS can use. In my earlier experience, such limitations have been at least half of the host's CPUs, but in a recent example, this limit is less than 40%. This commit therefore adds a --guest-cpu-limit argument that allows such low limits to be made known to torture.sh. Signed-off-by: "Paul E. McKenney" <[email protected]> Signed-off-by: Neeraj Upadhyay <[email protected]>
1 parent 58cb321 commit 1c5144a

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

tools/testing/selftests/rcutorture/bin/torture.sh

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ PATH=${RCUTORTURE}/bin:$PATH; export PATH
1919

2020
TORTURE_ALLOTED_CPUS="`identify_qemu_vcpus`"
2121
MAKE_ALLOTED_CPUS=$((TORTURE_ALLOTED_CPUS*2))
22-
HALF_ALLOTED_CPUS=$((TORTURE_ALLOTED_CPUS/2))
23-
if test "$HALF_ALLOTED_CPUS" -lt 1
22+
SCALE_ALLOTED_CPUS=$((TORTURE_ALLOTED_CPUS/2))
23+
if test "$SCALE_ALLOTED_CPUS" -lt 1
2424
then
25-
HALF_ALLOTED_CPUS=1
25+
SCALE_ALLOTED_CPUS=1
2626
fi
2727
VERBOSE_BATCH_CPUS=$((TORTURE_ALLOTED_CPUS/16))
2828
if test "$VERBOSE_BATCH_CPUS" -lt 2
@@ -90,6 +90,7 @@ usage () {
9090
echo " --do-scftorture / --do-no-scftorture / --no-scftorture"
9191
echo " --do-srcu-lockdep / --do-no-srcu-lockdep / --no-srcu-lockdep"
9292
echo " --duration [ <minutes> | <hours>h | <days>d ]"
93+
echo " --guest-cpu-limit N"
9394
echo " --kcsan-kmake-arg kernel-make-arguments"
9495
exit 1
9596
}
@@ -203,6 +204,21 @@ do
203204
duration_base=$(($ts*mult))
204205
shift
205206
;;
207+
--guest-cpu-limit|--guest-cpu-lim)
208+
checkarg --guest-cpu-limit "(number)" "$#" "$2" '^[0-9]*$' '^--'
209+
if (("$2" <= "$TORTURE_ALLOTED_CPUS" / 2))
210+
then
211+
SCALE_ALLOTED_CPUS="$2"
212+
VERBOSE_BATCH_CPUS="$((SCALE_ALLOTED_CPUS/8))"
213+
if (("$VERBOSE_BATCH_CPUS" < 2))
214+
then
215+
VERBOSE_BATCH_CPUS=0
216+
fi
217+
else
218+
echo "Ignoring value of $2 for --guest-cpu-limit which is greater than (("$TORTURE_ALLOTED_CPUS" / 2))."
219+
fi
220+
shift
221+
;;
206222
--kcsan-kmake-arg|--kcsan-kmake-args)
207223
checkarg --kcsan-kmake-arg "(kernel make arguments)" $# "$2" '.*' '^error$'
208224
kcsan_kmake_args="`echo "$kcsan_kmake_args $2" | sed -e 's/^ *//' -e 's/ *$//'`"
@@ -425,9 +441,9 @@ fi
425441
if test "$do_scftorture" = "yes"
426442
then
427443
# Scale memory based on the number of CPUs.
428-
scfmem=$((3+HALF_ALLOTED_CPUS/16))
429-
torture_bootargs="scftorture.nthreads=$HALF_ALLOTED_CPUS torture.disable_onoff_at_boot csdlock_debug=1"
430-
torture_set "scftorture" tools/testing/selftests/rcutorture/bin/kvm.sh --torture scf --allcpus --duration "$duration_scftorture" --configs "$configs_scftorture" --kconfig "CONFIG_NR_CPUS=$HALF_ALLOTED_CPUS" --memory ${scfmem}G --trust-make
444+
scfmem=$((3+SCALE_ALLOTED_CPUS/16))
445+
torture_bootargs="scftorture.nthreads=$SCALE_ALLOTED_CPUS torture.disable_onoff_at_boot csdlock_debug=1"
446+
torture_set "scftorture" tools/testing/selftests/rcutorture/bin/kvm.sh --torture scf --allcpus --duration "$duration_scftorture" --configs "$configs_scftorture" --kconfig "CONFIG_NR_CPUS=$SCALE_ALLOTED_CPUS" --memory ${scfmem}G --trust-make
431447
fi
432448

433449
if test "$do_rt" = "yes"
@@ -471,8 +487,8 @@ for prim in $primlist
471487
do
472488
if test -n "$firsttime"
473489
then
474-
torture_bootargs="refscale.scale_type="$prim" refscale.nreaders=$HALF_ALLOTED_CPUS refscale.loops=10000 refscale.holdoff=20 torture.disable_onoff_at_boot"
475-
torture_set "refscale-$prim" tools/testing/selftests/rcutorture/bin/kvm.sh --torture refscale --allcpus --duration 5 --kconfig "CONFIG_TASKS_TRACE_RCU=y CONFIG_NR_CPUS=$HALF_ALLOTED_CPUS" --bootargs "refscale.verbose_batched=$VERBOSE_BATCH_CPUS torture.verbose_sleep_frequency=8 torture.verbose_sleep_duration=$VERBOSE_BATCH_CPUS" --trust-make
490+
torture_bootargs="refscale.scale_type="$prim" refscale.nreaders=$SCALE_ALLOTED_CPUS refscale.loops=10000 refscale.holdoff=20 torture.disable_onoff_at_boot"
491+
torture_set "refscale-$prim" tools/testing/selftests/rcutorture/bin/kvm.sh --torture refscale --allcpus --duration 5 --kconfig "CONFIG_TASKS_TRACE_RCU=y CONFIG_NR_CPUS=$SCALE_ALLOTED_CPUS" --bootargs "refscale.verbose_batched=$VERBOSE_BATCH_CPUS torture.verbose_sleep_frequency=8 torture.verbose_sleep_duration=$VERBOSE_BATCH_CPUS" --trust-make
476492
mv $T/last-resdir-nodebug $T/first-resdir-nodebug || :
477493
if test -f "$T/last-resdir-kasan"
478494
then
@@ -520,8 +536,8 @@ for prim in $primlist
520536
do
521537
if test -n "$firsttime"
522538
then
523-
torture_bootargs="rcuscale.scale_type="$prim" rcuscale.nwriters=$HALF_ALLOTED_CPUS rcuscale.holdoff=20 torture.disable_onoff_at_boot"
524-
torture_set "rcuscale-$prim" tools/testing/selftests/rcutorture/bin/kvm.sh --torture rcuscale --allcpus --duration 5 --kconfig "CONFIG_TASKS_TRACE_RCU=y CONFIG_NR_CPUS=$HALF_ALLOTED_CPUS" --trust-make
539+
torture_bootargs="rcuscale.scale_type="$prim" rcuscale.nwriters=$SCALE_ALLOTED_CPUS rcuscale.holdoff=20 torture.disable_onoff_at_boot"
540+
torture_set "rcuscale-$prim" tools/testing/selftests/rcutorture/bin/kvm.sh --torture rcuscale --allcpus --duration 5 --kconfig "CONFIG_TASKS_TRACE_RCU=y CONFIG_NR_CPUS=$SCALE_ALLOTED_CPUS" --trust-make
525541
mv $T/last-resdir-nodebug $T/first-resdir-nodebug || :
526542
if test -f "$T/last-resdir-kasan"
527543
then
@@ -559,7 +575,7 @@ do_kcsan="$do_kcsan_save"
559575
if test "$do_kvfree" = "yes"
560576
then
561577
torture_bootargs="rcuscale.kfree_rcu_test=1 rcuscale.kfree_nthreads=16 rcuscale.holdoff=20 rcuscale.kfree_loops=10000 torture.disable_onoff_at_boot"
562-
torture_set "rcuscale-kvfree" tools/testing/selftests/rcutorture/bin/kvm.sh --torture rcuscale --allcpus --duration $duration_rcutorture --kconfig "CONFIG_NR_CPUS=$HALF_ALLOTED_CPUS" --memory 2G --trust-make
578+
torture_set "rcuscale-kvfree" tools/testing/selftests/rcutorture/bin/kvm.sh --torture rcuscale --allcpus --duration $duration_rcutorture --kconfig "CONFIG_NR_CPUS=$SCALE_ALLOTED_CPUS" --memory 2G --trust-make
563579
fi
564580

565581
if test "$do_clocksourcewd" = "yes"

0 commit comments

Comments
 (0)