Disable CPU Core Parking in Windows 11 for Better Performance
When Windows decides your CPU does not need all its cores right now, it does not just clock them down — it parks them entirely, removing them from the scheduler’s active core list. Parked cores cannot accept new threads until unparked, and unparking has a small but measurable latency cost. For games and real-time workloads that suddenly need every core available, this parking/unparking cycle introduces jitter. Disabling core parking keeps all cores ready, shaving off that unparking latency for the cost of marginally higher idle power draw.
What Is CPU Core Parking?
Core parking is a Windows power management feature introduced in Windows 7. The OS monitors CPU load and, when utilization is low, it parks idle cores — transitioning them into a deep C-state (C6 or C7) where they consume near-zero power. The parking decision is managed by the Processor Power Management (PPM) engine, which evaluates core load every 100–500 ms depending on your power plan.
The problem for gaming is timing. A game may idle a core for 50 ms during a loading screen, Windows parks it, then the game suddenly needs it for a physics calculation or streaming thread. The unpark latency is typically 1–5 ms — small on paper, but enough to create a visible frame time spike when it happens on a thread the game’s main loop is waiting on.
Core Parking vs. P-States
Core parking is different from P-state frequency scaling. A parked core is fully offline to the scheduler. A core running at a low P-state (e.g., 800 MHz instead of 5 GHz) is still available — it just runs slower. Both affect performance, but core parking is the more disruptive of the two for latency-sensitive workloads.
Checking Core Parking Status
Method 1: powercfg (Built-in)
# Run as Administrator
# This reports the current parking state of each logical processor
powercfg /energy /output "$env:TEMP\energy_report.html" /duration 5
Start-Process "$env:TEMP\energy_report.html"
Open the HTML report and search for “Processor Core Parking”. The report will show how many cores were parked during the 5-second observation window.
Method 2: Resource Monitor
- Open Resource Monitor (Win + R →
resmon). - Click the CPU tab.
- Look at the CPU graphs on the right side. Parked cores show as grayed out bars.
If you see gray bars on cores while your game is running, parking is actively affecting your workload.
Method 3: Registry Check
# Check current parking state per power scheme
$schemeGuid = (powercfg /getactivescheme) -replace ".*GUID: ([a-f0-9-]+).*", '$1'
Write-Host "Active scheme: $schemeGuid"
$parkPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\0cc5b647-c1df-4637-891a-dec35c318583"
Get-ItemProperty $parkPath | Select-Object -Property "ValueMin", "ValueMax"
A ValueMin of 0 means cores can be parked down to 0% minimum. A ValueMin of 100 means all cores must stay active.
Disabling Core Parking
Method 1: Via Registry (Recommended — Persistent)
This is the most reliable method. It sets the minimum core count to 100% (all cores active) for all power plans:
# Disable core parking for all power plans
$coreParkPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\0cc5b647-c1df-4637-891a-dec35c318583"
# Set minimum active processor count to 100% (no parking)
Set-ItemProperty -Path $coreParkPath -Name "ValueMin" -Value 100
Write-Host "Core parking disabled. Changes take effect immediately on next policy refresh."
Alternatively, using powercfg to set the value per scheme:
# Get current active power scheme GUID
$activeScheme = (powercfg /getactivescheme).Split()[3]
# Set minimum cores to 100% for AC (plugged in)
powercfg /setacvalueindex $activeScheme 54533251-82be-4824-96c1-47b60b740d00 0cc5b647-c1df-4637-891a-dec35c318583 100
# Apply changes
powercfg /setactive $activeScheme
Method 2: Using Process Lasso (GUI Option)
Process Lasso’s Power Plan Utility exposes core parking in a GUI. Under Options → Power → CPU Core Parking, slide the minimum to 100%. This writes the same registry values above but through a friendly interface.
Method 3: Custom Power Plan Without Parking
Create a clone of the High Performance plan and modify parking:
# Duplicate High Performance plan
$newScheme = powercfg /duplicatescheme 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
$newGuid = ($newScheme -split " ")[-1].Trim()
# Rename it
powercfg /changename $newGuid "Gaming - No Core Park"
# Disable core parking on this new plan
powercfg /setacvalueindex $newGuid 54533251-82be-4824-96c1-47b60b740d00 0cc5b647-c1df-4637-891a-dec35c318583 100
# Activate it
powercfg /setactive $newGuid
Write-Host "Gaming plan without core parking created and activated."
Intel Hybrid Architecture (P-cores and E-cores)
On Intel 12th gen and later processors (Alder Lake, Raptor Lake, Arrow Lake), core parking behavior applies separately to P-cores (Performance) and E-cores (Efficiency). The Windows scheduler on these CPUs uses the Thread Director mechanism to assign threads.
If you disable core parking on hybrid Intel CPUs, ensure E-cores stay parked if your game is single-threaded — having 8 E-cores stealing scheduler time from 2 active P-cores can hurt performance. Use Process Lasso or CPU affinity masks to enforce this:
# Example: Set affinity for a game process to P-cores only (first 6 logical cores on a 12th-gen i7)
# Do this while the game is running
$game = Get-Process -Name "game_executable"
$game.ProcessorAffinity = [IntPtr]0x3F # Binary 00111111 = cores 0-5
Performance Impact: Benchmarks
The impact of disabling core parking depends heavily on the workload:
| Scenario | Core Parking ON | Core Parking OFF | Delta |
|---|---|---|---|
| 1% low FPS (open world) | Baseline | +5–12% | High impact |
| Average FPS (competitive) | Baseline | +0–2% | Low impact |
| Application launch time | Baseline | 10–20% faster | High impact |
| Idle power draw | ~8W | ~12–15W | +4–7W |
The 1% low FPS improvement is the most meaningful gaming metric — these are the frames where you feel stutters.
Reverting the Change
If you notice unexpected behavior or want to restore defaults:
# Restore default minimum core parking value (0 = fully parked cores allowed)
$coreParkPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\0cc5b647-c1df-4637-891a-dec35c318583"
Set-ItemProperty -Path $coreParkPath -Name "ValueMin" -Value 0
# Switch back to Balanced plan
powercfg /setactive 381b4222-f694-41f0-9685-ff5bb260df2e
Summary
Core parking is a legitimate power saving feature on laptops and workstations that run mixed workloads. On a gaming desktop plugged into the wall, it serves no useful purpose and actively harms frame time consistency. Disabling it via the registry or powercfg is safe, reversible, and provides measurable improvements in scenarios where threads need to spin up quickly — which is exactly what games do constantly.