148df92fb1
Currently, kvm-check-branches.sh causes each kvm.sh invocation create a separate date-stamped directory, then after that invocation completes, moves it into the *-group/NNNN directory. This works, but makes it more difficult to monitor an ongoing run. This commit therefore uses the kvm.sh --datestamp argument to make kvm.sh put the output in the right place to start with, and also dispenses with the additional level of datestamping. (Those wanting datestamps can find them in the log files.) Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
103 lines
3.2 KiB
Bash
Executable File
103 lines
3.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0+
|
|
#
|
|
# Run a group of kvm.sh tests on the specified commits. This currently
|
|
# unconditionally does three-minute runs on each scenario in CFLIST,
|
|
# taking advantage of all available CPUs and trusting the "make" utility.
|
|
# In the short term, adjustments can be made by editing this script and
|
|
# CFLIST. If some adjustments appear to have ongoing value, this script
|
|
# might grow some command-line arguments.
|
|
#
|
|
# Usage: kvm-check-branches.sh commit1 commit2..commit3 commit4 ...
|
|
#
|
|
# This script considers its arguments one at a time. If more elaborate
|
|
# specification of commits is needed, please use "git rev-list" to
|
|
# produce something that this simple script can understand. The reason
|
|
# for retaining the simplicity is that it allows the user to more easily
|
|
# see which commit came from which branch.
|
|
#
|
|
# This script creates a yyyy.mm.dd-hh.mm.ss-group entry in the "res"
|
|
# directory. The calls to kvm.sh create the usual entries, but this script
|
|
# moves them under the yyyy.mm.dd-hh.mm.ss-group entry, each in its own
|
|
# directory numbered in run order, that is, "0001", "0002", and so on.
|
|
# For successful runs, the large build artifacts are removed. Doing this
|
|
# reduces the disk space required by about two orders of magnitude for
|
|
# successful runs.
|
|
#
|
|
# Copyright (C) Facebook, 2020
|
|
#
|
|
# Authors: Paul E. McKenney <paulmck@kernel.org>
|
|
|
|
if ! git status > /dev/null 2>&1
|
|
then
|
|
echo '!!!' This script needs to run in a git archive. 1>&2
|
|
echo '!!!' Giving up. 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
# Remember where we started so that we can get back at the end.
|
|
curcommit="`git status | head -1 | awk '{ print $NF }'`"
|
|
|
|
nfail=0
|
|
ntry=0
|
|
resdir="tools/testing/selftests/rcutorture/res"
|
|
ds="`date +%Y.%m.%d-%H.%M.%S`-group"
|
|
if ! test -e $resdir
|
|
then
|
|
mkdir $resdir || :
|
|
fi
|
|
mkdir $resdir/$ds
|
|
echo Results directory: $resdir/$ds
|
|
|
|
RCUTORTURE="`pwd`/tools/testing/selftests/rcutorture"; export RCUTORTURE
|
|
PATH=${RCUTORTURE}/bin:$PATH; export PATH
|
|
. functions.sh
|
|
echo Using all `identify_qemu_vcpus` CPUs.
|
|
|
|
# Each pass through this loop does one command-line argument.
|
|
for gitbr in $@
|
|
do
|
|
echo ' --- git branch ' $gitbr
|
|
|
|
# Each pass through this loop tests one commit.
|
|
for i in `git rev-list "$gitbr"`
|
|
do
|
|
ntry=`expr $ntry + 1`
|
|
idir=`awk -v ntry="$ntry" 'END { printf "%04d", ntry; }' < /dev/null`
|
|
echo ' --- commit ' $i from branch $gitbr
|
|
date
|
|
mkdir $resdir/$ds/$idir
|
|
echo $gitbr > $resdir/$ds/$idir/gitbr
|
|
echo $i >> $resdir/$ds/$idir/gitbr
|
|
|
|
# Test the specified commit.
|
|
git checkout $i > $resdir/$ds/$idir/git-checkout.out 2>&1
|
|
echo git checkout return code: $? "(Commit $ntry: $i)"
|
|
kvm.sh --allcpus --duration 3 --trust-make --datestamp "$ds/$idir" > $resdir/$ds/$idir/kvm.sh.out 2>&1
|
|
ret=$?
|
|
echo kvm.sh return code $ret for commit $i from branch $gitbr
|
|
echo Run results: $resdir/$ds/$idir
|
|
if test "$ret" -ne 0
|
|
then
|
|
# Failure, so leave all evidence intact.
|
|
nfail=`expr $nfail + 1`
|
|
else
|
|
# Success, so remove large files to save about 1GB.
|
|
( cd $resdir/$ds/$idir/$rrd; rm -f */vmlinux */bzImage */System.map */Module.symvers )
|
|
fi
|
|
done
|
|
done
|
|
date
|
|
|
|
# Go back to the original commit.
|
|
git checkout "$curcommit"
|
|
|
|
if test $nfail -ne 0
|
|
then
|
|
echo '!!! ' $nfail failures in $ntry 'runs!!!'
|
|
exit 1
|
|
else
|
|
echo No failures in $ntry runs.
|
|
exit 0
|
|
fi
|