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