#!/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