raspiblitz/home.admin/config.scripts/blitz.stresstest.sh

105 lines
3.3 KiB
Bash
Raw Normal View History

2019-04-10 00:43:25 +01:00
#!/bin/bash
2019-04-10 00:48:53 +01:00
2019-04-10 02:29:58 +01:00
# command info
if [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "run stress test to measure heat and voltage"
echo "blitz.stresstest.sh [?filenameForReport]"
exit 1
fi
2019-04-10 00:48:53 +01:00
# Based on https://github.com/bamarni/pi64/issues/4#issuecomment-292707581
# sysbench manual: http://imysql.com/wp-content/uploads/2014/10/sysbench-manual.pdf
2019-04-10 02:29:58 +01:00
# get parameter
filenameForReport=$1
2019-04-10 00:56:48 +01:00
# check if bechmarking tool is installed
2019-04-10 00:48:53 +01:00
sysbenchInstalled=$(sysbench --version 2>/dev/null | grep -c 'sysbench 0.')
if [ ${sysbenchInstalled} -eq 0 ];then
sudo apt install -y sysbench
fi
2019-04-10 00:56:48 +01:00
# do debug outputs to the STDERR - so that the STDOUT is just the results in the end
2019-04-10 15:08:10 +01:00
echo "RaspiBlitz Hardwaretest v0.1" >&2
2019-04-10 00:56:48 +01:00
echo "Starting sysbench to run for 60 seconds (--max-time=60 --cpu-max-prime=10000)" >&2
2019-04-10 00:48:53 +01:00
2019-04-10 02:03:29 +01:00
# result values
powerWARN=0
powerFAIL=0
2019-04-10 02:11:36 +01:00
powerMIN=9999999
2019-04-10 02:03:29 +01:00
tempWARN=0
tempFAIL=0
tempMAX=0
2019-04-10 00:56:48 +01:00
# starting bench mark
2019-04-10 02:03:29 +01:00
sysbench --max-time=60 --test=cpu --cpu-max-prime=10000 --num-threads=4 run 1>/dev/null 2>&1 &
2019-04-10 00:48:53 +01:00
2019-04-10 00:56:48 +01:00
# keep monitoring in the background
2019-04-10 00:43:25 +01:00
Maxfreq=$(( $(awk '{printf ("%0.0f",$1/1000); }' </sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq) -15 ))
2019-04-10 02:03:29 +01:00
for (( n=0; n<15; ++n )); do
2019-04-10 01:08:47 +01:00
# make measurements
2019-04-10 00:48:53 +01:00
Temp=$(sudo vcgencmd measure_temp | cut -f2 -d=)
RealClockspeed=$(sudo vcgencmd measure_clock arm | awk -F"=" '{printf ("%0.0f",$2/1000000); }' )
2019-04-10 00:43:25 +01:00
SysFSClockspeed=$(awk '{printf ("%0.0f",$1/1000); }' </sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)
2019-04-10 00:48:53 +01:00
CoreVoltage=$(sudo vcgencmd measure_volts | cut -f2 -d= | sed 's/000//')
2019-04-10 01:08:47 +01:00
# debug output
2019-04-10 00:43:25 +01:00
if [ ${RealClockspeed} -ge ${Maxfreq} ]; then
2019-04-10 03:07:14 +01:00
echo "${Temp}$(printf "%5s" ${SysFSClockspeed}) MHz ${CoreVoltage}" >&2
2019-04-10 00:43:25 +01:00
else
2019-04-10 03:07:14 +01:00
echo "${Temp}$(printf "%5s" ${RealClockspeed})/$(printf "%4s" ${SysFSClockspeed}) MHz ${CoreVoltage}" >&2
2019-04-10 00:48:53 +01:00
fi
2019-04-10 01:08:47 +01:00
2019-04-10 01:24:51 +01:00
# analyse Voltage
2019-04-10 02:03:29 +01:00
voltFloat=$(echo "${CoreVoltage/V/}*1000000" | bc)
2019-04-10 01:24:51 +01:00
voltInt=${voltFloat/.*}
2019-04-10 01:35:11 +01:00
#echo "V -> ${voltFloat}/${voltInt}"
2019-04-11 05:24:00 +01:00
if [ ${voltInt} -lt 1200100 ] && [ ${powerWARN} -gt 1 ]; then
2019-04-11 05:24:50 +01:00
((powerFAIL=powerFAIL+1))
2019-05-01 12:11:59 +02:00
echo "--> Power CRITICAL detected" >&2
2019-04-10 02:03:29 +01:00
fi
if [ ${voltInt} -lt 1250000 ]; then
2019-04-11 05:24:50 +01:00
((powerWARN=powerWARN+1))
2019-04-10 16:13:13 +01:00
echo "--> Power WARN detected" >&2
2019-04-10 02:03:29 +01:00
fi
if [ ${voltInt} -lt ${powerMIN} ]; then
powerMIN=${voltInt}
2019-04-10 01:24:51 +01:00
fi
# analyse Temp
2019-04-10 01:32:44 +01:00
tempFloat=$(echo "${Temp/\'C/}*100" | bc)
tempInt=${tempFloat/.*}
2019-04-10 01:35:11 +01:00
#echo "T -> ${tempFloat}/${tempInt}"
if [ ${tempInt} -gt 6999 ]; then
2019-04-11 05:24:50 +01:00
((tempFAIL=tempFAIL+1))
2019-05-01 12:11:59 +02:00
echo "--> Temp CRITICAL detected" >&2
2019-04-10 02:03:29 +01:00
fi
if [ ${tempInt} -gt 6500 ]; then
2019-04-11 05:24:50 +01:00
((tempWARN=tempWARN+1))
2019-04-10 16:13:13 +01:00
echo "--> Temp WARN detected" >&2
2019-04-10 02:03:29 +01:00
fi
if [ ${tempInt} -gt ${tempMAX} ]; then
tempMAX=${tempInt}
2019-04-10 01:32:44 +01:00
fi
2019-04-10 01:08:47 +01:00
2019-04-10 00:43:25 +01:00
sleep 5
2019-04-10 02:03:29 +01:00
done
2019-04-10 02:29:58 +01:00
if [ ${#filenameForReport} -eq 0 ]; then
echo "powerFAIL=${powerFAIL}"
echo "powerWARN=${powerWARN}"
echo "powerMIN='${powerMIN} microVolt'"
echo "tempFAIL=${tempFAIL}"
echo "tempWARN=${tempWARN}"
echo "tempMAX='${tempMAX} centiGrad'"
else
echo "powerFAIL=${powerFAIL}" >${filenameForReport}
echo "powerWARN=${powerWARN}" >>${filenameForReport}
echo "powerMIN='${powerMIN} microVolt'" >>${filenameForReport}
echo "tempFAIL=${tempFAIL}" >>${filenameForReport}
echo "tempWARN=${tempWARN}" >>${filenameForReport}
echo "tempMAX='${tempMAX} centiGrad'" >>${filenameForReport}
2019-04-10 16:07:31 +01:00
sudo chmod 744 ${filenameForReport}
2019-04-10 02:29:58 +01:00
fi