What happens when every core is busy?
I also wanted to see what happens when all five cores are already occupied and another CPU-intensive application arrives with exactly the same scheduling priority as the existing work.
I started five normal-priority OpenSSL SHA-256 workloads, waited five seconds for them to occupy the processor, and then launched a sixth identical workload. All six processes used SCHED_OTHER with a niceness of 0. I sampled their CPU placement every 0.2 seconds while the sixth workload ran.
Unlike the preceding foreground-versus-background test, the newcomer had no priority advantage. Linux therefore had no reason to give it preferential access to the sole P-core.
That is what I observed. Rather than assigning CPU 0 permanently to one process, Linux redistributed the six workloads across all five CPUs. Every existing worker was seen running on both the P-core and LP E-cores during the test, and the newcomer behaved in the same way.
| CPU used by newcomer | Samples | Share |
|---|---|---|
| CPU 0 – P-core | 46 | 15.9% |
| CPU 1 – LP E-core | 54 | 18.7% |
| CPU 2 – LP E-core | 43 | 14.9% |
| CPU 3 – LP E-core | 77 | 26.6% |
| CPU 4 – LP E-core | 69 | 23.9% |
The newcomer therefore spent around 16% of my sampled intervals on the P-core. It was not promoted onto CPU 0 simply because it arrived later, nor did any existing worker retain exclusive use of the faster core.
CPU time was also distributed reasonably evenly. The newcomer accumulated 51.77 seconds of CPU time during its nominal 60-second run. With six equally weighted CPU-bound processes sharing five cores, perfectly even sharing would provide around 50 seconds of CPU time to each process during that period.
| Workload | SHA-256 throughput |
|---|---|
| Existing worker 1 | 3,152,554.44 kB/s |
| Existing worker 2 | 3,092,177.44 kB/s |
| Existing worker 3 | 3,036,554.97 kB/s |
| Existing worker 4 | 3,173,534.95 kB/s |
| Existing worker 5 | 3,075,279.16 kB/s |
| Newcomer | 3,044,610.05 kB/s |
When all six applications had equal priority, the scheduler treated the P-core as a shared resource and moved workloads between the different core types rather than arbitrarily allowing one process to monopolise CPU 0.
What if I force the issue?
Linux’s automatic scheduling handled the Core 3 304’s unusual 1P+4E layout well in these tests, but there is always the option of taking control manually.
For this test I used taskset to pin one OpenSSL SHA-256 workload to CPU 0, while four additional OpenSSL workloads were pinned individually to CPUs 1-4.
This completely removed CPU placement from the scheduler’s control. Each process was restricted to a single CPU for the entire 60-second test.
The result was completely stable. Across all 290 scheduler samples, the P-core workload remained on CPU 0, while the other four workloads remained on their assigned LP E-cores. I recorded no migrations.
| Workload | CPU | SHA-256 throughput |
|---|---|---|
| P-core workload | CPU 0 – P-core | 3,748,649.96 kB/s |
| Background 1 | CPU 1 – LP E-core | 2,968,909.46 kB/s |
| Background 2 | CPU 2 – LP E-core | 2,968,807.63 kB/s |
| Background 3 | CPU 3 – LP E-core | 2,969,313.66 kB/s |
| Background 4 | CPU 4 – LP E-core | 2,969,506.29 kB/s |
The four LP E-cores averaged approximately 2,969,134 kB/s, while the P-core delivered 3,748,649.96 kB/s. For this OpenSSL workload, the P-core was around 26% faster.
The forced P-core workload achieved 3,748,649.96 kB/s. In the earlier foreground-versus-background test, Linux automatically placed the normal-priority workload on CPU 0 and it achieved 3,715,678.36 kB/s despite heavier contention. The two figures differ by less than 1%.
That does not suggest a meaningful advantage from manually managing affinity in normal use. taskset gives complete control when it is required, but the scheduler had already made the important placement decision correctly.
There is also a small package-wide performance effect visible here. With all five cores fully occupied, both the P-core and LP E-cores delivered slightly lower OpenSSL throughput than in the isolated-core tests.
Next page: Page 6 – Conclusions
Pages in this article:
Page 1 – Introduction and Core Layout
Page 2 – Single-Thread Scheduling and Core Performance
Page 3 – Foreground versus Background Work
Page 4 – Does Linux Keep the P-core in Reserve?
Page 5 – What Happens When Every Core Is Busy?
Page 6 – Conclusions
Complete list of articles in this series:
| Beelink EQi 304 Mini PC | |
|---|---|
| Introduction | Introduction to the series and interrogation of the machine |
| Benchmarks | Benchmarking the Beelink EQi 304 Mini PC |
| Power | Testing and comparing the power consumption |
| BIOS | The BIOS, which stands for Basic Input/Output System, plays a crucial role |
| Cores | P-core and LP Efficient-cores examined |
| Noise | How quiet is this mini PC? |
| NPU and Llama | Testing the NPU with Llama models |
| Scheduling | Can Linux use its one fast CPU core efficiently? |

Please read our Comment Policy before commenting.