mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-03 17:55:21 +03:00
Start to add support for intel GPU stats
This commit is contained in:
parent
987bc050ed
commit
2e1958a20b
@ -13,7 +13,7 @@ from frigate.comms.dispatcher import Dispatcher
|
|||||||
from frigate.config import FrigateConfig
|
from frigate.config import FrigateConfig
|
||||||
from frigate.const import DRIVER_AMD, DRIVER_ENV_VAR, RECORD_DIR, CLIPS_DIR, CACHE_DIR
|
from frigate.const import DRIVER_AMD, DRIVER_ENV_VAR, RECORD_DIR, CLIPS_DIR, CACHE_DIR
|
||||||
from frigate.types import StatsTrackingTypes, CameraMetricsTypes
|
from frigate.types import StatsTrackingTypes, CameraMetricsTypes
|
||||||
from frigate.util import get_amd_gpu_stats, get_nvidia_gpu_stats
|
from frigate.util import get_amd_gpu_stats, get_intel_gpu_stats, get_nvidia_gpu_stats
|
||||||
from frigate.version import VERSION
|
from frigate.version import VERSION
|
||||||
from frigate.util import get_cpu_stats
|
from frigate.util import get_cpu_stats
|
||||||
from frigate.object_detection import ObjectDetectProcess
|
from frigate.object_detection import ObjectDetectProcess
|
||||||
@ -85,12 +85,12 @@ def get_temperatures() -> dict[str, float]:
|
|||||||
|
|
||||||
def get_gpu_stats(config: FrigateConfig) -> dict[str, str]:
|
def get_gpu_stats(config: FrigateConfig) -> dict[str, str]:
|
||||||
"""Parse GPUs from hwaccel args and use for stats."""
|
"""Parse GPUs from hwaccel args and use for stats."""
|
||||||
hwaccel_args = set(map(lambda camera: camera.ffmpeg.hwaccel_args, config.cameras.values()))
|
hwaccel_args = set(
|
||||||
|
map(lambda camera: camera.ffmpeg.hwaccel_args, config.cameras.values())
|
||||||
|
)
|
||||||
stats: dict[str, dict] = {}
|
stats: dict[str, dict] = {}
|
||||||
|
|
||||||
for args in hwaccel_args:
|
for args in hwaccel_args:
|
||||||
gpu: dict[str, str] = {}
|
|
||||||
|
|
||||||
if "cuvid" in args:
|
if "cuvid" in args:
|
||||||
# nvidia GPU
|
# nvidia GPU
|
||||||
nvidia_usage = get_nvidia_gpu_stats()
|
nvidia_usage = get_nvidia_gpu_stats()
|
||||||
@ -99,23 +99,28 @@ def get_gpu_stats(config: FrigateConfig) -> dict[str, str]:
|
|||||||
stats[nvidia_usage["name"]] = nvidia_usage
|
stats[nvidia_usage["name"]] = nvidia_usage
|
||||||
elif "qsv" in args:
|
elif "qsv" in args:
|
||||||
# intel QSV GPU
|
# intel QSV GPU
|
||||||
gpu["name"] = "intel-qsv"
|
intel_usage = get_intel_gpu_stats()
|
||||||
gpu["gpu_usage"] = "100"
|
|
||||||
gpu["memory_usage"] = "200"
|
if intel_usage:
|
||||||
|
stats["intel-qsv"] = intel_usage
|
||||||
elif "vaapi" in args:
|
elif "vaapi" in args:
|
||||||
driver = os.environ.get(DRIVER_ENV_VAR)
|
driver = os.environ.get(DRIVER_ENV_VAR)
|
||||||
|
|
||||||
if driver == DRIVER_AMD:
|
if driver == DRIVER_AMD:
|
||||||
|
# AMD VAAPI GPU
|
||||||
amd_usage = get_amd_gpu_stats()
|
amd_usage = get_amd_gpu_stats()
|
||||||
|
|
||||||
if amd_usage:
|
if amd_usage:
|
||||||
stats["amd-vaapi"] = amd_usage
|
stats["amd-vaapi"] = amd_usage
|
||||||
else:
|
else:
|
||||||
gpu["name"] = "intel-vaapi"
|
# intel VAAPI GPU
|
||||||
gpu["usage"] = "100"
|
intel_usage = get_intel_gpu_stats()
|
||||||
gpu["memory"] = "200"
|
|
||||||
|
if intel_usage:
|
||||||
|
stats["intel-qsv"] = intel_usage
|
||||||
elif "v4l2m2m" in args:
|
elif "v4l2m2m" in args:
|
||||||
gpu["name"] = "RPi"
|
# RPi v4l2m2m
|
||||||
|
stats["rpi-v4l2m2m"] = {}
|
||||||
|
|
||||||
return stats
|
return stats
|
||||||
|
|
||||||
|
|||||||
@ -812,6 +812,40 @@ def get_amd_gpu_stats() -> dict[str, str]:
|
|||||||
|
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
def get_intel_gpu_stats() -> dict[str, str]:
|
||||||
|
"""Get stats using intel_gpu_top."""
|
||||||
|
radeontop_command = [
|
||||||
|
"timeout",
|
||||||
|
"1s",
|
||||||
|
"intel_gpu_top",
|
||||||
|
"-J",
|
||||||
|
"-o",
|
||||||
|
"-",
|
||||||
|
"-s",
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
|
||||||
|
p = sp.run(
|
||||||
|
radeontop_command,
|
||||||
|
encoding="ascii",
|
||||||
|
capture_output=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
if p.returncode != 0:
|
||||||
|
logger.error(p.stderr)
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
usages = p.stdout.split(",")
|
||||||
|
results: dict[str, str] = {}
|
||||||
|
|
||||||
|
for hw in usages:
|
||||||
|
if "gpu" in hw:
|
||||||
|
results["gpu_usage"] = f"{hw.strip().split(' ')[1].split(' ')[0]} %"
|
||||||
|
elif "vram" in hw:
|
||||||
|
results["memory_usage"] = f"{hw.strip().split(' ')[1].split(' ')[0]} %"
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
def get_nvidia_gpu_stats() -> dict[str, str]:
|
def get_nvidia_gpu_stats() -> dict[str, str]:
|
||||||
"""Get stats using nvidia-smi."""
|
"""Get stats using nvidia-smi."""
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user