The full picture
- Why SMT works at all: an OoO core stalls constantly on memory (the running theme of this track) — a second architectural register file + shared everything else lets another thread use those dead cycles. It monetizes stalls, so its benefit is proportional to how stall-y the workload is: memory-bound servers ~20–30%, dense AVX kernels ~0% or negative.
- The sizing corollary people miss: 'threads = availableProcessors' for CPU-bound work already includes SMT's optimism; JVM defaults (GC threads, FJ common pool) inherit it. For a latency-critical numeric service, benchmark at physical-core count — the p99 sometimes improves double digits just from halving the pool.
- Topology awareness beyond SMT: sibling threads share L1/L2; cores share L3 within a socket/CCX; sockets are NUMA nodes — pinning two collaborating threads to SMT siblings (shared L2, cheap communication) vs separate cores (full units each) are different optimizations for different sharing patterns.
lscpu -eshows the map. - Cloud print: a 'vCPU' is typically one SMT thread, not a core — capacity planning that treats 16 vCPUs as 16 cores over-promises by ~40%; and some latency-sensitive fleets (and security-sensitive multi-tenant hosts) buy SMT-off instance shapes deliberately.