Add GPU_FOREIGN_UTIL_PCT: game detection via per-process GPU 3D-engine usage
Reads the same PDH counters as Task Manager (\GPU Engine(*)\Utilization Percentage, locale-independent via PdhAddEnglishCounterW), which cover graphics work under WDDM — games are caught without an exe list and the offender is named. Windows-only; a missing or failing counter disables the path with one log line. dwm (the desktop compositor) joins the default ignore list.
This commit is contained in:
@@ -55,9 +55,9 @@ consumer gets no listener, no startup probe, and no lock participation:
|
||||
- **Only `COMFY_URL`**: image jobs are tracked and ComfyUI's VRAM is freed
|
||||
afterwards, but the Ollama unload and warm-reload steps are skipped.
|
||||
- **Game detection** is a third, optional consumer without a URL: enabled by
|
||||
`GAME_PROCS` and/or `GPU_FOREIGN_VRAM_MB` it watches for foreign processes
|
||||
holding the GPU (see below) and plugs into the same lock the same way —
|
||||
excluded when both knobs are unset.
|
||||
`GAME_PROCS`, `GPU_FOREIGN_VRAM_MB` and/or `GPU_FOREIGN_UTIL_PCT` it
|
||||
watches for foreign processes holding the GPU (see below) and plugs into
|
||||
the same lock the same way — excluded when all knobs are unset.
|
||||
|
||||
### Lock semantics
|
||||
|
||||
@@ -171,20 +171,26 @@ files are flagged in the startup log.
|
||||
## Game detection (foreign GPU holders)
|
||||
|
||||
Games and other foreign GPU users sit outside the URL-based consumer model —
|
||||
nothing proxies through gpu-turnstile for them. Two independent detection
|
||||
paths, polled every `GAME_POLL_INTERVAL` (default 15 s); either one being
|
||||
nothing proxies through gpu-turnstile for them. Three independent detection
|
||||
paths, polled every `GAME_POLL_INTERVAL` (default 15 s); any one being
|
||||
configured enables the feature:
|
||||
|
||||
- **Process watch list** (`GAME_PROCS`, comma-separated, case-insensitive,
|
||||
`.exe` optional): while any listed process runs, the GPU counts as held.
|
||||
This is the reliable path on Windows.
|
||||
- **Foreign 3D-engine utilization** (`GPU_FOREIGN_UTIL_PCT`, Windows only):
|
||||
per-process GPU engine counters from PDH — the same data Task Manager
|
||||
shows — cover graphics work under WDDM, so any process not in
|
||||
`GPU_IGNORE_PROCS` using more than the threshold percent of the 3D engine
|
||||
counts as a foreign holder, with no exe list needed. Values are summed per
|
||||
process across engines; a missing/failing PDH counter disables the path
|
||||
(logged once).
|
||||
- **Foreign VRAM threshold** (`GPU_FOREIGN_VRAM_MB`): `nvidia-smi
|
||||
--query-compute-apps` lists per-process GPU memory; any process not in
|
||||
`GPU_IGNORE_PROCS` (default: Ollama and python — ComfyUI runs under python)
|
||||
holding more than the threshold counts as a foreign holder. Needs
|
||||
nvidia-smi on the PATH (absent: logged once, path disabled) and works best
|
||||
on Linux — under Windows' WDDM driver, graphics-only games may not appear
|
||||
in the per-process list.
|
||||
`GPU_IGNORE_PROCS` (default: Ollama and python — ComfyUI runs under python
|
||||
— plus dwm, the desktop compositor) holding more than the threshold counts
|
||||
as a foreign holder. Needs nvidia-smi on the PATH (absent: logged once,
|
||||
path disabled) and works best on Linux — under Windows' WDDM driver,
|
||||
graphics-only games may not appear in the per-process list.
|
||||
|
||||
While a holder is detected, gpu-turnstile:
|
||||
|
||||
@@ -230,7 +236,8 @@ override file values. A missing file is fine; a malformed one is fatal.
|
||||
| `COMFY_START_TIMEOUT` | `2m` | how long a request waits for the managed ComfyUI to come up |
|
||||
| `GAME_PROCS` | _(empty = disabled)_ | comma-separated process names (case-insensitive, `.exe` optional); while any runs, the GPU counts as held by it: requests wait, Ollama unloads, the managed ComfyUI stops |
|
||||
| `GPU_FOREIGN_VRAM_MB` | `0` (disabled) | also treat the GPU as held when a process not in `GPU_IGNORE_PROCS` uses more VRAM than this; needs nvidia-smi |
|
||||
| `GPU_IGNORE_PROCS` | `ollama,ollama app,ollama_llama_server,python,pythonw` | process names never counted as foreign GPU users |
|
||||
| `GPU_FOREIGN_UTIL_PCT` | `0` (disabled) | also treat the GPU as held when a process not in `GPU_IGNORE_PROCS` uses more than this percent of the GPU 3D engine (Windows PDH counters, as shown by Task Manager; catches games without an exe list) |
|
||||
| `GPU_IGNORE_PROCS` | `ollama,ollama app,ollama_llama_server,python,pythonw,dwm` | process names never counted as foreign GPU users |
|
||||
| `GAME_POLL_INTERVAL` | `15s` | how often game/VRAM detection runs (nvidia-smi polls keep the GPU awake; don't go below ~10s) |
|
||||
| `LOGLEVEL` | `warn` | `info` logs every request (colored arrows in text mode), `debug` adds lock transitions. `LOG_LEVEL` is accepted as an alias |
|
||||
| `LOG_FORMAT` | `text` | `json` for structured JSON logs |
|
||||
|
||||
Reference in New Issue
Block a user