From 09c718954c2c23d94faa21d99df6297f37c41cca Mon Sep 17 00:00:00 2001 From: Li Ma Date: Tue, 8 Oct 2024 13:40:55 +0800 Subject: [PATCH] SWDEV-475255 - MM Engine Decoding Throughput Implemented DEC activity for now due to ENC activity is unavailable in amdsmi. Signed-off-by: Li Ma Change-Id: I34bb56e6e0d8d2ab91243f8932f0ac10cb2d1e9f [ROCm/rdc commit: b17abf93fa3873064bf146c638cb729615479a1e] --- projects/rdc/common/rdc_field.data | 2 ++ projects/rdc/include/rdc/rdc.h | 2 ++ projects/rdc/python_binding/RdcReader.py | 2 ++ projects/rdc/python_binding/rdc_bootstrap.py | 2 ++ .../rdc_libs/rdc/src/RdcMetricFetcherImpl.cc | 19 +++++++++++++++++++ projects/rdc/rdc_libs/rdc/src/RdcSmiLib.cc | 1 + 6 files changed, 28 insertions(+) diff --git a/projects/rdc/common/rdc_field.data b/projects/rdc/common/rdc_field.data index 42c3a89d07..81ede2e440 100644 --- a/projects/rdc/common/rdc_field.data +++ b/projects/rdc/common/rdc_field.data @@ -49,6 +49,8 @@ FLD_DESC_ENT(RDC_FI_PCIE_BANDWIDTH, "PCIe bandwidth in GB/sec", FLD_DESC_ENT(RDC_FI_GPU_UTIL, "GPU busy percentage", "GPU_UTIL", true) FLD_DESC_ENT(RDC_FI_GPU_MEMORY_USAGE, "Memory usage of the GPU instance in bytes", "GPU_MEMORY_USAGE", true) FLD_DESC_ENT(RDC_FI_GPU_MEMORY_TOTAL, "Total memory of the GPU instance", "GPU_MEMORY_TOTAL", true) +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) // ECC totals FLD_DESC_ENT(RDC_FI_ECC_CORRECT_TOTAL, "Accumulated Single Error Correction", "ECC_CORRECT", true) diff --git a/projects/rdc/include/rdc/rdc.h b/projects/rdc/include/rdc/rdc.h index 51d1385b88..7c681ee26c 100644 --- a/projects/rdc/include/rdc/rdc.h +++ b/projects/rdc/include/rdc/rdc.h @@ -185,6 +185,8 @@ typedef enum { RDC_FI_GPU_UTIL = 500, //!< GPU Utilization RDC_FI_GPU_MEMORY_USAGE, //!< Memory usage of the GPU instance RDC_FI_GPU_MEMORY_TOTAL, //!< Total memory of the GPU instance + RDC_FI_GPU_MM_ENC_UTIL, //!< Multimedia encoder busy percentage + RDC_FI_GPU_MM_DEC_UTIL, //!< Multimedia decoder busy percentage /** * @brief ECC related fields diff --git a/projects/rdc/python_binding/RdcReader.py b/projects/rdc/python_binding/RdcReader.py index 0f40b110a3..4433a2efe7 100644 --- a/projects/rdc/python_binding/RdcReader.py +++ b/projects/rdc/python_binding/RdcReader.py @@ -5,6 +5,8 @@ from RdcUtil import RdcUtil default_field_ids = [ rdc_field_t.RDC_FI_GPU_MEMORY_USAGE, rdc_field_t.RDC_FI_GPU_MEMORY_TOTAL, + rdc_field_t.RDC_FI_GPU_MM_ENC_UTIL, + rdc_field_t.RDC_FI_GPU_MM_DEC_UTIL, rdc_field_t.RDC_FI_OAM_ID, rdc_field_t.RDC_FI_POWER_USAGE, rdc_field_t.RDC_FI_GPU_CLOCK, diff --git a/projects/rdc/python_binding/rdc_bootstrap.py b/projects/rdc/python_binding/rdc_bootstrap.py index 37ba7e53ba..cff29a084c 100644 --- a/projects/rdc/python_binding/rdc_bootstrap.py +++ b/projects/rdc/python_binding/rdc_bootstrap.py @@ -87,6 +87,8 @@ class rdc_field_t(c_int): RDC_FI_GPU_UTIL = 500 RDC_FI_GPU_MEMORY_USAGE = 501 RDC_FI_GPU_MEMORY_TOTAL = 502 + RDC_FI_GPU_MM_ENC_UTIL = 503 + RDC_FI_GPU_MM_DEC_UTIL = 504 RDC_FI_ECC_CORRECT_TOTAL = 600 RDC_FI_ECC_UNCORRECT_TOTAL = 601 RDC_FI_ECC_SDMA_SEC = 602 diff --git a/projects/rdc/rdc_libs/rdc/src/RdcMetricFetcherImpl.cc b/projects/rdc/rdc_libs/rdc/src/RdcMetricFetcherImpl.cc index da26294690..54329aacd3 100644 --- a/projects/rdc/rdc_libs/rdc/src/RdcMetricFetcherImpl.cc +++ b/projects/rdc/rdc_libs/rdc/src/RdcMetricFetcherImpl.cc @@ -669,6 +669,25 @@ rdc_status_t RdcMetricFetcherImpl::fetch_smi_field(uint32_t gpu_index, rdc_field } break; } + case RDC_FI_GPU_MM_ENC_UTIL: { + value->status = AMDSMI_STATUS_NOT_SUPPORTED; + RDC_LOG(RDC_ERROR, "AMDSMI No Supported: cannot get MM_ENC_ACTIVITY"); + return RDC_ST_NO_DATA; + } + case RDC_FI_GPU_MM_DEC_UTIL: { + constexpr uint32_t kUTILIZATION_COUNTERS(1); + amdsmi_utilization_counter_t utilization_counters[kUTILIZATION_COUNTERS]; + utilization_counters[0].type = AMDSMI_COARSE_DECODER_ACTIVITY; + uint64_t timestamp; + + value->status = amdsmi_get_utilization_count(processor_handle, utilization_counters, + kUTILIZATION_COUNTERS, ×tamp); + value->type = INTEGER; + if (value->status == AMDSMI_STATUS_SUCCESS) { + value->value.l_int = static_cast(utilization_counters[0].value); + } + break; + } case RDC_FI_ECC_CORRECT_TOTAL: case RDC_FI_ECC_UNCORRECT_TOTAL: get_ecc_total(gpu_index, field_id, value); diff --git a/projects/rdc/rdc_libs/rdc/src/RdcSmiLib.cc b/projects/rdc/rdc_libs/rdc/src/RdcSmiLib.cc index 4ca9ffbd22..2ea99795d5 100644 --- a/projects/rdc/rdc_libs/rdc/src/RdcSmiLib.cc +++ b/projects/rdc/rdc_libs/rdc/src/RdcSmiLib.cc @@ -178,6 +178,7 @@ rdc_status_t RdcSmiLib::rdc_telemetry_fields_query(uint32_t field_ids[MAX_NUM_FI RDC_EVNT_XGMI_1_RESP_TX, RDC_EVNT_XGMI_1_BEATS_TX, RDC_EVNT_XGMI_0_THRPUT, RDC_EVNT_XGMI_1_THRPUT, RDC_EVNT_XGMI_2_THRPUT, RDC_EVNT_XGMI_3_THRPUT, RDC_EVNT_XGMI_4_THRPUT, RDC_EVNT_XGMI_5_THRPUT, RDC_FI_OAM_ID, + RDC_FI_GPU_MM_ENC_UTIL, RDC_FI_GPU_MM_DEC_UTIL, }; std::copy(fields.begin(), fields.end(), field_ids); *field_count = fields.size();