For those who want to understand WHY, not just HOW.
- What Are P-States?
- The NVIDIA Power Management Problem
- Detection Methods
- Unlock Techniques
- Verification & Monitoring
- Advanced Troubleshooting
- Platform-Specific Notes
P-States (Performance States) are NVIDIA's GPU power management system, similar to CPU C-states.
| P-State | Description | Typical Clock | Power | Use Case |
|---|---|---|---|---|
| P8 | Deep sleep | 210-450 MHz | 20-50W | Boot state, idle |
| P5 | Light sleep | 800-1200 MHz | 80-150W | Desktop, light work |
| P3 | Medium work | 1500-1800 MHz | 150-250W | Video playback, browsing |
| P2 | Active compute | 2400-2600 MHz | 300-400W | AI training (default) |
| P0 | Maximum performance | 2700-2790 MHz | 400-450W | Gaming (default) |
What users expect:
AI Training → GPU goes to P0/P2 → Full performance
What actually happens:
AI Training → GPU stays in P5/P8 → Throttled performance
→ But shows "high utilization" in nvidia-smi
→ Users think it's working at full speed
→ Actually running at 25-50% effective performance
NVIDIA driver has heuristics to determine workload priority:
High Priority (gets P0):
- 3D games (detected via DirectX/Vulkan/OpenGL API calls)
- Video rendering (Adobe Premiere, DaVinci Resolve)
- CUDA applications with specific API patterns
Low Priority (stays in P5/P8):
- PyTorch training (CUDA compute, but "background" pattern)
- TensorFlow (same issue)
- General CUDA compute
- Mining (intentionally throttled)
This is a jab at Jensen Huang (NVIDIA CEO), famous for his leather jacket.
The metaphor:
You: Pay $1600 for RTX 4090
Promise: "Ultimate AI training performance"
Reality: GPU throttled to 25-50% unless you know the unlock trick
Effect: Like buying a Ferrari but having handbrake engaged by default
Why NVIDIA does this:
- Protect GPUs from thermal damage (liability)
- Reduce RMA rates from overheating
- Differentiate consumer cards from datacenter (H100/A100)
- Encourage enterprise customers to buy expensive datacenter GPUs
The irony: Consumer cards are CAPABLE of full speed, but artificially limited by software.
Windows:
nvidia-smi -q -d PERFORMANCE | Select-String "Performance State"Linux:
nvidia-smi -q -d PERFORMANCE | grep "Performance State"Expected outputs:
P8= Deep sleep (BAD during training)P5= Light sleep (BAD during training)P2= Active compute (OK, but not maximum)P0= Maximum performance (IDEAL)
Real-time monitoring:
nvidia-smi dmon -s pucvmet -d 1What to look for:
# pwr: Power consumption (watts)
# gtemp: GPU temperature (celsius)
# sm: Streaming Multiprocessor utilization (%)
# mem: Memory utilization (%)
# enc: Encoder utilization (%)
# dec: Decoder utilization (%)
# mclk: Memory clock (MHz)
# pclk: Graphics/shader clock (MHz)
Example OUTPUT (throttled):
pwr gtemp sm mem enc dec mclk pclk
250 65 85 75 0 0 9501 1800 ← THROTTLED!
Example OUTPUT (unlocked):
pwr gtemp sm mem enc dec mclk pclk
425 72 95 85 0 0 9501 2790 ← FULL SPEED!
Key indicator: pclk (graphics clock) should be near 2700-2790 MHz during training.
Simple benchmark:
- Start training, note iteration time
- Apply P-state unlock
- Restart training, compare iteration time
Expected difference:
- Throttled: 45-60 sec/iteration
- Unlocked: 15-20 sec/iteration (depending on config)
What it does:
- Forces GPU to maintain performance clocks
- Prevents driver from entering low-power states
- Official NVIDIA tool, safe, stable
Commands:
# 1. Enable persistence mode (keeps driver loaded)
nvidia-smi -pm 1
# 2. Lock graphics clock (min=max=2790 means constant 2790 MHz)
nvidia-smi -lgc 2790,2790
# 3. Set power limit (adjust for your card)
nvidia-smi -pl 450Verify:
nvidia-smi -q -d CLOCK
nvidia-smi -q -d POWERPersistence:
- Settings reset on reboot
- Must re-apply after each restart
- Consider adding to startup script
WARNING: This is the method described in the Manifesto. It's more dramatic but less reliable than nvidia-smi lock.
Concept:
- Launch a game (Cyberpunk, etc.) to force GPU into P-0
- While game is running at peak, launch a batch script that:
- Locks clocks using nvidia-smi
- Briefly disables/enables driver
- Close game
- GPU maintains P-0 state thinking game is still running
Why this exists:
- Developed before discovering nvidia-smi lock method
- Works on systems where nvidia-smi doesn't have permission
- More complex, higher failure rate
Recommendation: Use nvidia-smi method unless you have specific reasons not to.
Alternative for users uncomfortable with command line:
- Download NVIDIA Profile Inspector
- Set "Power Management Mode" → "Prefer Maximum Performance"
- Set "CUDA - Force P2 State" → "On"
Effectiveness: Partial. Helps but doesn't guarantee P0 like nvidia-smi lock.
Monitor P-state:
# Check every second
while($true) {
nvidia-smi -q -d PERFORMANCE | Select-String "Performance State"
Start-Sleep -Seconds 1
}Monitor all metrics:
nvidia-smi dmon -s pucvmet -d 1✅ P-state: P0 or P2 (not P5/P8)
✅ pclk: 2700-2790 MHz (not 1800 or below)
✅ Power: 350-450W during compute (not 200-300W)
✅ Temperature: 65-75°C (higher than idle, shows work happening)
✅ Iteration time: 15-20 sec (not 45-60 sec)
Create monitoring log:
nvidia-smi dmon -s pucvmet -d 1 > training_monitor.logAnalyze after training:
# Find average clock speed
Get-Content training_monitor.log | Select-String "pclk" | Measure-Object -AverageSymptom: GPU returns to P5/P8 shortly after locking.
Causes:
- Background applications triggering power management
- Driver update reset settings
- Windows power plan interference
Solutions:
# 1. Set Windows power plan to High Performance
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
# 2. Disable Windows "USB selective suspend"
powercfg /change usb-selective-suspend-setting 0
# 3. Re-apply nvidia-smi lock AFTER starting training
# (Some training scripts reset GPU state on initialization)Symptom: GPU reaches 85-90°C (thermal throttling threshold).
Causes:
- Inadequate cooling for sustained 450W load
- Basement setup in Manifesto had unusually good cooling (18-20°C ambient)
- Normal room temp (22-25°C) requires better airflow
Solutions:
Option A: Reduce power limit
nvidia-smi -pl 400 # Instead of 450W
# Impact: ~5% speed reduction, ~10°C temperature reductionOption B: Improve cooling
- Open case side panel
- Add additional case fans
- Increase fan curve in MSI Afterburner:
60°C → 60% fan speed 70°C → 80% fan speed 75°C → 100% fan speed
Option C: Undervolt (advanced)
- Reduce voltage curve in MSI Afterburner
- Maintain 2700 MHz but at lower voltage
- Can reduce temps by 8-12°C with minimal performance impact
Symptom: Training crashes with CUDA errors after P-state unlock.
Possible causes:
- GPU instability at max clocks: Not all 4090s reach 2790 MHz stable
- Power supply insufficient: 450W GPU + 250W CPU = 700W, need 850W+ PSU
- VRAM instability: Overclocked memory causing errors
Solutions:
Step 1: Reduce clock target
nvidia-smi -lgc 2700,2700 # Instead of 2790Step 2: Check PSU capacity
# Monitor total system power draw
# Ensure PSU has 150W+ headroom above peak drawStep 3: Disable memory overclock
# If you had MSI Afterburner overclocks, remove them
# Test with stock clocks firstWindows:
Error: Insufficient permissions to modify GPU settings
Solution:
- Right-click PowerShell
- "Run as Administrator"
- Re-run nvidia-smi commands
Linux:
Error: NVML: Insufficient Permissions
Solution:
sudo nvidia-smi -pm 1
sudo nvidia-smi -lgc 2790,2790
sudo nvidia-smi -pl 450Known issues:
- Windows Update can reset nvidia-smi settings
- Game Bar overlay interferes with P-state detection
Solutions:
# Disable Game Bar
Set-ItemProperty -Path "HKCU:\Software\Microsoft\GameBar" -Name "ShowStartupPanel" -Value 0
# Pause Windows Update during training
# (Settings → Windows Update → Pause for 1 week)Generally more stable for P-state locking than Windows 11.
No specific issues reported.
Advantages:
- More reliable P-state persistence
- Better control over power management
- No Game Bar interference
Differences:
# Persistence mode (same as Windows)
sudo nvidia-smi -pm 1
# Lock clocks (same)
sudo nvidia-smi -lgc 2790,2790
# Power limit (same)
sudo nvidia-smi -pl 450
# But: Might need to disable system power management
sudo systemctl mask systemd-sleep.targetArch/Manjaro:
- May need to install
nvidia-utilspackage - Same commands as Ubuntu
Fedora/RHEL:
- NVIDIA drivers from RPM Fusion
- Consider using
nvidia-settingsGUI as alternative
The Core Problem:
- NVIDIA RTX 40-series GPUs throttle AI training by default
- P5/P8 states limit performance to 25-50% of capability
- Users don't notice because "utilization" appears high
The Solution:
- Force P0/P2 state using nvidia-smi lock
- Monitor to ensure lock persists during training
- Adjust power limit if thermal issues arise
The Result:
- 3-4x speedup on same hardware
- No cost, just knowledge
- "Unlocking" potential already paid for
Jensen's "leather jacket" keeping you slow?
Take it off. Run free. 🔥
For implementation details, see README.md
For the story, see MANIFESTO.md