| 84 | NVML across a driver reset: nothing faults, and the app and a run go on | Elevated. A driver reset is made as a search makes one: `gao --set-mem 2800` (2700 when that resets at once), then `gao --stress 20`; each reset is one `nvlddmkm` event 14 in the System log. (a) A standalone probe, not part of the project: one process that calls `nvmlDeviceGetHandleByIndex_v2`, `nvmlDeviceGetClockInfo` (core and memory), `nvmlDeviceGetTemperature`, `nvmlDeviceGetPowerUsage`, `nvmlDeviceGetPowerManagementLimit` and `nvmlDeviceGetFanSpeed` every 100 ms, each under its own guard, with a second thread every second, and once in a loop without a pause; first as it is, then with the rule of this build. (b) This build's `GpuAutoOptimizer.exe --tray` with a saved tune, and three resets; watch the process, `boot.log` and `gao --status`, then open the window. (c) A Best of my GPU run that reaches a reset at the memory edge: a test build whose memory climb starts at +2750 MHz. (d) A Best of my GPU run of this build with nothing done to it | yes | (a) as it is: the readings fault after a reset; with the rule: none does, and the readings come back. (b) the same process goes on, `boot.log` has the watchdog's line for every reset and no line about a fault, the tune is applied again and the window shows readings. (c) the run says the driver was reset, reconnects, goes on and ends at its result. (d) the run ends at its result | Pass (2026-10-11, reference RTX 4070, driver 617.42, `nvml.dll` 8.17.16.1742). (a) As it is, 4 resets in 2 processes: from each process's first reset on, both clock calls, the temperature and the power usage faulted at every call until the process ended (1,319 and 1,177 times each), always a read of the same block of memory at `nvml.dll+0xf3ea0`; the power limit and the fan speed answered 999; the handle call went on answering 0; `nvmlShutdown` at the end did not return within 5 s. The faulting instruction reads memory the driver shares with the process, in a retry loop on a sequence number. With the power limit alone asked first: 3 resets at 100 ms, no fault, 3 new sessions; in the loop without a pause 1 fault in 2 resets (power limit 0, fan speed 999, then the readings faulted, all in one round). With both asked first: 4 resets in the loop without a pause, 800,000 rounds, no fault; the new session took between 15 ms and 8 s to start, and once longer than 8 s. The fan speed call sometimes answers 27 (not ready) for seconds before a reset; in the passes before this one the readings still worked then. In this last pass the probe read nothing in such a round either, which this build does not do: that happened before one of its four resets. A reset forced through `D3DKMT_ESCAPE_TDRDBGCTRL` is refused on this Windows (`0xC00000BB`), and these resets are not logged as Display 4101. (b) Three resets at +2800: the same process throughout; `boot.log` has `watchdog: the tune had been reset (driver reset or TDR); re-applied` three times and nothing else; `applied:` is the saved tune after each; the window afterwards shows 660 MHz, 5001 MHz, 35 C, 32 of 210 W and `0 % (driver)`; the app exits when asked. (c) The stock measurement and the baseline as in check 82; at 420 s the driver reset in the candidate at +2800 (journal: `DEVICE LOST`); the log: `mem: the driver reset at +2800; using +2750, the last value that passed`, `the driver was reset; reconnecting`, `resting 20 s before the card is loaded again`, `checking that the card is back: 5 s at stock`, `health: STABLE`; then +2550 confirmed, the core climbed to +195, and the run ended after 861 s with `best: power 105 %, core +135 MHz, mem +1750 MHz` saved and applied; nothing new in `boot.log`. This is the reset the run of 2026-10-10 22:23 ended on (check 81 (c)). The result was not kept: memory was not searched by bandwidth in this test build. A run of the same build that started at +2400 met no reset: +2600 was a wrong result, and so were the three confirm tries below it. (d) 926 s, no reset: `best: power 105 %, core +135 MHz, mem +650 MHz`, nothing new in `boot.log`. Not covered: another card or driver; a card that goes between the two calls and the readings, a matter of microseconds, after which the fault is caught as in check 80. During a reset the thread that starts the new session waits for the library, the window's thread as well; before this build a reading waited there as long. |
0 commit comments