From e269a5fc3ee3e748e7d613cc201dc706ee5bf0ff Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Sat, 19 Apr 2025 13:42:01 -0600 Subject: [PATCH] Add support for calculating rockchip GPU load --- frigate/stats/util.py | 6 ++++++ frigate/util/services.py | 23 ++++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/frigate/stats/util.py b/frigate/stats/util.py index c372c2ecc3..72f76c07e7 100644 --- a/frigate/stats/util.py +++ b/frigate/stats/util.py @@ -24,6 +24,7 @@ from frigate.util.services import ( get_intel_gpu_stats, get_jetson_stats, get_nvidia_gpu_stats, + get_rockchip_gpu_stats, get_rockchip_npu_stats, is_vaapi_amd_driver, ) @@ -232,6 +233,11 @@ async def set_gpu_stats( else: stats["intel-vaapi"] = {"gpu": "", "mem": ""} hwaccel_errors.append(args) + elif "preset-rk" in args: + rga_usage = get_rockchip_gpu_stats() + + if rga_usage: + stats["rockchip"] = rga_usage elif "v4l2m2m" in args or "rpi" in args: # RPi v4l2m2m is currently not able to get usage stats stats["rpi-v4l2m2m"] = {"gpu": "", "mem": ""} diff --git a/frigate/util/services.py b/frigate/util/services.py index fb0e80bdd1..8246a6fd8b 100644 --- a/frigate/util/services.py +++ b/frigate/util/services.py @@ -382,8 +382,29 @@ def get_intel_gpu_stats(sriov: bool) -> dict[str, str]: return results +def get_rockchip_gpu_stats() -> dict[str, str]: + """Get GPU stats using rk.""" + try: + with open("/sys/kernel/debug/rkrga/load", "r") as f: + content = f.read() + except FileNotFoundError: + return None + + load_values = [] + for line in content.splitlines(): + match = re.search(r"load = (\d+)%", line) + if match: + load_values.append(int(match.group(1))) + + if not load_values: + return None + + average_load = str(round(sum(load_values) / len(load_values), 2)) + return {"gpu": average_load, "mem": "-"} + + def get_rockchip_npu_stats() -> dict[str, str]: - """Get stats using rk.""" + """Get NPU stats using rk.""" try: with open("/sys/kernel/debug/rknpu/load", "r") as f: npu_output = f.read()