[SWDEV-530633] Use gpu_metric speed and BW for xgmi (#366)

The xgmi command was showing pcie bit rate and bandwidth instead of xgmi. Corrected the API to get xgmi data from gpu metric.
Added python API for amdsmi_get_link_metrics. Modified the amdsmi_link_metrics struct.
Added check to confirm non zero partition got xgmi command.

---------

Signed-off-by: Bindhiya Kanangot Balakrishnan <Bindhiya.KanangotBalakrishnan@amd.com>
Signed-off-by: Maisam Arif <Maisam.Arif@amd.com>
Этот коммит содержится в:
Kanangot Balakrishnan, Bindhiya
2025-05-30 16:51:11 -05:00
коммит произвёл GitHub
родитель 2e8aaf02c9
Коммит 2eff0b3764
7 изменённых файлов: 147 добавлений и 31 удалений
+9 -3
Просмотреть файл
@@ -2119,16 +2119,22 @@ amdsmi_status_t amdsmi_get_link_metrics(amdsmi_processor_handle processor_handle
if (link_metrics == nullptr) return AMDSMI_STATUS_INVAL;
amdsmi_gpu_metrics_t metric_info = {};
link_metrics->max_bandwidth = std::numeric_limits<uint32_t>::max();
amdsmi_status_t status = amdsmi_get_gpu_metrics_info(
processor_handle, &metric_info);
if (status != AMDSMI_STATUS_SUCCESS)
return status;
link_metrics->num_links = AMDSMI_MAX_NUM_XGMI_LINKS;
for (unsigned int i = 0; i < link_metrics->num_links; i++) {
link_metrics->bit_rate = metric_info.xgmi_link_speed;
if ((metric_info.xgmi_link_speed != std::numeric_limits<uint16_t>::max()) &&
(metric_info.xgmi_link_width != std::numeric_limits<uint16_t>::max()))
link_metrics->max_bandwidth = metric_info.xgmi_link_speed * metric_info.xgmi_link_width;
for (unsigned int i = 0; i < AMDSMI_MAX_NUM_XGMI_LINKS; i++) {
link_metrics->links[i].read = metric_info.xgmi_read_data_acc[i];
link_metrics->links[i].write = metric_info.xgmi_write_data_acc[i];
link_metrics->links[i].bit_rate = metric_info.xgmi_link_speed;
link_metrics->links[i].max_bandwidth = metric_info.xgmi_link_width;
link_metrics->links[i].link_type = AMDSMI_LINK_TYPE_XGMI;
}