diff --git a/README.md b/README.md index ff8ad2a66a..d6197b6689 100644 --- a/README.md +++ b/README.md @@ -561,6 +561,7 @@ Example output: Intel Discrete Intel Integrated Panfrost/Panthor driver + Qualcomm @@ -570,6 +571,8 @@ Example output: xe i915/xe + msm_drm (kgsl) + msm_dpu Usage% @@ -579,6 +582,8 @@ Example output: 🟢 🟢 🟢 + 🟢 + 🟢 Temperature @@ -588,6 +593,8 @@ Example output: 🟢 🔴 🟢 + 🟢 + 🟢 Junction Temperature @@ -597,6 +604,8 @@ Example output: 🔴 🔴 🔴 + 🔴 + 🔴 Memory Temperature @@ -606,6 +615,8 @@ Example output: 🟢 🔴 🔴 + 🔴 + 🔴 Process VRAM @@ -615,6 +626,8 @@ Example output: 🟢 🟢 🟢 + 🔴 + 🟢 System VRAM @@ -624,6 +637,8 @@ Example output: 🔴 🔴 🔴 + 🔴 + 🔴 Total VRAM @@ -633,6 +648,8 @@ Example output: 🔴 🔴 🔴 + 🔴 + 🔴 Memory Clock @@ -642,6 +659,8 @@ Example output: 🔴 🔴 🔴 + 🔴 + 🔴 Core Clock @@ -651,6 +670,8 @@ Example output: 🟢 🟢 🟢 + 🟢 + 🔴 Power Usage @@ -660,6 +681,8 @@ Example output: 🟢 🔴 🔴 + 🔴 + 🔴 Throttling Status @@ -669,6 +692,8 @@ Example output: 🟢 🟢 🔴 + 🔴 + 🔴 Fan Speed @@ -678,6 +703,8 @@ Example output: 🟢 🔴 🔴 + 🔴 + 🔴 Voltage @@ -687,6 +714,8 @@ Example output: 🟢 🔴 🔴 + 🔴 + 🔴 @@ -703,3 +732,6 @@ Example output: #### Panfrost and Panthor notes - GPU usage requires `echo N | sudo tee /sys/class/drm/renderD*/device/profiling` - Where N is a number, 1 for panfrost and 3 for panthor. + +#### Qualcomm notes +- GPU usage on `msm_dpu` shows usage of the current process, not total system usage diff --git a/mangohud-next/server/metrics/gpu/msm/dpu.cpp b/mangohud-next/server/metrics/gpu/msm/dpu.cpp index 3b2da1ce4a..ccea63692f 100644 --- a/mangohud-next/server/metrics/gpu/msm/dpu.cpp +++ b/mangohud-next/server/metrics/gpu/msm/dpu.cpp @@ -38,3 +38,7 @@ int MSM_DPU::get_process_load(pid_t pid) { return static_cast(::lroundf(result)); } + +float MSM_DPU::get_process_vram_used(pid_t pid) { + return fdinfo.get_memory_used(pid, "drm-resident-memory"); +} diff --git a/mangohud-next/server/metrics/gpu/msm/dpu.hpp b/mangohud-next/server/metrics/gpu/msm/dpu.hpp index a4f0d37675..e7e602594b 100644 --- a/mangohud-next/server/metrics/gpu/msm/dpu.hpp +++ b/mangohud-next/server/metrics/gpu/msm/dpu.hpp @@ -28,4 +28,5 @@ class MSM_DPU : public GPU, private Hwmon, public FDInfo { // Process-related functions int get_process_load(pid_t pid) override; + float get_process_vram_used(pid_t pid) override; }; diff --git a/src/gpu_fdinfo.cpp b/src/gpu_fdinfo.cpp index 0fdd99e836..b54ae3b79b 100644 --- a/src/gpu_fdinfo.cpp +++ b/src/gpu_fdinfo.cpp @@ -55,6 +55,11 @@ void GPU_fdinfo::find_fd() client_id = val; } + // fixup mismatch between display engine and render engine drivers + if (module == "msm_dpu" && driver == "msm") { + driver = "msm_dpu"; + } + if (!driver.empty() && driver == module) { total++; SPDLOG_TRACE( @@ -175,7 +180,7 @@ void GPU_fdinfo::find_hwmon_sensors() { std::string hwmon; - if (module == "msm") + if (module == "msm_dpu") hwmon = find_hwmon_sensor_dir("gpu"); else if (module == "panfrost" || module == "panthor") hwmon = find_hwmon_sensor_dir("gpu_thermal"); diff --git a/src/gpu_fdinfo.h b/src/gpu_fdinfo.h index 97e62e5265..877b8b91c5 100644 --- a/src/gpu_fdinfo.h +++ b/src/gpu_fdinfo.h @@ -144,8 +144,8 @@ class GPU_fdinfo { drm_engine_type = "drm-engine-gfx"; drm_memory_type = "drm-memory-vram"; } else if (module == "msm_dpu") { - // msm driver does not report vram usage drm_engine_type = "drm-engine-gpu"; + drm_memory_type = "drm-resident-memory"; } else if (module == "msm_drm") { init_kgsl(); } else if (module == "panfrost") {