amdgpu: use hwmon for core clock

gpu_metrics currently reports the wrong value, so until that's fixed
we'll rely in hwmon
pull/1054/head
FlightlessMango 1 year ago
parent b48b03e131
commit 6abc794b42

@ -259,10 +259,10 @@ void amdgpu_get_metrics(){
gpu_info.load = amdgpu_common_metrics.gpu_load_percent;
gpu_info.powerUsage = amdgpu_common_metrics.average_gfx_power_w;
gpu_info.CoreClock = amdgpu_common_metrics.current_gfxclk_mhz;
gpu_info.MemClock = amdgpu_common_metrics.current_uclk_mhz;
// Use hwmon instead, see gpu.cpp
// gpu_info.CoreClock = amdgpu_common_metrics.current_gfxclk_mhz;
// gpu_info.temp = amdgpu_common_metrics.gpu_temp_c;
gpu_info.apu_cpu_power = amdgpu_common_metrics.average_cpu_power_w;
gpu_info.apu_cpu_temp = amdgpu_common_metrics.apu_cpu_temp_c;

@ -94,14 +94,6 @@ void getAmdGpuInfo(){
gpu_info.load = value;
}
if (amdgpu.core_clock) {
rewind(amdgpu.core_clock);
fflush(amdgpu.core_clock);
if (fscanf(amdgpu.core_clock, "%" PRId64, &value) != 1)
value = 0;
gpu_info.CoreClock = value / 1000000;
}
if (amdgpu.memory_clock) {
rewind(amdgpu.memory_clock);
@ -147,6 +139,15 @@ void getAmdGpuInfo(){
}
// On some GPUs SMU can sometimes return the wrong temperature.
// As HWMON is way more visible than the SMU metrics, let's always trust it as it is the most likely to work
if (amdgpu.core_clock) {
rewind(amdgpu.core_clock);
fflush(amdgpu.core_clock);
if (fscanf(amdgpu.core_clock, "%" PRId64, &value) != 1)
value = 0;
gpu_info.CoreClock = value / 1000000;
}
if (amdgpu.temp){
rewind(amdgpu.temp);
fflush(amdgpu.temp);

@ -884,6 +884,8 @@ void init_gpu_stats(uint32_t& vendorID, uint32_t reported_deviceID, overlay_para
amdgpu.junction_temp = fopen((hwmon_path + dir + "/temp2_input").c_str(), "r");
if (!amdgpu.memory_temp)
amdgpu.memory_temp = fopen((hwmon_path + dir + "/temp3_input").c_str(), "r");
if (!amdgpu.core_clock)
amdgpu.core_clock = fopen((hwmon_path + dir + "/freq1_input").c_str(), "r");
}
if (!metrics_path.empty())
@ -898,8 +900,6 @@ void init_gpu_stats(uint32_t& vendorID, uint32_t reported_deviceID, overlay_para
SPDLOG_DEBUG("using amdgpu path: {}", device_path);
for (const auto& dir : dirs) {
if (!amdgpu.core_clock)
amdgpu.core_clock = fopen((hwmon_path + dir + "/freq1_input").c_str(), "r");
if (!amdgpu.memory_clock)
amdgpu.memory_clock = fopen((hwmon_path + dir + "/freq2_input").c_str(), "r");
if (!amdgpu.power_usage)

Loading…
Cancel
Save