1
0
Fork 0
smtCtrl/smt.sh

57 行
1.2 KiB
Bash

#!/bin/bash
## Copyright © 2018-2019 Bret Human
## https://cynop.me/
##
## Documentation at:
## https://mage.cynop.me/en/smtCtrl
## https://psi.cynop.me/Caffarius/smtCtrl
##
## For questions or comments write:
## info@cynop.me
#
# Try your best to control SMT on Ryzen CPUs (and maybe others?)
# Usage: ./smt.sh (enable|disable|status)
num_cores=`nproc --all`
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
}
disable() {
if [ "${num_procs}" -lt "${num_cores}" ]; then
echo "SMT has already been disabled!"
return 1
else
echo -n "Disabling SMT: "
coreLoop 0
fi
}
enable() {
if [ "${num_procs}" -eq "${num_cores}" ]; then
echo "SMT has already been enabled!"
return 1
else
echo -n "Enabling SMT: "
coreLoop 1
fi
}
status() {
cat /proc/cpuinfo |egrep "processor|physical id|core id" | sed 's/^processor/\nprocessor/g'
}
case "$1" in
disable) disable;;
enable) enable;;
status) status;;
*) echo " Usage: ./smt.sh (disable | enable | status)";;
esac