From c23694e66ab00ecf8f5848ee8c7625669d73942a Mon Sep 17 00:00:00 2001 From: Divya Shikre Date: Wed, 24 Nov 2021 13:49:43 -0500 Subject: [PATCH] Add fix to display correct GPU Memory Activity and GFX Activity value. Driver mem fills in 0xFF for all for the metrices not supported for that ASIC. So if 0xFF is detected, return RSMI_STATUS_NOT_SUPPORTED Signed-off-by: Divya Shikre Change-Id: I86a38148c7a288ea0db94893f685560eaac098ab [ROCm/rocm_smi_lib commit: 7b1daaef968fae1cb3d511bc28413ca5467798e2] --- projects/rocm-smi-lib/python_smi_tools/rocm_smi.py | 7 ++++++- projects/rocm-smi-lib/src/rocm_smi.cc | 10 ++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/projects/rocm-smi-lib/python_smi_tools/rocm_smi.py b/projects/rocm-smi-lib/python_smi_tools/rocm_smi.py index 674e249ebf..d77b983920 100755 --- a/projects/rocm-smi-lib/python_smi_tools/rocm_smi.py +++ b/projects/rocm-smi-lib/python_smi_tools/rocm_smi.py @@ -1604,7 +1604,7 @@ def getCoarseGrainUtil(device, typeName=None): utilization_counters[i].type = c_int(i) ret = rocmsmi.rsmi_utilization_count_get(device, utilization_counters, length, byref(timestamp)) - if rsmi_ret_ok(ret, device): + if rsmi_ret_ok(ret, device, typeName, True): return utilization_counters return -1 @@ -1624,6 +1624,9 @@ def showGpuUse(deviceList): if util_counters != -1: for ut_counter in util_counters: printLog(device, utilization_counter_name[ut_counter.type], ut_counter.val) + else: + printLog(device, 'GFX Activity', 'N/A') + printLogSpacer() @@ -1713,6 +1716,8 @@ def showMemUse(deviceList): if util_counters != -1: for ut_counter in util_counters: printLog(device, utilization_counter_name[ut_counter.type], ut_counter.val) + else: + printLog(device, 'Memory Activity', 'N/A') printLogSpacer() diff --git a/projects/rocm-smi-lib/src/rocm_smi.cc b/projects/rocm-smi-lib/src/rocm_smi.cc index 52582d6d40..8d49b3702c 100755 --- a/projects/rocm-smi-lib/src/rocm_smi.cc +++ b/projects/rocm-smi-lib/src/rocm_smi.cc @@ -2803,6 +2803,8 @@ rsmi_utilization_count_get(uint32_t dv_ind, rsmi_status_t ret; rsmi_gpu_metrics_t gpu_metrics; + uint32_t val_ui32; + ret = rsmi_dev_gpu_metrics_info_get(dv_ind, &gpu_metrics); if (ret != RSMI_STATUS_SUCCESS) { return ret; @@ -2816,14 +2818,18 @@ rsmi_utilization_count_get(uint32_t dv_ind, for (uint32_t index = 0 ; index < count; index++) { switch (utilization_counters[index].type) { case RSMI_COARSE_GRAIN_GFX_ACTIVITY: - utilization_counters[index].value = gpu_metrics.gfx_activity_acc; + val_ui32 = gpu_metrics.gfx_activity_acc; break; case RSMI_COARSE_GRAIN_MEM_ACTIVITY: - utilization_counters[index].value = gpu_metrics.mem_actvity_acc; + val_ui32 = gpu_metrics.mem_actvity_acc; break; default: return RSMI_STATUS_INVALID_ARGS; } + if (val_ui32 == UINT32_MAX) + return RSMI_STATUS_NOT_SUPPORTED; + else + utilization_counters[index].value = val_ui32; } *timestamp = gpu_metrics.system_clock_counter;