diff --git a/disable-HT.sh b/disable-HT.sh index 4ad7150..d35caf7 100755 --- a/disable-HT.sh +++ b/disable-HT.sh @@ -1,15 +1,9 @@ #!/usr/bin/env bash if [ "$EUID" -ne 0 ]; then - echo "This script must be run as root" 1>&2 + echo "This script must be run as root" >&2 + echo "Try \"sudo ./disable-HT.sh\"" >&2 exit 1 fi -for cpu in /sys/devices/system/cpu/cpu[1-9]*; do - if [ -e "$cpu/topology/thread_siblings_list" ]; then - sibling=$(awk -F '[^0-9]' '{ print $2 }' $cpu/topology/thread_siblings_list) - if [ ! -z $sibling ]; then - echo 0 > "/sys/devices/system/cpu/cpu$sibling/online" - fi - fi -done +echo off > /sys/devices/system/cpu/smt/control diff --git a/enable-HT.sh b/enable-HT.sh index 437a780..a4465a4 100755 --- a/enable-HT.sh +++ b/enable-HT.sh @@ -1,10 +1,9 @@ #!/usr/bin/env bash if [ "$EUID" -ne 0 ]; then - echo "This script must be run as root" 1>&2 + echo "This script must be run as root" >&2 + echo "Try \"sudo ./enable-HT.sh\"" >&2 exit 1 fi -for cpu in /sys/devices/system/cpu/cpu[1-9]*; do - echo 1 > "$cpu/online" -done +echo on > /sys/devices/system/cpu/smt/control diff --git a/kernel-nanoBench.sh b/kernel-nanoBench.sh index 204380e..9ea1895 100755 --- a/kernel-nanoBench.sh +++ b/kernel-nanoBench.sh @@ -3,17 +3,21 @@ source utils.sh if [ "$EUID" -ne 0 ]; then - echo "Error: nanoBench requires root privileges" - echo "Try \"sudo ./kernel-nanoBench.sh ...\"" + echo "Error: nanoBench requires root privileges" >&2 + echo "Try \"sudo ./kernel-nanoBench.sh ...\"" >&2 exit 1 fi if [ ! -e /sys/nb ]; then - echo "Error: nanoBench kernel module not loaded" - echo "Load with \"sudo insmod kernel/nb.ko\"" + echo "Error: nanoBench kernel module not loaded" >&2 + echo "Load with \"sudo insmod kernel/nb.ko\"" >&2 exit 1 fi +if [ $(cat /sys/devices/system/cpu/smt/active) -ne 0 ]; then + echo "Note: Hyper-threading is enabled; it can be disabled with \"sudo ./disable-HT.sh\"" >&2 +fi + cat /sys/nb/reset taskset="" diff --git a/kernelNanoBench.py b/kernelNanoBench.py index a874143..37b861a 100755 --- a/kernelNanoBench.py +++ b/kernelNanoBench.py @@ -240,6 +240,9 @@ if os.geteuid() != 0: if not os.path.exists('/sys/nb'): sys.exit('Error: nanoBench kernel module not loaded\nLoad with "sudo insmod kernel/nb.ko"') +if readFile('/sys/devices/system/cpu/smt/active').startswith('1'): + print('Note: Hyper-threading is enabled; it can be disabled with "sudo ./disable-HT.sh"', file=sys.stderr) + prevNMIWatchdogState = readFile('/proc/sys/kernel/nmi_watchdog') writeFile('/proc/sys/kernel/nmi_watchdog', '0') diff --git a/nanoBench.sh b/nanoBench.sh index c8be5a7..cafbf4e 100755 --- a/nanoBench.sh +++ b/nanoBench.sh @@ -3,17 +3,21 @@ source utils.sh if [ "$EUID" -ne 0 ]; then - echo "Error: nanoBench requires root privileges" 1>&2 - echo "Try \"sudo ./nanoBench-asm.sh ...\"" 1>&2 + echo "Error: nanoBench requires root privileges" >&2 + echo "Try \"sudo ./nanoBench-asm.sh ...\"" >&2 exit 1 fi if ! command -v rdmsr &>/dev/null; then - echo "Error: nanoBench requires msr-tools" - echo "Install with \"sudo apt install msr-tools\"" + echo "Error: nanoBench requires msr-tools" >&2 + echo "Install with \"sudo apt install msr-tools\"" >&2 exit 1 fi +if [ $(cat /sys/devices/system/cpu/smt/active) -ne 0 ]; then + echo "Note: Hyper-threading is enabled; it can be disabled with \"sudo ./disable-HT.sh\"" >&2 +fi + debug=false for p in "$@"; do if [[ "$p" == -de* ]]; then