torture: Hoist calls to lscpu to higher-level kvm.sh script
authorPaul E. McKenney <paulmck@kernel.org>
Mon, 25 Nov 2019 22:33:28 +0000 (14:33 -0800)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 9 Dec 2019 21:00:30 +0000 (13:00 -0800)
On some kernels, concurrent calls to the lscpu command result in severe
slowdowns.  For example, on v4.16, a single lscpu invocation takes about
two milliseconds, four concurrent invocations more than two seconds,
and 16 concurrent invocations more than 20 seconds.  Given that the only
goal is to learn the number of CPUs, invoking lscpu but once suffices.
This commit therefore invokes lscpu early in kvm.sh execution, setting
the initial value of the TORTURE_ALLOTED_CPUS environment variable.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh
tools/testing/selftests/rcutorture/bin/kvm.sh

index 1d98992d1c34eeb7d92441a0a94726ffde077b4f..e0352304b98b4c7f045e67560e8c65dfb2a4a6a3 100755 (executable)
@@ -133,11 +133,10 @@ fi
 qemu_args="-enable-kvm -nographic $qemu_args"
 cpu_count=`configNR_CPUS.sh $resdir/ConfigFragment`
 cpu_count=`configfrag_boot_cpus "$boot_args" "$config_template" "$cpu_count"`
-vcpus=`identify_qemu_vcpus`
-if test $cpu_count -gt $vcpus
+if test "$cpu_count" -gt "$TORTURE_ALLOTED_CPUS"
 then
-       echo CPU count limited from $cpu_count to $vcpus | tee -a $resdir/Warnings
-       cpu_count=$vcpus
+       echo CPU count limited from $cpu_count to $TORTURE_ALLOTED_CPUS | tee -a $resdir/Warnings
+       cpu_count=$TORTURE_ALLOTED_CPUS
 fi
 qemu_args="`specify_qemu_cpus "$QEMU" "$qemu_args" "$cpu_count"`"
 
index e19151c6e5e55a887345ecd94b252b24e976d638..78d18ab8e95482dd18f32cef45833539f13d76e2 100755 (executable)
@@ -24,7 +24,9 @@ dur=$((30*60))
 dryrun=""
 KVM="`pwd`/tools/testing/selftests/rcutorture"; export KVM
 PATH=${KVM}/bin:$PATH; export PATH
-TORTURE_ALLOTED_CPUS=""
+. functions.sh
+
+TORTURE_ALLOTED_CPUS="`identify_qemu_vcpus`"
 TORTURE_DEFCONFIG=defconfig
 TORTURE_BOOT_IMAGE=""
 TORTURE_INITRD="$KVM/initrd"; export TORTURE_INITRD
@@ -40,8 +42,6 @@ cpus=0
 ds=`date +%Y.%m.%d-%H:%M:%S`
 jitter="-1"
 
-. functions.sh
-
 usage () {
        echo "Usage: $scriptname optional arguments:"
        echo "       --bootargs kernel-boot-arguments"
@@ -93,6 +93,11 @@ do
                checkarg --cpus "(number)" "$#" "$2" '^[0-9]*$' '^--'
                cpus=$2
                TORTURE_ALLOTED_CPUS="$2"
+               max_cpus="`identify_qemu_vcpus`"
+               if test "$TORTURE_ALLOTED_CPUS" -gt "$max_cpus"
+               then
+                       TORTURE_ALLOTED_CPUS=$max_cpus
+               fi
                shift
                ;;
        --datestamp)