xref: /openbmc/linux/tools/testing/selftests/rcutorture/bin/kvm-test-1-run-batch.sh (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
17cf86c0bSPaul E. McKenney#!/bin/bash
27cf86c0bSPaul E. McKenney# SPDX-License-Identifier: GPL-2.0+
37cf86c0bSPaul E. McKenney#
47cf86c0bSPaul E. McKenney# Carry out a kvm-based run for the specified batch of scenarios, which
57cf86c0bSPaul E. McKenney# might have been built by --build-only kvm.sh run.
67cf86c0bSPaul E. McKenney#
77cf86c0bSPaul E. McKenney# Usage: kvm-test-1-run-batch.sh SCENARIO [ SCENARIO ... ]
87cf86c0bSPaul E. McKenney#
97cf86c0bSPaul E. McKenney# Each SCENARIO is the name of a directory in the current directory
107cf86c0bSPaul E. McKenney#	containing a ready-to-run qemu-cmd file.
117cf86c0bSPaul E. McKenney#
127cf86c0bSPaul E. McKenney# Copyright (C) 2021 Facebook, Inc.
137cf86c0bSPaul E. McKenney#
147cf86c0bSPaul E. McKenney# Authors: Paul E. McKenney <paulmck@kernel.org>
157cf86c0bSPaul E. McKenney
16*c211ae9cSPaul E. McKenneyT="`mktemp -d ${TMPDIR-/tmp}/kvm-test-1-run-batch.sh.XXXXXX`"
177cf86c0bSPaul E. McKenneytrap 'rm -rf $T' 0
187cf86c0bSPaul E. McKenney
197cf86c0bSPaul E. McKenneyecho ---- Running batch $*
207cf86c0bSPaul E. McKenney# Check arguments
217cf86c0bSPaul E. McKenneyrunfiles=
227cf86c0bSPaul E. McKenneyfor i in "$@"
237cf86c0bSPaul E. McKenneydo
247cf86c0bSPaul E. McKenney	if ! echo $i | grep -q '^[^/.a-z]\+\(\.[0-9]\+\)\?$'
257cf86c0bSPaul E. McKenney	then
267cf86c0bSPaul E. McKenney		echo Bad scenario name: \"$i\" 1>&2
277cf86c0bSPaul E. McKenney		exit 1
287cf86c0bSPaul E. McKenney	fi
297cf86c0bSPaul E. McKenney	if ! test -d "$i"
307cf86c0bSPaul E. McKenney	then
317cf86c0bSPaul E. McKenney		echo Scenario name not a directory: \"$i\" 1>&2
327cf86c0bSPaul E. McKenney		exit 2
337cf86c0bSPaul E. McKenney	fi
347cf86c0bSPaul E. McKenney	if ! test -f "$i/qemu-cmd"
357cf86c0bSPaul E. McKenney	then
367cf86c0bSPaul E. McKenney		echo Scenario lacks a command file: \"$i/qemu-cmd\" 1>&2
377cf86c0bSPaul E. McKenney		exit 3
387cf86c0bSPaul E. McKenney	fi
397cf86c0bSPaul E. McKenney	rm -f $i/build.*
407cf86c0bSPaul E. McKenney	touch $i/build.run
417cf86c0bSPaul E. McKenney	runfiles="$runfiles $i/build.run"
427cf86c0bSPaul E. McKenneydone
437cf86c0bSPaul E. McKenney
447cf86c0bSPaul E. McKenney# Extract settings from the qemu-cmd file.
457cf86c0bSPaul E. McKenneygrep '^#' $1/qemu-cmd | sed -e 's/^# //' > $T/qemu-cmd-settings
467cf86c0bSPaul E. McKenney. $T/qemu-cmd-settings
477cf86c0bSPaul E. McKenney
487cf86c0bSPaul E. McKenney# Start up jitter, start each scenario, wait, end jitter.
497cf86c0bSPaul E. McKenneyecho ---- System running test: `uname -a`
507cf86c0bSPaul E. McKenneyecho ---- Starting kernels. `date` | tee -a log
517cf86c0bSPaul E. McKenney$TORTURE_JITTER_START
52a5202e17SPaul E. McKenneykvm-assign-cpus.sh /sys/devices/system/node > $T/cpuarray.awk
537cf86c0bSPaul E. McKenneyfor i in "$@"
547cf86c0bSPaul E. McKenneydo
557cf86c0bSPaul E. McKenney	echo ---- System running test: `uname -a` > $i/kvm-test-1-run-qemu.sh.out
567cf86c0bSPaul E. McKenney	echo > $i/kvm-test-1-run-qemu.sh.out
57cdeef67dSPaul E. McKenney	export TORTURE_AFFINITY=
58a5202e17SPaul E. McKenney	kvm-get-cpus-script.sh $T/cpuarray.awk $T/cpubatches.awk $T/cpustate
59a5202e17SPaul E. McKenney	cat << '	___EOF___' >> $T/cpubatches.awk
60a5202e17SPaul E. McKenney	END {
61a5202e17SPaul E. McKenney		affinitylist = "";
62a5202e17SPaul E. McKenney		if (!gotcpus()) {
63a5202e17SPaul E. McKenney			print "echo No CPU-affinity information, so no taskset command.";
64a5202e17SPaul E. McKenney		} else if (cpu_count !~ /^[0-9][0-9]*$/) {
65a5202e17SPaul E. McKenney			print "echo " scenario ": Bogus number of CPUs (old qemu-cmd?), so no taskset command.";
66a5202e17SPaul E. McKenney		} else {
67a5202e17SPaul E. McKenney			affinitylist = nextcpus(cpu_count);
68a5202e17SPaul E. McKenney			if (!(affinitylist ~ /^[0-9,-][0-9,-]*$/))
69a5202e17SPaul E. McKenney				print "echo " scenario ": Bogus CPU-affinity information, so no taskset command.";
70a5202e17SPaul E. McKenney			else if (!dumpcpustate())
71a5202e17SPaul E. McKenney				print "echo " scenario ": Could not dump state, so no taskset command.";
72a5202e17SPaul E. McKenney			else
73a5202e17SPaul E. McKenney				print "export TORTURE_AFFINITY=" affinitylist;
74a5202e17SPaul E. McKenney		}
75a5202e17SPaul E. McKenney	}
76a5202e17SPaul E. McKenney	___EOF___
77a5202e17SPaul E. McKenney	cpu_count="`grep '# TORTURE_CPU_COUNT=' $i/qemu-cmd | sed -e 's/^.*=//'`"
78a5202e17SPaul E. McKenney	affinity_export="`awk -f $T/cpubatches.awk -v cpu_count="$cpu_count" -v scenario=$i < /dev/null`"
79a5202e17SPaul E. McKenney	$affinity_export
807cf86c0bSPaul E. McKenney	kvm-test-1-run-qemu.sh $i >> $i/kvm-test-1-run-qemu.sh.out 2>&1 &
817cf86c0bSPaul E. McKenneydone
827cf86c0bSPaul E. McKenneyfor i in $runfiles
837cf86c0bSPaul E. McKenneydo
847cf86c0bSPaul E. McKenney	while ls $i > /dev/null 2>&1
857cf86c0bSPaul E. McKenney	do
867cf86c0bSPaul E. McKenney		:
877cf86c0bSPaul E. McKenney	done
887cf86c0bSPaul E. McKenneydone
897cf86c0bSPaul E. McKenneyecho ---- All kernel runs complete. `date` | tee -a log
907cf86c0bSPaul E. McKenney$TORTURE_JITTER_STOP
91