Core Utilization Calculator
Calculate per-core CPU utilization from mpstat metrics across a multi-core system.
About Core Utilization Calculator
Aggregate CPU utilization (as reported by `top`'s single %Cpu(s) line) can mask serious per-core imbalance — a system averaging 50% busy could be one core pegged at 100% while three sit idle, which behaves very differently for latency-sensitive single-threaded work than four cores evenly at 50%. Computing per-core utilization from busy/total tick ratios (as `mpstat -P ALL` reports) and comparing the spread between the busiest and idlest core reveals imbalance caused by IRQ concentration, poor thread/process CPU affinity, or single-threaded bottlenecks pinning one core while others go unused.
Formula
Per-core utilization and imbalance
core_util% = busy_ticks / total_ticks × 100; imbalance = max(core_util%) − min(core_util%)
- b_i
- busy ticks for core i
- T
- total ticks in the sample window
Worked example
With the default values below, Core Utilization Calculator returns Average Utilization Across Cores of 59.00%. Change any input above and every figure here is recalculated in your browser.
Inputs used
- Per-Core Busy Ticks (comma-separated)
- 8500, 9200, 3100, 2800
- Total Ticks per Core (sample window)minimum 1
- 10,000
Results
- Average Utilization Across Cores
- 59.00%
- Imbalance Spread (max − min)
- 64.00%
- Busiest Core Utilization
- 92.00%
- Idlest Core Utilization
- 28.00%
- Imbalance Assessment
- Significant imbalance — investigate single-threaded bottlenecks, IRQ concentration on specific cores, or missing NUMA/affinity tuning.
- Cores Analyzed
- 4
Step by step
- 1Values used
- 2Per-core utilization and imbalance
- 3Average Utilization Across Cores= 59.00
- 4Imbalance Spread (max − min)= 64.00
- 5Busiest Core Utilization= 92.00
- 6Idlest Core Utilization= 28.00
- 7Imbalance Assessment= Significant imbalance — investigate single-threaded bottlenecks, IRQ concentration on specific cores, or missing NUMA/affinity tuning.
- 8Cores Analyzed= 4
Assumptions and limits
- The result is derived only from the 2 inputs listed above. Anything not among them is not part of the calculation.
- In particular, this calculator does not take inflation, tax, fees or charges or compounding frequency into account.
- Figures are rounded for display to 2 decimal places, so totals built from several rounded parts can differ slightly from the unrounded arithmetic.
How these calculators are built and tested is described on the Methodology page. If a figure looks wrong, please report it.
Frequently Asked Questions
Why would one core be much busier than others on a multi-core system?
Common causes include a single-threaded application or bottleneck (which can only ever use one core at a time), interrupt handling concentrated on one core (check /proc/interrupts per-CPU columns), or CPU affinity pinning that inadvertently confines work to a subset of cores rather than letting the scheduler balance load.
How do I see per-core utilization live on Linux?
`mpstat -P ALL 1` prints per-core %usr/%sys/%iowait/%idle breakdowns every second, and `htop` (with per-core meters enabled in its display settings) gives a live visual bar per core — both make imbalance immediately visible without manual tick-counter math.
Does the Linux scheduler try to balance load across cores automatically?
Yes — CFS actively load-balances runnable tasks across cores (and across NUMA nodes, with awareness of topology), but it can't split a single thread across multiple cores, so genuinely single-threaded bottlenecks or explicit CPU affinity pinning can still produce lasting imbalance despite the scheduler's efforts.
