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

qos_lib.sh (1918B)


      1# SPDX-License-Identifier: GPL-2.0
      2
      3check_rate()
      4{
      5	local rate=$1; shift
      6	local min=$1; shift
      7	local what=$1; shift
      8
      9	if ((rate > min)); then
     10		return 0
     11	fi
     12
     13	echo "$what $(humanize $ir) < $(humanize $min)" > /dev/stderr
     14	return 1
     15}
     16
     17measure_rate()
     18{
     19	local sw_in=$1; shift   # Where the traffic ingresses the switch
     20	local host_in=$1; shift # Where it ingresses another host
     21	local counter=$1; shift # Counter to use for measurement
     22	local what=$1; shift
     23
     24	local interval=10
     25	local i
     26	local ret=0
     27
     28	# Dips in performance might cause momentary ingress rate to drop below
     29	# 1Gbps. That wouldn't saturate egress and MC would thus get through,
     30	# seemingly winning bandwidth on account of UC. Demand at least 2Gbps
     31	# average ingress rate to somewhat mitigate this.
     32	local min_ingress=2147483648
     33
     34	for i in {5..0}; do
     35		local t0=$(ethtool_stats_get $host_in $counter)
     36		local u0=$(ethtool_stats_get $sw_in $counter)
     37		sleep $interval
     38		local t1=$(ethtool_stats_get $host_in $counter)
     39		local u1=$(ethtool_stats_get $sw_in $counter)
     40
     41		local ir=$(rate $u0 $u1 $interval)
     42		local er=$(rate $t0 $t1 $interval)
     43
     44		if check_rate $ir $min_ingress "$what ingress rate"; then
     45			break
     46		fi
     47
     48		# Fail the test if we can't get the throughput.
     49		if ((i == 0)); then
     50			ret=1
     51		fi
     52	done
     53
     54	echo $ir $er
     55	return $ret
     56}
     57
     58bail_on_lldpad()
     59{
     60	if systemctl is-active --quiet lldpad; then
     61
     62		cat >/dev/stderr <<-EOF
     63		WARNING: lldpad is running
     64
     65			lldpad will likely configure DCB, and this test will
     66			configure Qdiscs. mlxsw does not support both at the
     67			same time, one of them is arbitrarily going to overwrite
     68			the other. That will cause spurious failures (or,
     69			unlikely, passes) of this test.
     70		EOF
     71
     72		if [[ -z $ALLOW_LLDPAD ]]; then
     73			cat >/dev/stderr <<-EOF
     74
     75				If you want to run the test anyway, please set
     76				an environment variable ALLOW_LLDPAD to a
     77				non-empty string.
     78			EOF
     79			exit 1
     80		else
     81			return
     82		fi
     83	fi
     84}