smtCtrl/smt.sh

57 lines
1.2 KiB
Bash
Raw Permalink Normal View History

2019-05-24 04:17:46 -04:00
#!/bin/bash
## Copyright © 2018-2019 Bret Human
2020-11-15 04:30:38 -05:00
## https://cynop.me/
2019-05-24 04:17:46 -04:00
##
## Documentation at:
2020-11-15 04:30:38 -05:00
## https://mage.cynop.me/en/smtCtrl
## https://psi.cynop.me/Caffarius/smtCtrl
2019-05-24 04:17:46 -04:00
##
## For questions or comments write:
2020-11-15 04:30:38 -05:00
## info@cynop.me
2019-05-24 04:17:46 -04:00
#
# Try your best to control SMT on Ryzen CPUs (and maybe others?)
2019-05-24 04:17:46 -04:00
# Usage: ./smt.sh (enable|disable|status)
num_cores=`nproc --all`
2019-05-24 04:17:46 -04:00
num_procs=`nproc`
coreLoop() {
i="1"
while [ "${i}" -lt "${num_cores}" ]; do
echo "$1" > /sys/devices/system/cpu/cpu${i}/online
i=$[ $i + 2 ]
done
echo "Done."
return 0
}
2019-05-24 04:17:46 -04:00
disable() {
if [ "${num_procs}" -lt "${num_cores}" ]; then
echo "SMT has already been disabled!"
return 1
else
echo -n "Disabling SMT: "
coreLoop 0
fi
2019-05-24 04:17:46 -04:00
}
enable() {
if [ "${num_procs}" -eq "${num_cores}" ]; then
echo "SMT has already been enabled!"
return 1
else
echo -n "Enabling SMT: "
coreLoop 1
fi
2019-05-24 04:17:46 -04:00
}
status() {
cat /proc/cpuinfo |egrep "processor|physical id|core id" | sed 's/^processor/\nprocessor/g'
2019-05-24 04:17:46 -04:00
}
case "$1" in
disable) disable;;
enable) enable;;
status) status;;
*) echo " Usage: ./smt.sh (disable | enable | status)";;
esac