2 # SPDX-License-Identifier: GPL-2.0+
4 # Run a group of kvm.sh tests on the specified commits. This currently
5 # unconditionally does three-minute runs on each scenario in CFLIST,
6 # taking advantage of all available CPUs and trusting the "make" utility.
7 # In the short term, adjustments can be made by editing this script and
8 # CFLIST. If some adjustments appear to have ongoing value, this script
9 # might grow some command-line arguments.
11 # Usage: kvm-check-branches.sh commit1 commit2..commit3 commit4 ...
13 # This script considers its arguments one at a time. If more elaborate
14 # specification of commits is needed, please use "git rev-list" to
15 # produce something that this simple script can understand. The reason
16 # for retaining the simplicity is that it allows the user to more easily
17 # see which commit came from which branch.
19 # This script creates a yyyy.mm.dd-hh.mm.ss-group entry in the "res"
20 # directory. The calls to kvm.sh create the usual entries, but this script
21 # moves them under the yyyy.mm.dd-hh.mm.ss-group entry, each in its own
22 # directory numbered in run order, that is, "0001", "0002", and so on.
23 # For successful runs, the large build artifacts are removed. Doing this
24 # reduces the disk space required by about two orders of magnitude for
27 # Copyright (C) Facebook, 2020
29 # Authors: Paul E. McKenney <paulmck@kernel.org>
31 if ! git status
> /dev
/null
2>&1
33 echo '!!!' This
script needs to run
in a git archive.
1>&2
34 echo '!!!' Giving up.
1>&2
38 # Remember where we started so that we can get back at the end.
39 curcommit
="`git status | head -1 | awk '{ print $NF }'`"
43 resdir
="tools/testing/selftests/rcutorture/res"
44 ds
="`date +%Y.%m.%d-%H.%M.%S`-group"
50 echo Results directory
: $resdir/$ds
52 RCUTORTURE
="`pwd`/tools/testing/selftests/rcutorture"; export RCUTORTURE
53 PATH
=${RCUTORTURE}/bin
:$PATH; export PATH
55 echo Using all
`identify_qemu_vcpus` CPUs.
57 # Each pass through this loop does one command-line argument.
60 echo ' --- git branch ' $gitbr
62 # Each pass through this loop tests one commit.
63 for i
in `git rev-list "$gitbr"`
66 idir
=`awk -v ntry="$ntry" 'END { printf "%04d", ntry; }' < /dev/null`
67 echo ' --- commit ' $i from branch
$gitbr
69 mkdir
$resdir/$ds/$idir
70 echo $gitbr > $resdir/$ds/$idir/gitbr
71 echo $i >> $resdir/$ds/$idir/gitbr
73 # Test the specified commit.
74 git checkout
$i > $resdir/$ds/$idir/git-checkout.out
2>&1
75 echo git checkout
return code
: $?
"(Commit $ntry: $i)"
76 kvm.sh
--allcpus --duration 3 --trust-make --datestamp "$ds/$idir" > $resdir/$ds/$idir/kvm.sh.out
2>&1
78 echo kvm.sh
return code
$ret for commit
$i from branch
$gitbr
79 echo Run results
: $resdir/$ds/$idir
82 # Failure, so leave all evidence intact.
83 nfail
=`expr $nfail + 1`
85 # Success, so remove large files to save about 1GB.
86 ( cd $resdir/$ds/$idir/$rrd; rm -f */vmlinux
*/bzImage
*/System.map
*/Module.symvers
)
92 # Go back to the original commit.
93 git checkout
"$curcommit"
97 echo '!!! ' $nfail failures
in $ntry 'runs!!!'
100 echo No failures
in $ntry runs.