Hyperthreading Efficiency Calculator
Estimate effective core count gained from SMT/Hyper-Threading given a workload gain factor.
Inputs
Typically 15-30% depending on workload
Effective Core Count
10.00
Logical Cores (2× physical)
16
Effective as % of Logical Cores
62.5%
Workload Note
Mixed workloads with some stalls (branch mispredicts, cache misses) typically see moderate HT gains (20-30%), the most common real-world range.
Step by step
Values used
Physical Cores = 8; Hyper-Threading Gain (%) = 25; Workload Type = Mixed workload (typical HT gain)
Effective core count
effective_cores = physical_cores × (1 + HT_gain%)
Effective Core Count
= 10.00
Logical Cores (2× physical)
= 16
Effective as % of Logical Cores
= 62.5
Workload Note
= Mixed workloads with some stalls (branch mispredicts, cache misses) typically see moderate HT gains (20-30%), the most common real-world range.
How it works
Hyper-Threading / SMT exposes two logical CPUs per physical core, but they share the core's execution units, caches and pipeline — so the OS-visible 'double the cores' from `nproc` overstates real throughput gain. The realistic effective core count models HT as a percentage boost over physical cores (not a full doubling), and that gain factor varies significantly by workload: heavily CPU-bound code with saturated execution units gains little from a sibling thread, while workloads with frequent stalls (cache misses, branch mispredicts, I/O waits) let the sibling thread productively fill otherwise-wasted cycles.
Formula
Effective core count
effective_cores = physical_cores × (1 + HT_gain%)
- P
- physical cores
- g
- HT gain fraction (typically 0.15-0.30)
Frequently Asked Questions
Why shouldn't I treat logical cores as equivalent to physical cores for capacity planning?
Because sibling logical CPUs on the same physical core share execution units, cache and memory bandwidth rather than doubling them — a benchmark showing 2 logical cores delivering 2× a single core's throughput is the exception, not the rule. Realistic HT gains of 15-30% mean 16 logical cores from 8 physical cores behave closer to 9.2-10.4 'effective' cores for most workloads.
Should I disable Hyper-Threading for better performance?
Rarely beneficial for throughput — HT almost always adds some net gain even for CPU-bound work, just a smaller one. It's occasionally disabled for security isolation (mitigating certain side-channel/speculative-execution vulnerabilities between sibling threads) or for latency-critical workloads where predictable single-thread performance matters more than aggregate throughput.
How do I identify which logical CPUs share a physical core?
`lscpu -e` lists each logical CPU with its CORE column, showing which logical CPUs are siblings on the same physical core — useful for CPU affinity decisions like avoiding pinning two unrelated latency-sensitive threads onto sibling logical CPUs of the same core.