diff --git a/projects/rdc/common/rdc_field.data b/projects/rdc/common/rdc_field.data index ce8daa7ed6..31c9e4de2d 100644 --- a/projects/rdc/common/rdc_field.data +++ b/projects/rdc/common/rdc_field.data @@ -52,6 +52,8 @@ FLD_DESC_ENT(RDC_FI_GPU_MEMORY_TOTAL, "Total memory of the GPU instance", FLD_DESC_ENT(RDC_FI_GPU_MM_ENC_UTIL, "Mutilmedia encoder busy percentage", "GPU_MM_ENC_UTIL", true) FLD_DESC_ENT(RDC_FI_GPU_MM_DEC_UTIL, "Mutilmedia decoder busy percentage", "GPU_MM_DEC_UTIL", true) FLD_DESC_ENT(RDC_FI_GPU_MEMORY_ACTIVITY, "Memory busy percentage", "GPU_MEM_UTIL", true) +FLD_DESC_ENT(RDC_FI_GPU_MEMORY_MAX_BANDWIDTH, "Memory max bandwidth", "GPU_MEM_MAX_BANDWIDTH", true) +FLD_DESC_ENT(RDC_FI_GPU_MEMORY_CUR_BANDWIDTH, "Memory current bandwidth", "GPU_MEM_CUR_BANDWIDTH", true) FLD_DESC_ENT(RDC_FI_GPU_PAGE_RETRIED, "Retried page of the GPU instance", "GPU_PAGE_RETRIED", true) diff --git a/projects/rdc/include/rdc/rdc.h b/projects/rdc/include/rdc/rdc.h index f0604105f7..3fdab1d1da 100644 --- a/projects/rdc/include/rdc/rdc.h +++ b/projects/rdc/include/rdc/rdc.h @@ -193,6 +193,8 @@ typedef enum { RDC_FI_GPU_MM_ENC_UTIL, //!< Multimedia encoder busy percentage RDC_FI_GPU_MM_DEC_UTIL, //!< Multimedia decoder busy percentage RDC_FI_GPU_MEMORY_ACTIVITY, //!< Memory busy percentage + RDC_FI_GPU_MEMORY_MAX_BANDWIDTH, //status = amdsmi_get_gpu_vram_info(processor_handle, &vram_info); + value->type = INTEGER; + if (value->status == AMDSMI_STATUS_SUCCESS) { + value->value.l_int = vram_info.vram_max_bandwidth; + } + break; + } + case RDC_FI_GPU_MEMORY_CUR_BANDWIDTH: { + amdsmi_engine_usage_t engine_usage; + amdsmi_vram_info_t vram_info; + + value->status = amdsmi_get_gpu_activity(processor_handle, &engine_usage); + value->type = INTEGER; + if (value->status == AMDSMI_STATUS_SUCCESS) { + value->value.l_int = static_cast(engine_usage.umc_activity); + } + + value->status = amdsmi_get_gpu_vram_info(processor_handle, &vram_info); + if (value->status == AMDSMI_STATUS_SUCCESS) { + value->value.l_int = value->value.l_int / 100 * vram_info.vram_max_bandwidth; + } + break; + } case RDC_FI_GPU_COUNT: { uint32_t processor_count = 0; // amdsmi is initialized in AMDSMI_INIT_AMD_GPUS mode -> returned sockets are GPUs diff --git a/projects/rdc/rdc_libs/rdc/src/RdcSmiLib.cc b/projects/rdc/rdc_libs/rdc/src/RdcSmiLib.cc index 520efbee6b..91d9a4931f 100644 --- a/projects/rdc/rdc_libs/rdc/src/RdcSmiLib.cc +++ b/projects/rdc/rdc_libs/rdc/src/RdcSmiLib.cc @@ -183,6 +183,7 @@ rdc_status_t RdcSmiLib::rdc_telemetry_fields_query(uint32_t field_ids[MAX_NUM_FI RDC_HEALTH_XGMI_ERROR, RDC_HEALTH_PCIE_REPLAY_COUNT, RDC_HEALTH_RETIRED_PAGE_NUM, RDC_HEALTH_PENDING_PAGE_NUM, RDC_HEALTH_RETIRED_PAGE_LIMIT, RDC_HEALTH_UNCORRECTABLE_PAGE_LIMIT, RDC_HEALTH_POWER_THROTTLE_TIME, RDC_HEALTH_THERMAL_THROTTLE_TIME, + RDC_FI_GPU_MEMORY_MAX_BANDWIDTH, RDC_FI_GPU_MEMORY_CUR_BANDWIDTH, }; std::copy(fields.begin(), fields.end(), field_ids); *field_count = fields.size();