57 líneas
1.2 KiB
Bash
57 líneas
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 |