diff --git a/docs/docs/configuration/hardware_acceleration_video.md b/docs/docs/configuration/hardware_acceleration_video.md index 360ca1a50c..25cdaf1b12 100644 --- a/docs/docs/configuration/hardware_acceleration_video.md +++ b/docs/docs/configuration/hardware_acceleration_video.md @@ -132,7 +132,8 @@ ffmpeg: Frigate reads Intel GPU utilization directly from the kernel's per-client DRM usage counters exposed at `/proc//fdinfo/`. This requires: -- Linux kernel **5.19 or newer** for the `i915` driver, or any release of the `xe` driver. +- An Intel GPU from Broadwell (5th gen) or newer. Older GPUs do not expose these counters on any kernel. +- Linux kernel **5.19 or newer** for the `i915` driver (**6.5 or newer** on 12th gen and newer), or any release of the `xe` driver. - Frigate running with permission to read other processes' fdinfo. Running as root inside the container (the default) satisfies this; non-root setups may need `CAP_SYS_PTRACE`. No `intel_gpu_top` binary, `CAP_PERFMON`, privileged mode, or `perf_event_paranoid` tuning is required. diff --git a/frigate/util/services.py b/frigate/util/services.py index 38737907ef..de17e29711 100644 --- a/frigate/util/services.py +++ b/frigate/util/services.py @@ -487,8 +487,9 @@ def get_intel_gpu_stats( Each DRM client FD exposes monotonic per-engine busy counters via /proc//fdinfo/. For i915 this requires kernel 6.5 or newer: earlier kernels omit the per-engine counters whenever GuC submission is - active, which is the default on 12th gen and newer. Xe has exposed them - since its first release. We sample twice and divide busy-time deltas by + active, which is the default on 12th gen and newer. i915 never exposes + them on GPUs older than Broadwell (Gen8). Xe has exposed them since its + first release. We sample twice and divide busy-time deltas by wall-clock to derive utilization. Render/3D and Compute are pooled into "compute"; Video and VideoEnhance into "dec". Overall "gpu" is the sum of those pools (clamped to 100%). @@ -557,10 +558,11 @@ def get_intel_gpu_stats( # i915 suppresses per-client engine counters while GuC submission is # active on kernels older than 6.5 (kernel commit 1324680a80eb lifted # this), which covers stock Debian 12 and Ubuntu 22.04 on 12th gen - # and newer. + # and newer. It never publishes them for pre-Broadwell GPUs. logger.warning( "Unable to collect Intel GPU stats: found %d DRM client(s) for %s but " - "no per-engine counters. Kernel 6.5 or newer is required.", + "the kernel reports no usage for them. GPUs older than Broadwell " + "(5th gen) are not supported. 12th gen and newer need kernel 6.5+", len(snapshot_a), "/".join(sorted({client["driver"] for client in snapshot_a.values()})), )