mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-10-17 18:19:04 +02:00
111 lines
4.4 KiB
Markdown
111 lines
4.4 KiB
Markdown
# `gpu` collector
|
|
|
|
The collector reads five PDH objects with `pdh.CounterTypeRaw`:
|
|
`GPU Engine`, `GPU Adapter Memory`, `GPU Local Adapter Memory`,
|
|
`GPU Non Local Adapter Memory` and `GPU Process Memory`. WDDM (dxgkrnl)
|
|
provides them, so they exist on any host with a WDDM display driver, including
|
|
the Microsoft Basic Render Driver on VMs without a GPU. These notes were
|
|
recorded on a Windows 11 workstation with an NVIDIA GeForce GTX 1070
|
|
(driver 32.0.15.8266).
|
|
|
|
- All counters the collector reads are `PERF_COUNTER_LARGE_RAWCOUNT`
|
|
(`NumberOfItems64`), so the raw value is the value:
|
|
- `Running Time` is cumulative engine busy time in 100 ns units. The
|
|
collector divides it by 10,000,000 for `engine_time_seconds`.
|
|
- The memory counters are gauges in bytes.
|
|
- `Utilization Percentage` is `PERF_100NSEC_TIMER` and has the same raw value
|
|
as `Running Time`; Task Manager derives the percentage from two samples.
|
|
The collector exports the counter instead, so `rate()` of
|
|
`engine_time_seconds` gives the utilization.
|
|
- Instance names encode the labels, see `parseGPUCounterInstanceString`:
|
|
- Engine: `pid_<pid>_luid_0x<high>_0x<low>_phys_<n>_eng_<n>_engtype_<type>`.
|
|
Types seen: `3D`, `Copy`, `LegacyOverlay`, `Security`, `VideoDecode`,
|
|
`VideoEncode`, `VR`. Other vendors append an index (`Compute_0`), which is
|
|
why `engtype` keeps everything after the key.
|
|
- Adapter memory: `luid_..._phys_<n>`. Local and non local adapter memory
|
|
may append `_part_<n>`, but not consistently: on the recording host the
|
|
NVIDIA adapter had a local instance without `part` and a non local
|
|
instance with `part_0`, while the second adapter had only a local
|
|
instance with `part_0`.
|
|
- Process memory: `pid_<pid>_luid_..._phys_<n>`.
|
|
- The recording host had two LUIDs: `0x00000000_0x0001120B` (the GTX 1070,
|
|
9 engines per process) and `0x00000000_0x0001241E`, which has no PnP display
|
|
device and 25 engines, all `3D`. The second one is presumably the Microsoft
|
|
Basic Render Driver (inferred, not verified).
|
|
- Engine instances are per process and engine: 510 instances across 40
|
|
processes on an ordinary desktop, 48 process memory instances. Every
|
|
process that opens a D3D device gets a full set of engine instances, so the
|
|
engine metric has high cardinality.
|
|
|
|
## Counter reference
|
|
|
|
Recorded on Windows 11 Pro (build 26300). `Raw` and `Base` are the first and
|
|
second values that `pdh.CounterTypeRaw` returns for the sample instance.
|
|
|
|
### `GPU Engine`
|
|
|
|
Multi-instance. 510 instances. Sample instance:
|
|
`pid_1064_luid_0x00000000_0x0001120B_phys_0_eng_0_engtype_3D` (`dwm`).
|
|
|
|
Counters the collector reads:
|
|
|
|
| Counter | Type | Raw | Base |
|
|
|---|---|---|---|
|
|
| `Running Time` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1660393259 | |
|
|
|
|
Not read by the collector:
|
|
|
|
- `PERF_100NSEC_TIMER`: `Utilization Percentage`
|
|
|
|
### `GPU Adapter Memory`
|
|
|
|
Multi-instance. Instances: `luid_0x00000000_0x0001120B_phys_0`,
|
|
`luid_0x00000000_0x0001241E_phys_0`. Sample instance:
|
|
`luid_0x00000000_0x0001120B_phys_0`.
|
|
|
|
Counters the collector reads:
|
|
|
|
| Counter | Type | Raw | Base |
|
|
|---|---|---|---|
|
|
| `Dedicated Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1641607168 | |
|
|
| `Shared Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 87773184 | |
|
|
| `Total Committed` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1962553344 | |
|
|
|
|
### `GPU Local Adapter Memory`
|
|
|
|
Multi-instance. Instances: `luid_0x00000000_0x0001120B_phys_0`,
|
|
`luid_0x00000000_0x0001241E_phys_0_part_0`. Sample instance:
|
|
`luid_0x00000000_0x0001120B_phys_0`.
|
|
|
|
Counters the collector reads:
|
|
|
|
| Counter | Type | Raw | Base |
|
|
|---|---|---|---|
|
|
| `Local Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 903745536 | |
|
|
|
|
### `GPU Non Local Adapter Memory`
|
|
|
|
Multi-instance. Instances: `luid_0x00000000_0x0001120B_phys_0_part_0`.
|
|
Sample instance: `luid_0x00000000_0x0001120B_phys_0_part_0`.
|
|
|
|
Counters the collector reads:
|
|
|
|
| Counter | Type | Raw | Base |
|
|
|---|---|---|---|
|
|
| `Non Local Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 87773184 | |
|
|
|
|
### `GPU Process Memory`
|
|
|
|
Multi-instance. 48 instances. Sample instance:
|
|
`pid_1064_luid_0x00000000_0x0001120B_phys_0` (`dwm`).
|
|
|
|
Counters the collector reads:
|
|
|
|
| Counter | Type | Raw | Base |
|
|
|---|---|---|---|
|
|
| `Dedicated Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1126207488 | |
|
|
| `Local Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 314675200 | |
|
|
| `Non Local Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 4931584 | |
|
|
| `Shared Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 4931584 | |
|
|
| `Total Committed` | `PERF_COUNTER_LARGE_RAWCOUNT` | 717426688 | |
|