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();