1 #!/bin/sh 1 #!/bin/sh 2 # SPDX-License-Identifier: GPL-2.0+ 2 # SPDX-License-Identifier: GPL-2.0+ 3 # 3 # 4 # Run a group of kvm.sh tests on the specified 4 # Run a group of kvm.sh tests on the specified commits. This currently 5 # unconditionally does three-minute runs on ea 5 # unconditionally does three-minute runs on each scenario in CFLIST, 6 # taking advantage of all available CPUs and t 6 # taking advantage of all available CPUs and trusting the "make" utility. 7 # In the short term, adjustments can be made b 7 # In the short term, adjustments can be made by editing this script and 8 # CFLIST. If some adjustments appear to have 8 # CFLIST. If some adjustments appear to have ongoing value, this script 9 # might grow some command-line arguments. 9 # might grow some command-line arguments. 10 # 10 # 11 # Usage: kvm-check-branches.sh commit1 commit2 11 # Usage: kvm-check-branches.sh commit1 commit2..commit3 commit4 ... 12 # 12 # 13 # This script considers its arguments one at a 13 # This script considers its arguments one at a time. If more elaborate 14 # specification of commits is needed, please u 14 # specification of commits is needed, please use "git rev-list" to 15 # produce something that this simple script ca 15 # produce something that this simple script can understand. The reason 16 # for retaining the simplicity is that it allo 16 # for retaining the simplicity is that it allows the user to more easily 17 # see which commit came from which branch. 17 # see which commit came from which branch. 18 # 18 # 19 # This script creates a yyyy.mm.dd-hh.mm.ss-gr 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 u 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-gro 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, "0 22 # directory numbered in run order, that is, "0001", "0002", and so on. 23 # For successful runs, the large build artifac 23 # For successful runs, the large build artifacts are removed. Doing this 24 # reduces the disk space required by about two 24 # reduces the disk space required by about two orders of magnitude for 25 # successful runs. 25 # successful runs. 26 # 26 # 27 # Copyright (C) Facebook, 2020 27 # Copyright (C) Facebook, 2020 28 # 28 # 29 # Authors: Paul E. McKenney <paulmck@kernel.org 29 # Authors: Paul E. McKenney <paulmck@kernel.org> 30 30 31 if ! git status > /dev/null 2>&1 31 if ! git status > /dev/null 2>&1 32 then 32 then 33 echo '!!!' This script needs to run in 33 echo '!!!' This script needs to run in a git archive. 1>&2 34 echo '!!!' Giving up. 1>&2 34 echo '!!!' Giving up. 1>&2 35 exit 1 35 exit 1 36 fi 36 fi 37 37 38 # Remember where we started so that we can get 38 # Remember where we started so that we can get back at the end. 39 curcommit="`git status | head -1 | awk '{ prin 39 curcommit="`git status | head -1 | awk '{ print $NF }'`" 40 40 41 nfail=0 41 nfail=0 42 ntry=0 42 ntry=0 43 resdir="tools/testing/selftests/rcutorture/res 43 resdir="tools/testing/selftests/rcutorture/res" 44 ds="`date +%Y.%m.%d-%H.%M.%S`-group" 44 ds="`date +%Y.%m.%d-%H.%M.%S`-group" 45 if ! test -e $resdir 45 if ! test -e $resdir 46 then 46 then 47 mkdir $resdir || : 47 mkdir $resdir || : 48 fi 48 fi 49 mkdir $resdir/$ds 49 mkdir $resdir/$ds 50 echo Results directory: $resdir/$ds 50 echo Results directory: $resdir/$ds 51 51 52 RCUTORTURE="`pwd`/tools/testing/selftests/rcut 52 RCUTORTURE="`pwd`/tools/testing/selftests/rcutorture"; export RCUTORTURE 53 PATH=${RCUTORTURE}/bin:$PATH; export PATH 53 PATH=${RCUTORTURE}/bin:$PATH; export PATH 54 . functions.sh 54 . functions.sh 55 echo Using all `identify_qemu_vcpus` CPUs. 55 echo Using all `identify_qemu_vcpus` CPUs. 56 56 57 # Each pass through this loop does one command 57 # Each pass through this loop does one command-line argument. 58 for gitbr in $@ 58 for gitbr in $@ 59 do 59 do 60 echo ' --- git branch ' $gitbr 60 echo ' --- git branch ' $gitbr 61 61 62 # Each pass through this loop tests on 62 # Each pass through this loop tests one commit. 63 for i in `git rev-list "$gitbr"` 63 for i in `git rev-list "$gitbr"` 64 do 64 do 65 ntry=`expr $ntry + 1` 65 ntry=`expr $ntry + 1` 66 idir=`awk -v ntry="$ntry" 'END 66 idir=`awk -v ntry="$ntry" 'END { printf "%04d", ntry; }' < /dev/null` 67 echo ' --- commit ' $i from br 67 echo ' --- commit ' $i from branch $gitbr 68 date 68 date 69 mkdir $resdir/$ds/$idir 69 mkdir $resdir/$ds/$idir 70 echo $gitbr > $resdir/$ds/$idi 70 echo $gitbr > $resdir/$ds/$idir/gitbr 71 echo $i >> $resdir/$ds/$idir/g 71 echo $i >> $resdir/$ds/$idir/gitbr 72 72 73 # Test the specified commit. 73 # Test the specified commit. 74 git checkout $i > $resdir/$ds/ 74 git checkout $i > $resdir/$ds/$idir/git-checkout.out 2>&1 75 echo git checkout return code: 75 echo git checkout return code: $? "(Commit $ntry: $i)" 76 kvm.sh --allcpus --duration 3 76 kvm.sh --allcpus --duration 3 --trust-make --datestamp "$ds/$idir" > $resdir/$ds/$idir/kvm.sh.out 2>&1 77 ret=$? 77 ret=$? 78 echo kvm.sh return code $ret f 78 echo kvm.sh return code $ret for commit $i from branch $gitbr 79 echo Run results: $resdir/$ds/ 79 echo Run results: $resdir/$ds/$idir 80 if test "$ret" -ne 0 80 if test "$ret" -ne 0 81 then 81 then 82 # Failure, so leave al 82 # Failure, so leave all evidence intact. 83 nfail=`expr $nfail + 1 83 nfail=`expr $nfail + 1` 84 else 84 else 85 # Success, so remove l 85 # Success, so remove large files to save about 1GB. 86 ( cd $resdir/$ds/$idir 86 ( cd $resdir/$ds/$idir/$rrd; rm -f */vmlinux */bzImage */System.map */Module.symvers ) 87 fi 87 fi 88 done 88 done 89 done 89 done 90 date 90 date 91 91 92 # Go back to the original commit. 92 # Go back to the original commit. 93 git checkout "$curcommit" 93 git checkout "$curcommit" 94 94 95 if test $nfail -ne 0 95 if test $nfail -ne 0 96 then 96 then 97 echo '!!! ' $nfail failures in $ntry ' 97 echo '!!! ' $nfail failures in $ntry 'runs!!!' 98 exit 1 98 exit 1 99 else 99 else 100 echo No failures in $ntry runs. 100 echo No failures in $ntry runs. 101 exit 0 101 exit 0 102 fi 102 fi
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.