David Christensen wrote:
For a CPU with N cores (N=4 for an AMD Ryzen 3 3200G?) and
an otherwise unloaded system, your test procedure should be
something like:
loop over governor choices
set governor
loop 3 times
sleep 60 seconds
print statistics
endloop
loop from 1 to N
start background process
loop 10 times
sleep 6 seconds
print statistics
endloop
endloop
kill all background processes
endloop
"print statistics" should include time, governor setting,
number of background processes running, and CPU temperature.
If would be nice to also include system loading percent, CPU
frequency, and CPU fan speed.
Okay, what about
#! /bin/zsh
#
# this file:
# https://dataswamp.org/~incal/conf/.zsh/cpu
cpu-stats () {
local time=$(date +%s)
local gov=$(cpufreq-info -p | awk '{print $3}')
local back=$(jobs -l | wc -l)
local temp=$(sensors -j | jq -a '.["k10temp-pci-00c3"].Tdie.temp1_input')
local cores=$(getconf _NPROCESSORS_ONLN)
local avg=$(awk '{print $1}' /proc/loadavg)
local load=$(( $avg * 100/$cores ))
local freq=("${(@f)$(awk '/cpu MHz/{print $4}' /proc/cpuinfo)}")
local fan=$(sensors | awk '/cpu_fan/{print $2 " RPM"}')
echo "time ${time}"
echo "governor ${gov}"
echo "background processes ${back}"
echo "CPU temperature ${temp}C"
printf "system load %.1f%%\n" $load
echo "CPU fan speed ${fan}"
echo -n "CPU frequencies "
for f in $freq; do
echo -n "$f "
done
echo "MHz"
}
test-cpu () {
local cores=$(getconf _NPROCESSORS_ONLN)
local pids=()
local g
for g in $(cpufreq-info -g); do
sudo cpufreq-set -g $g
repeat 3 {
sleep 60
cpu-stats
}
repeat $cores {
perl -e '1 while 1' &
pids+=($!)
repeat 10 {
sleep 6
cpu-stats
}
}
done
for p in $pids; do
kill $p
done
}