BIOS/SMT Control

From HPCWIKI
Jump to navigation Jump to search

Simultaneous Multithreading

Simultaneous Multithreading (SMT) allows multiple execution threads to be executed on a single physical CPU core. The technology is known by a number of different names, such as Hyper-Threading, but operate along similar principles.

Intel provides an excellent overview for Hyper-Threading (HT), an implementation of SMT, and when it may or may not be helpful, depending on the application.

Verifying a Systems Hyper-Thread Topology

Each Hyper-Thread for a system will appear to the kernel as a logical CPU core

$ lscpu | grep -e Socket -e Core -e Thread
Thread(s) per core:                 2
Core(s) per socket:                 16
Socket(s):                          1
Model name:                         AMD EPYC 7282 16-Core Processor

Control SMT [1]

/sys/devices/system/cpu/smt/control:

     This file allows to read out the SMT control state and provides the ability to disable or (re)enable SMT. The possible states are:

/sys/devices/system/cpu/smt/active:

     This file reports whether SMT is enabled and active, i.e. if on any physical core two or more sibling threads are online.

States Description
on SMT is supported by the CPU and enabled. All logical CPUs can be onlined and offlined without restrictions
off SMT is supported by the CPU and disabled. Only the so called primary SMT threads can be onlined and offlined without restrictions. An attempt to online a non-primary sibling is rejected
forceoff Same as 'off' but the state cannot be controlled. Attempts to write to the control file are rejected
notsupported The processor does not support SMT. It's therefore not affected by the SMT implications of L1TF. Attempts to write to the control file are rejected
To disable SMT during runtime, the following can be used:
# echo off > /sys/devices/system/cpu/smt/control

To enable SMT during runtime, the following can be used:
# echo on > /sys/devices/system/cpu/smt/control

Alternatively, the following one-liner script can be used to disable one Hyper-Thread of each CPU core on the system

for CPU in $( ls /sys/devices/system/cpu/cpu[0-9]* -d | sort); do 
awk -F '[-,]' '{if(NF > 1) {HOTPLUG="/sys/devices/system/cpu/cpu"$NF"/online"; print "0" > HOTPLUG; close(HOTPLUG)}}' $CPU/topology/thread_siblings_list 2>/dev/null; done

AMD Simultaneous Multithreading (SMT)[2]

     Note Note:  This option is available on servers with AMD processors

Value    Description Notes
Enabled Each physical processor core operates as two logical processor cores. Enabling this option can improve overall performance for applications that benefit from a higher processor core count.
Disabled Each physical processor core operates as one logical processor core.

Typical BIOS menu path

Supermicro - CPU Configuration > SMT Control

References