I recently upgraded my ROG Xbox Ally x20 (RC74XA) with a 4 TB Kingston NV2 SSD ((SNV2S/4000G / Firmware: ELFK1N.1).
Everything worked perfectly while plugged in. But as soon as I disconnected the power supply, games started stuttering.
Every second or two, the game would freeze briefly. Sometimes even the audio stopped.
Plugging the power supply back in immediately fixed everything.
Finding the problem
Windows Task Manager revealed something interesting: SSD response times increased from a few milliseconds to several seconds when switching to battery power.
Initially, I suspected PCIe power management (ASPM). Disabling it made no difference.
The actual breakthrough came from investigating Windows’ NVMe power management.
Windows NVMe power settings
Windows uses its built-in StorNVMe driver to manage NVMe power states. Two settings determine which idle states the driver may select based on their transition latencies:
| Setting | GUID |
|---|---|
| Primary NVMe latency tolerance | fc95af4d-40e7-4b6d-835a-56d131dbc80e |
| Secondary NVMe latency tolerance | dbc9e238-6de9-49e3-92cd-8c2b4946b472 |
These GUIDs (Globally Unique Identifiers) are official Microsoft identifiers for Windows power settings, not SSD-specific IDs. They are documented in Microsoft’s NVMe power management documentation.
The primary setting controls the first NVMe idle state (F1); the secondary applies to deeper states (F2 and beyond). Higher tolerances can permit deeper power-saving states.
On my Ally, the original configuration was:
| Setting | Plugged in | Battery |
|---|---|---|
| Primary | 15 ms | 50 ms |
| Secondary | 100 ms | 100 ms |
To inspect these values yourself, open an elevated Command Prompt:
powercfg /qh SCHEME_CURRENT SUB_DISK fc95af4d-40e7-4b6d-835a-56d131dbc80e
powercfg /qh SCHEME_CURRENT SUB_DISK dbc9e238-6de9-49e3-92cd-8c2b4946b472
SUB_DISK identifies the Windows disk power-settings group. SCHEME_CURRENT refers to the currently active power scheme. The GUID identifies the individual setting.
Finding the working values
After testing different combinations, I got these results:
| Primary | Secondary | Result |
|---|---|---|
| 50 ms | 100 ms | Massive latency spikes |
| 15 ms | 100 ms | Stuttering |
| 0 ms | 100 ms | Stuttering |
| 0 ms | 0 ms | Smooth |
| 15 ms | 0 ms | Smooth |
| 50 ms | 0 ms | Massive latency spikes |
15/0 ms completely eliminated the problem.
The exact cause remains unclear, but the results point towards an incompatibility involving certain NVMe low-power states.
The fix
Open Command Prompt as Administrator:
powercfg /setdcvalueindex SCHEME_CURRENT SUB_DISK fc95af4d-40e7-4b6d-835a-56d131dbc80e 15
powercfg /setdcvalueindex SCHEME_CURRENT SUB_DISK dbc9e238-6de9-49e3-92cd-8c2b4946b472 0
powercfg /setactive SCHEME_CURRENT
/setdcvalueindex changes the battery (DC) settings only. Plugged-in operation remains untouched.
I also tested PCIe ASPM at maximum power savings (2), which worked perfectly:
powercfg /setdcvalueindex SCHEME_CURRENT SUB_PCIEXPRESS ASPM 2
powercfg /setactive SCHEME_CURRENT
So there was no need to disable PCIe power saving.
One more catch: Armoury Crate
ASUS Armoury Crate manages several performance profiles. Switching between them initially brought the stuttering back.
The problem: SCHEME_CURRENT only modifies the active Windows power scheme.
I went through all four Armoury Crate modes available on my device—Windows, Silent, Turbo and Performance—and applied the 15/0 settings in each.
After that, the fix survived performance-mode changes and Windows reboots.
For future updates, this PowerShell script applies the working values to every currently registered Windows power scheme:
# Run as Administrator
$guidPattern = '[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}'
$active = [regex]::Match(
(powercfg /getactivescheme | Out-String),
$guidPattern
).Value
$schemes = @(
powercfg /list | ForEach-Object {
[regex]::Match($_, $guidPattern).Value
} | Where-Object { $_ } | Sort-Object -Unique
)
if (-not $active -or -not $schemes) {
throw "Could not identify Windows power schemes."
}
foreach ($scheme in $schemes) {
& powercfg /setdcvalueindex $scheme SUB_DISK fc95af4d-40e7-4b6d-835a-56d131dbc80e 15
if ($LASTEXITCODE -ne 0) { throw "Primary setting failed: $scheme" }
& powercfg /setdcvalueindex $scheme SUB_DISK dbc9e238-6de9-49e3-92cd-8c2b4946b472 0
if ($LASTEXITCODE -ne 0) { throw "Secondary setting failed: $scheme" }
& powercfg /setdcvalueindex $scheme SUB_PCIEXPRESS ASPM 2
if ($LASTEXITCODE -ne 0) { throw "ASPM setting failed: $scheme" }
}
& powercfg /setactive $active
if ($LASTEXITCODE -ne 0) { throw "Could not reactivate power scheme." }
Write-Host "Done."
The script changes battery settings only. Save your original values before running it. Future ASUS or Windows updates may require reapplying the fix.
My ROG Xbox Ally x20 now runs smoothly on battery power with:
- Primary NVMe latency tolerance: 15 ms
- Secondary NVMe latency tolerance: 0 ms
- PCIe ASPM: 2 (maximum power savings)
No more SSD latency spikes, gaming freezes or audio interruptions. Everything remains stable after switching performance modes and rebooting.
I haven’t measured the battery-life impact of the workaround. Comparing it with the original configuration wouldn’t be particularly useful anyway – the original was practically unusable.
Sometimes fixing a computer comes down to two obscure Windows settings.
Sources: Microsoft NVMe Power Management · Microsoft powercfg documentation · Kingston SSD Manager