cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

with_stress.sh (1722B)


      1#!/bin/bash
      2# SPDX-License-Identifier: GPL-2.0
      3
      4# Kselftest framework requirement - SKIP code is 4.
      5ksft_skip=4
      6
      7stress_fork()
      8{
      9	while true ; do
     10		/usr/bin/true
     11		sleep 0.01
     12	done
     13}
     14
     15stress_subsys()
     16{
     17	local verb=+
     18	while true ; do
     19		echo $verb$subsys_ctrl >$sysfs/cgroup.subtree_control
     20		[ $verb = "+" ] && verb=- || verb=+
     21		# incommensurable period with other stresses
     22		sleep 0.011
     23	done
     24}
     25
     26init_and_check()
     27{
     28	sysfs=`mount -t cgroup2 | head -1 | awk '{ print $3 }'`
     29	if [ ! -d "$sysfs" ]; then
     30		echo "Skipping: cgroup2 is not mounted" >&2
     31		exit $ksft_skip
     32	fi
     33
     34	if ! echo +$subsys_ctrl >$sysfs/cgroup.subtree_control ; then
     35		echo "Skipping: cannot enable $subsys_ctrl in $sysfs" >&2
     36		exit $ksft_skip
     37	fi
     38
     39	if ! echo -$subsys_ctrl >$sysfs/cgroup.subtree_control ; then
     40		echo "Skipping: cannot disable $subsys_ctrl in $sysfs" >&2
     41		exit $ksft_skip
     42	fi
     43}
     44
     45declare -a stresses
     46declare -a stress_pids
     47duration=5
     48rc=0
     49subsys_ctrl=cpuset
     50sysfs=
     51
     52while getopts c:d:hs: opt; do
     53	case $opt in
     54	c)
     55		subsys_ctrl=$OPTARG
     56		;;
     57	d)
     58		duration=$OPTARG
     59		;;
     60	h)
     61		echo "Usage $0 [ -s stress ] ... [ -d duration ] [-c controller] cmd args .."
     62		echo -e "\t default duration $duration seconds"
     63		echo -e "\t default controller $subsys_ctrl"
     64		exit
     65		;;
     66	s)
     67		func=stress_$OPTARG
     68		if [ "x$(type -t $func)" != "xfunction" ] ; then
     69			echo "Unknown stress $OPTARG"
     70			exit 1
     71		fi
     72		stresses+=($func)
     73		;;
     74	esac
     75done
     76shift $((OPTIND - 1))
     77
     78init_and_check
     79
     80for s in ${stresses[*]} ; do
     81	$s &
     82	stress_pids+=($!)
     83done
     84
     85
     86time=0
     87start=$(date +%s)
     88
     89while [ $time -lt $duration ] ; do
     90	$*
     91	rc=$?
     92	[ $rc -eq 0 ] || break
     93	time=$(($(date +%s) - $start))
     94done
     95
     96for pid in ${stress_pids[*]} ; do
     97	kill -SIGTERM $pid
     98	wait $pid
     99done
    100
    101exit $rc