NVIDIA report: false THERMAL_PROTECTION from NvAPI_GPU_GetPerfDecreaseInfo

On my water cooled Asus Tuf OC RTX 4090, NvAPI_GPU_GetPerfDecreaseInfo returns THERMAL_PROTECTION around three times per second under load in-game, in bursts of 10 to 30 ms. To clarify, I have not personally applied an OC, the card came with one from ASUS. The GPU is at 40 to 50 °C, with no temperature reaching over 60C (even memory or hotspot via HWiNFO). The clock never drops, and NVML reports no thermal or power slowdown.

As far as I can tell this is a false report… but it has real-world consequences. World of Warcraft Forever polls this API and caps the game at 60 FPS when it sees the flag, see here for others experiencing this issue without fully understanding the cause:

Questions

  1. Is THERMAL_PROTECTION expected when no thermal clock reduction is active?
  2. Is this specific to this board, this VBIOS, or a water-cooled card with its fans disconnected?
  3. What should applications use to detect real thermal throttling?

In-Depth Analysis

System

GPU ASUS TUF RTX 4090 GAMING OC, VBIOS 95.02.18.00.36
Cooling Full-cover water block, stock fans disconnected
Driver 621.14 (also seen on earlier drivers and clean Windows installs)
OS Windows 11, build 26300
Platform Ryzen 9 9950X3D, MSI MAG X870E TOMAHAWK WIFI

Measurements (stock settings, under game load)

Source Result
NvAPI_GPU_GetPerfDecreaseInfo THERMAL_PROTECTION about 3 times per second, 10 to 30 ms each, set about 5% of the time
Graphics clock during bursts Unchanged at 2805 MHz
NVML clocks event reasons Only 0x400 (shown by nvidia-smi as “Reliability”)
nvidia-smi -q -d PERFORMANCE counters 0 µs for SW power cap, SW thermal, HW thermal and HW power brake
Temperatures Core 36 to 53 °C, hot spot 56 °C max, memory junction 44 °C max
Idle No bursts

Repro tool output (60 s in World of Warcraft at 120 Hz, stock settings):

nvapi-perfdecrease-repro
  time        2026-11-06 09:53:59
  GPU         NVIDIA GeForce RTX 4090  (physical GPUs: 1)
  driver      621.14   VBIOS 95.02.18.00.36
  OS          Microsoft Windows NT 10.0.26300.0
  clocks      base 2235 MHz, boost 2565 MHz (NVAPI)   P-state at start: P0

samples: 5152 over 60.0 s (mean interval 11.65 ms)
GPU load (NVML): avg 53 %, power avg 237 W, core temp (NVAPI) 36-38 C

NVAPI NvAPI_GPU_GetPerfDecreaseInfo values (share of samples):
  0x00000000 NONE                                      95.23 %
  0x00000001 THERMAL_PROTECTION                         4.77 %
NVML clocks-event reasons (share of samples):
  0x0000000000000400 Reliability(nvidia-smi)                  100.00 %

THERMAL_PROTECTION bursts: 225 (3.75 per second), set in 4.77 % of samples
  burst duration (upper bound, ms): min 1.1, median 15.5, max 32.1
  interval between bursts (ms): min 7, median 141, max 1708
  NVML reasons during bursts: Reliability(nvidia-smi) x246
  NVML graphics clock during bursts: 2820-2820 MHz   (whole run: 2820-2820 MHz)
  core temperature during bursts: 36-38 C
NVML thermal/power slowdown bits (SwPowerCap|HwSlowdown|SwThermal|HwThermal|HwPowerBrake) set in 0 of 5152 samples

RESULT: NVAPI reported THERMAL_PROTECTION while NVML reported no thermal/power slowdown and the graphics clock did not drop.

nvidia-smi -q -d PERFORMANCE after the test run: Reliability Active, all others Not Active, all slowdown counters 0 µs.

What changes the rate

Temperature, power and load do not. At 120 Hz the GPU did half the work at 100 W less and the rate was unchanged (5.7% vs 6.2%). What matters is how close the card runs to its stock top boost point:

Setting Clock and voltage THERMAL_PROTECTION
Stock 2820 MHz at 1.05 V 6.2%
−250 MHz offset 2550 MHz at 1.05 V 3.9%
−400 MHz offset 2415 MHz at 1.05 V 0.8%
V/F curve flattened at 950 mV 2550 MHz at 0.95 V 0.4%

Separately, a clock lock (nvidia-smi -lgc) or a flattened V/F curve makes the API report API_TRIGGERED all the time.

Impact

World of Warcraft: Forever calls this API every 300 seconds. If the flag is set, it caps the game at 60 FPS until a later check is clean. From its log:

21:15:20.205  Notify responders thermal state changed from Normal to Serious
21:15:20.205  Imposing FPS cap of 60 FPS
21:15:20.205  Periodic Gpu Status Report: ... Freq:2.81GHz Temp:51C GPU is throttled. Reason: NV_GPU_PERF_DECREASE_REASON_THERMAL_PROTECTION
21:20:20.210  Removing imposed FPS cap

This happens on about 6% of checks on my system. Other players report the same cap on many GeForce cards (see WoW thread above).

Repro

Poll these side by side every few ms while a game is running:

NvU32 perf;                 NvAPI_GPU_GetPerfDecreaseInfo(hGpu, &perf);              // bit 0x1 set in bursts
unsigned long long reasons; nvmlDeviceGetCurrentClocksEventReasons(dev, &reasons); // stays 0x400
unsigned int mhz;           nvmlDeviceGetClockInfo(dev, NVML_CLOCK_GRAPHICS, &mhz); // unchanged

Or run my tool while a game is running: nvapi-perfdecrease-repro.exe 60 samples.csv. It is read-only, samples every 2 ms and needs the .NET 10 runtime.
Source: GitHub - ninbura/nvapi-perfdecrease-repro: Repro: NvAPI_GPU_GetPerfDecreaseInfo reports THERMAL_PROTECTION while the GPU is not throttling · GitHub

Hello,

Welcome to the NVIDIA Developer forums. This community serves the developer ecosystem.

For consumer issues, please visit the GeForce forums.

Best regards!