Is it possible to enable SMT?

I am unable to enable SMT on my fedora 32 install with kernel 5.8.18-200.fc32.x86_64. I have hyperthreading enabled in the bios. I have tried to turn off mitigations in the kernel with ‘mitigations=off’. However, the kernel still seems to disable smt. Does ‘mitigations=off’ actually work with this version of fedora?

Weird, normally it’s on by default. Have you tried disabling it on your own before? What does lscpu and cat /proc/cmdline output?
Maybe this list of ways to disable SMT will direct you towards a solution: https://access.redhat.com/solutions/rhel-smt

1 Like

I guess my problem isn’t that the kernel ignores mitigations=off, it’s just that it still disables SMT. The output for lscpu changes if I turn off mitigations (lower down in this message). I’m really just wanting to enable SMT. Here is the output that you requested with mitigations=off:

$ cat /proc/cmdline

BOOT_IMAGE=(hd1,gpt2)/vmlinuz-5.8.18-200.fc32.x86_64 root=/dev/mapper/fedora-root00 ro rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1 resume=/dev/mapper/fedora-swap00 rd.lvm.lv=fedora/root00 rd.lvm.lv=fedora/swap00 rhgb quiet acpi=off apm=off mitigations=off

$ lscpu

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   39 bits physical, 48 bits virtual
CPU(s):                          6
On-line CPU(s) list:             0-5
Thread(s) per core:              1
Core(s) per socket:              6
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           158
Model name:                      Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
Stepping:                        10
CPU MHz:                         800.073
CPU max MHz:                     4700.0000
CPU min MHz:                     800.0000
BogoMIPS:                        7399.70
Virtualization:                  VT-x
L1d cache:                       192 KiB
L1i cache:                       192 KiB
L2 cache:                        1.5 MiB
L3 cache:                        12 MiB
NUMA node0 CPU(s):               0-5
Vulnerability Itlb multihit:     KVM: Mitigation: VMX disabled
Vulnerability L1tf:              Mitigation; PTE Inversion; VMX vulnerable, SMT
                                 disabled
Vulnerability Mds:               Vulnerable; SMT disabled
Vulnerability Meltdown:          Vulnerable
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1:        Vulnerable: __user pointer sanitization and use
                                 rcopy barriers only; no swapgs barriers
Vulnerability Spectre v2:        Vulnerable, IBPB: disabled, STIBP: disabled
Vulnerability Srbds:             Vulnerable
Vulnerability Tsx async abort:   Vulnerable
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtr
                                 r pge mca cmov pat pse36 clflush dts acpi mmx f
                                 xsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rd
                                 tscp lm constant_tsc art arch_perfmon pebs bts
                                 rep_good nopl xtopology nonstop_tsc cpuid aperf
                                 mperf pni pclmulqdq dtes64 monitor ds_cpl vmx s
                                 mx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid s
                                 se4_1 sse4_2 x2apic movbe popcnt tsc_deadline_t
                                 imer aes xsave avx f16c rdrand lahf_lm abm 3dno
                                 wprefetch cpuid_fault epb invpcid_single ssbd i
                                 brs ibpb stibp tpr_shadow vnmi flexpriority ept
                                  vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2
                                 smep bmi2 erms invpcid rtm mpx rdseed adx smap
                                 clflushopt intel_pt xsaveopt xsavec xgetbv1 xsa
                                 ves dtherm ida arat pln pts hwp hwp_notify hwp_
                                 act_window hwp_epp md_clear flush_l1d

If I leave out the mitigations=off argument, I get this:

$lscpu

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   39 bits physical, 48 bits virtual
CPU(s):                          6
On-line CPU(s) list:             0-5
Thread(s) per core:              1
Core(s) per socket:              6
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           158
Model name:                      Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
Stepping:                        10
CPU MHz:                         799.997
CPU max MHz:                     4700.0000
CPU min MHz:                     800.0000
BogoMIPS:                        7399.70
Virtualization:                  VT-x
L1d cache:                       192 KiB
L1i cache:                       192 KiB
L2 cache:                        1.5 MiB
L3 cache:                        12 MiB
NUMA node0 CPU(s):               0-5
Vulnerability Itlb multihit:     KVM: Mitigation: VMX disabled
Vulnerability L1tf:              Mitigation; PTE Inversion; VMX conditional cach
                                 e flushes, SMT disabled
Vulnerability Mds:               Mitigation; Clear CPU buffers; SMT disabled
Vulnerability Meltdown:          Mitigation; PTI
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled v
                                 ia prctl and seccomp
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user
                                  pointer sanitization
Vulnerability Spectre v2:        Mitigation; Full generic retpoline, IBPB condit
                                 ional, IBRS_FW, RSB filling
Vulnerability Srbds:             Mitigation; Microcode
Vulnerability Tsx async abort:   Mitigation; Clear CPU buffers; SMT disabled
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtr
                                 r pge mca cmov pat pse36 clflush dts acpi mmx f
                                 xsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rd
                                 tscp lm constant_tsc art arch_perfmon pebs bts
                                 rep_good nopl xtopology nonstop_tsc cpuid aperf
                                 mperf pni pclmulqdq dtes64 monitor ds_cpl vmx s
                                 mx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid s
                                 se4_1 sse4_2 x2apic movbe popcnt tsc_deadline_t
                                 imer aes xsave avx f16c rdrand lahf_lm abm 3dno
                                 wprefetch cpuid_fault epb invpcid_single pti ss
                                 bd ibrs ibpb stibp tpr_shadow vnmi flexpriority
                                  ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle a
                                 vx2 smep bmi2 erms invpcid rtm mpx rdseed adx s
                                 map clflushopt intel_pt xsaveopt xsavec xgetbv1
                                  xsaves dtherm ida arat pln pts hwp hwp_notify
                                 hwp_act_window hwp_epp md_clear flush_l1d

In both cases, SMT is disabled. Also, here is the output from dmidecode, which seems to show that hyperthreading is enabled in the bios (Core count 6, Thread count 12):

Processor Information
        Socket Designation: LGA1151
        Type: Central Processor
        Family: Core i7
        Manufacturer: Intel(R) Corporation
        ID: EA 06 09 00 FF FB EB BF
        Signature: Type 0, Family 6, Model 158, Stepping 10
        Flags:
                FPU (Floating-point unit on-chip)
                VME (Virtual mode extension)
                DE (Debugging extension)
                PSE (Page size extension)
                TSC (Time stamp counter)
                MSR (Model specific registers)
                PAE (Physical address extension)
                MCE (Machine check exception)
                CX8 (CMPXCHG8 instruction supported)
                APIC (On-chip APIC hardware supported)
                SEP (Fast system call)
                MTRR (Memory type range registers)
                PGE (Page global enable)
                MCA (Machine check architecture)
                CMOV (Conditional move instruction supported)
                PAT (Page attribute table)
                PSE-36 (36-bit page size extension)
                CLFSH (CLFLUSH instruction supported)
                DS (Debug store)
                ACPI (ACPI supported)
                MMX (MMX technology supported)
                FXSR (FXSAVE and FXSTOR instructions supported)
                SSE (Streaming SIMD extensions)
                SSE2 (Streaming SIMD extensions 2)
                SS (Self-snoop)
                HTT (Multi-threading)
                TM (Thermal monitor supported)
                PBE (Pending break enabled)
        Version: Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
        Voltage: 1.1 V
        External Clock: 100 MHz
        Max Speed: 8300 MHz
        Current Speed: 4300 MHz
        Status: Populated, Enabled
        Upgrade: Socket LGA1151
        L1 Cache Handle: 0x0048
        L2 Cache Handle: 0x0049
        L3 Cache Handle: 0x004A
        Serial Number: To Be Filled By O.E.M.
        Asset Tag: To Be Filled By O.E.M.
        Part Number: To Be Filled By O.E.M.
        Core Count: 6
        Core Enabled: 6
        Thread Count: 12
        Characteristics:
                64-bit capable
                Multi-Core
                Hardware Thread
                Execute Protection
                Enhanced Virtualization
                Power/Performance Control

I’m trying to enable it, not disable.

I understand, I meant that using that article you can check whether any of listed options (don’t know if there are any other available) for disabling SMT is enabled.
Maybe dmesg | grep -ie SMT -e HT -e thread will show why kernel is disabling SMT.
What happens if you start a live system from USB stick?
Do you have any BIOS updates available?
Try smt=12 kernel parameter.

1 Like

I tried your suggestion for smt=12, with no change. I will see if there are bios updates.

I updated my bios with no change :frowning:
Not sure what else to try

This checks SMT status, enables it and checks again.

cat /sys/devices/system/cpu/smt/active
echo on > /sys/devices/system/cpu/smt/control
cat /sys/devices/system/cpu/smt/active

And how about live-booting Fedora or any other distro from usb drive, just to verify?

1 Like

I’ll try doing a live boot. I just need to make an image. Thanks for the suggestion. I’ll post the result

Live booting enables hyperthreading, and shows 12 processors.

The problem is that I had acpi=off. I had turned it off because I was getting sporadic server freezes, and acpi=off fixed the problem. I’ll have to either live with the freezes or live without the extra threads.

Maybe bios update fixed the ACPI issue. If not, it can always be further troubleshot and fixed, for example by tuning bios settings. Good luck!

1 Like