Re: selftests/rseq: run_param_test.sh runs long

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



----- On Oct 4, 2018, at 1:25 PM, Mathieu Desnoyers mathieu.desnoyers@xxxxxxxxxxxx wrote:

> Hi Naresh,
> 
> ----- On Oct 4, 2018, at 5:34 AM, naresh kamboju naresh.kamboju@xxxxxxxxxx
> wrote:
> 
>> Restart able sequences test "run_param_test.sh" test case running long
>> on target devices. I have listed test duration on x86_64, arm64 and
>> arm32.
> 
> Considering that failures only happen randomly when the scheduler
> preempts threads running in a rseq critical section, we need to have
> some amount of repetition in there.
> 
> There are however other aspects that we might want to tweak based on the
> detected system configuration.
> 
> As a baseline, run_param_test.sh completes in 3m49s on my 16-core x86-64
> (+hyperthreading).
> 
> I see that your x86-64 completes in 10m. We might want to tweak the number of
> threads used in each test (currently always at its default of 200) based on the
> number of detected cpus. The formula nr_cpus * 5 is an estimate that would
> be close to the 200 threads that are configured to run in about 4m on my
> main test system. It can be specified to param_test with the following
> option:
> 
>	[-t N] Number of threads (default 200)
> 
> The goal behind having 5 threads per cpu is to ensure the scheduler will preempt
> the running threads frequently enough.
> 
> I am really tempted to adapt the number of threads based on the number of
> detected cpus rather than make the number of loops smaller, so we can keep
> the current amount of work per cpu (and therefore likelihood to trigger a
> rseq failure scenario).
> 
> Thoughts ?

Something like the following diff:

diff --git a/tools/testing/selftests/rseq/run_param_test.sh b/tools/testing/selftests/rseq/run_param_test.sh
index 3acd6d75ff9f..e426304fd4a0 100755
--- a/tools/testing/selftests/rseq/run_param_test.sh
+++ b/tools/testing/selftests/rseq/run_param_test.sh
@@ -1,6 +1,8 @@
 #!/bin/bash
 # SPDX-License-Identifier: GPL-2.0+ or MIT
 
+NR_CPUS=`grep '^processor' /proc/cpuinfo | wc -l`
+
 EXTRA_ARGS=${@}
 
 OLDIFS="$IFS"
@@ -28,15 +30,16 @@ IFS="$OLDIFS"
 
 REPS=1000
 SLOW_REPS=100
+NR_THREADS=$((6*${NR_CPUS}))
 
 function do_tests()
 {
        local i=0
        while [ "$i" -lt "${#TEST_LIST[@]}" ]; do
                echo "Running test ${TEST_NAME[$i]}"
-               ./param_test ${TEST_LIST[$i]} -r ${REPS} ${@} ${EXTRA_ARGS} || exit 1
+               ./param_test ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1
                echo "Running compare-twice test ${TEST_NAME[$i]}"
-               ./param_test_compare_twice ${TEST_LIST[$i]} -r ${REPS} ${@} ${EXTRA_ARGS} || exit 1
+               ./param_test_compare_twice ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1
                let "i++"
        done
 }

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com



[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux