Fix VirtualBox P-Core E-Core Performance Drop

# Fix VirtualBox P-Core E-Core Performance Drop on Intel Hybrid CPUs

If you recently upgraded to an Intel 12th-generation (or newer) processor and noticed your VirtualBox virtual machines running *slower* than before, you are not imagining things. A well-documented scheduling mismatch between Windows and VirtualBox can leave your VMs stranded on low-clock E-cores while the powerful P-cores sit nearly idle. This guide explains the root cause and walks through three practical fixes, complete with benchmark numbers from a real-world test bed.

## The Problem: Big Cores Idle, Little Cores Overloaded

Modern Intel Core processors — from 12th Gen Alder Lake onward — use a **hybrid architecture** with two types of cores:

– **P-cores (Performance cores):** High clock speeds, hyper-threading support, designed for heavy computational work.
– **E-cores (Efficient cores):** Lower clock speeds, optimized for energy efficiency and background tasks.

Under normal desktop usage, the Windows Thread Director routes workloads intelligently between the two core types. The trouble begins when you launch a VirtualBox VM with multiple vCPUs.

VirtualBox maps each virtual CPU to a host-side thread. The Windows scheduler is supposed to place these threads on P-cores for maximum throughput. In practice, especially under sustained load, the scheduler frequently **misroutes VM compute threads to E-cores** or bounces them rapidly between P-cores and E-cores.

The result is painful: your VM has access to powerful P-cores but gets stuck executing on E-cores running at far lower clock speeds. Performance losses can exceed **50%**, and the constant context-switching between core types produces noticeable stuttering — cursor trails, momentary freezes, and laggy input even when Task Manager reports total CPU usage under 30%.

## Benchmark Evidence: Before and After the Fix

To confirm this was not a fluke, the author ran `sysbench` CPU benchmarks inside an **Ubuntu 22.04 VM** on an **i5-13600KF** host (6 P-cores, 8 E-cores), with 4 cores allocated to the VM.

| Metric | Default (Cores Mixed) | Fixed (P-Cores Only) | Improvement |
|—|—|—|—|
| sysbench single-thread score | ~850 | 2,100+ | **+140%+** |
| Average event latency | 11.5 ms | 4.2 ms | **~63% reduction** |

On the default configuration, Task Manager showed nearly all VM load piled onto the E-cores. After pinning the VM to P-cores only, performance more than doubled.

## Fix 1: Identify Your CPU Core Topology

Before changing anything, you need to know which logical processor numbers correspond to P-cores and which to E-cores on your system.

**Method A — Command Prompt:**

Open CMD and run:

“`
wmic cpu get NumberOfCores,NumberOfLogicalProcessors
“`

This tells you the total core and thread count but not the P/E split directly.

**Method B — System Informer (recommended):**

Download **System Informer** (formerly Process Hacker), a free and open-source system monitoring tool. Its CPU tab visually displays each logical processor and its core type, making it easy to identify P-cores versus E-cores.

On the test i5-13600KF, logical processors **0–11** were P-cores (6 physical cores × 2 threads via hyper-threading) and **12–19** were E-cores (8 physical cores, single-threaded). Write down your own numbering — you will need it for the next steps.

## Fix 2: Pin Cores Manually via Task Manager (Temporary)

If you only need a quick fix for a single session, Task Manager can bind the VM process to specific cores:

1. Start your VirtualBox VM.
2. Press **Ctrl + Shift + Esc** to open Task Manager.
3. Switch to the **Details** tab.
4. Locate the **`VirtualBoxVM.exe`** process.
5. Right-click it and select **Set affinity**.
6. In the Processor Affinity window, **uncheck all E-core checkboxes** and keep only the P-cores selected.
7. Click **OK**.

You should feel the difference immediately — cursor movement becomes smooth and compile times drop sharply. The catch: this affinity resets every time you restart the VM.

## Fix 3: Permanent Isolation with Process Lasso (Recommended)

For a set-it-and-forget-it solution, use **Process Lasso**, a free process management utility that can persist CPU affinity rules across reboots.

1. Download and install Process Lasso.
2. Launch your VirtualBox VM.
3. In the Process Lasso main window, find **`VirtualBoxVM.exe`**.
4. Right-click the process → **CPU Affinity** → **Always**.
5. In the core list, **check only your P-cores** and uncheck every E-core.

From now on, whenever VirtualBox starts, Process Lasso will automatically restrict it to P-cores — no manual intervention required. Your VMs will always run at full P-core clock speeds without scheduler interference.

## Additional Optimization: VirtualBox Internal Settings

Beyond host-level core pinning, two VirtualBox settings are worth verifying for maximum performance:

– **Nested Paging:** Go to **VirtualBox Manager → Global Tools → Preferences (or Settings) → System** and confirm that **Enable Nested Paging** is checked. This allows the VM to use hardware-assisted paging (SLAT/EPT), significantly reducing virtualization overhead.
– **Execution Cap:** In the VM’s **Settings → System → Processor** tab, set the **Execution Cap to 100%**. This lets the VM consume the full capacity of the cores assigned to it rather than being throttled.

These two tweaks ensure the pinned P-cores are utilized to their fullest.

## When You Need to Share Cores: A Practical Trade-Off

Pinning all P-cores to VirtualBox is ideal when the VM is your primary workload. But if you simultaneously **game on the host** or run other demanding host applications, dedicating every P-core to the VM can cause frame drops and stutter on the host side.

A reasonable compromise used by the author:

– Reserve **2 P-cores** for the host OS, gaming, and daily desktop interaction.
– Assign the **remaining P-cores** to the VM.

This balanced allocation lets both the host and VM run smoothly without either side starving for performance. The exact split depends on your total core count and workload — experiment to find what works best for your hardware.

## Who This Affects Most

This fix is especially relevant for users who run **multiple VMs simultaneously** — for example, developers testing cross-border payment gateways, teams managing isolated browsing environments, or anyone running fingerprint-browser fleets and automation scripts under Windows. The default Windows scheduler simply does not yet handle heavy virtualization workloads on hybrid CPUs well, and manual core pinning remains the most effective free solution.

## Quick Summary

| Step | Action | Permanence |
|—|—|—|
| 1 | Identify P-core/E-core numbering with System Informer | One-time |
| 2 | Pin via Task Manager (Set Affinity) | Per-session |
| 3 | Pin via Process Lasso (CPU Affinity → Always) | Permanent |
| 4 | Enable Nested Paging + Execution Cap 100% in VirtualBox | Permanent |

*Technical details in this article reflect testing conducted on an Intel i5-13600KF running Windows with VirtualBox and an Ubuntu 22.04 guest VM. Results may vary depending on your specific CPU model, Windows version, VirtualBox release, and workload. Intel’s scheduler behavior and VirtualBox updates may change over time, so verify these settings against your current environment before relying on them for production workloads.*