added metric table wrapper APIS & test code

Change-Id: I24207b3c32d7294337140a1f5108b81f3bf33580


[ROCm/amdsmi commit: 192fb538be]
Bu işleme şunda yer alıyor:
Deepak Mewar
2023-10-06 07:07:27 -04:00
işlemeyi yapan: Maisam Arif
ebeveyn 69c642a720
işleme fe29a848bc
3 değiştirilmiş dosya ile 111 ekleme ve 2 silme
+34
Dosyayı Görüntüle
@@ -49,6 +49,7 @@
#include <iomanip>
#include "amd_smi/amdsmi.h"
#include <cstring>
#include <cmath>
using namespace std;
@@ -624,6 +625,39 @@ int main(int argc, char **argv) {
cout<<"| Current "<<bw_string[bw_ind]<<"bandwidth of xGMI link "<<xgmi_link.link_name<<" | "<<bw<<" Mbps |\n";
cout<<"\n-------------------------------------------------\n";
uint32_t met_ver;
ret = amdsmi_get_metrics_table_version(sockets[i], &met_ver);
CHK_AMDSMI_RET(ret)
if (ret != AMDSMI_STATUS_SUCCESS) {
cout<<"Failed to get Metrics Table Version, Err["<<ret<<"]:"
<<*amdsmi_get_esmi_err_msg(ret, &err_str1)<<endl;
} else
cout<<"\n| METRICS TABLE Version | "<<met_ver<<" \t\t |\n";
cout<<"\n-------------------------------------------------\n";
double fraction_q10 = 1/pow(2,10);
double fraction_uq10 = fraction_q10;
double fraction_uq16 = 1/pow(2,16);
struct hsmp_metric_table mtbl = {0};
ret = amdsmi_get_metrics_table(sockets[i], i, &mtbl);
CHK_AMDSMI_RET(ret)
if (ret != AMDSMI_STATUS_SUCCESS) {
cout<<"Failed to get Metrics Table for socket["<<i<<"], Err["<<ret<<"]:"
<<*amdsmi_get_esmi_err_msg(ret, &err_str1)<<endl;
} else {
cout<<"\n| METRICS TABLE \t\t |\n";
cout<<"\n| ACCUMULATOR COUNTER | "<<mtbl.accumulation_counter<<"\t\t|\n";
cout<<"\n| SOCKET POWER LIMIT | "<<(mtbl.socket_power_limit * fraction_uq10)<<" W\t\t|\n";
cout<<"\n| MAX SOCKET POWER LIMIT | "<<(mtbl.max_socket_power_limit * fraction_uq10)<<" W\t\t|\n";
cout<<"\n| SOCKET POWER | "<<(mtbl.socket_power * fraction_uq10)<<" W\t\t|\n";
}
cout<<"\n-------------------------------------------------\n";
}
// Clean up resources allocated at amdsmi_init
ret = amdsmi_shut_down();
+30
Dosyayı Görüntüle
@@ -4285,6 +4285,36 @@ amdsmi_status_t amdsmi_get_cpu_current_xgmi_bw(amdsmi_cpusocket_handle socket_ha
/** @} */
/*---------------------------------------------------------------------------*/
/** @defgroup MetQuer Metrics Table */
/*---------------------------------------------------------------------------*/
/** @{ */
/**
* @brief Get metrics table version
*
* @param[in] socket_handle Cpu socket which to query
* @param[in,out] metrics_version input buffer to return the metrics table version.
*
* @return ::amdsmi_status_t | ::AMDSMI_STATUS_SUCCESS on success, non-zero on fail
*/
amdsmi_status_t amdsmi_get_metrics_table_version(amdsmi_cpusocket_handle socket_handle,
uint32_t *metrics_version);
/**
* @brief Get metrics table
*
* @param[in] socket_handle Cpu socket which to query
* @param[in] sock_ind - socket index
* @param[in,out] metrics_table input buffer to return the metrics table.
*
* @return ::amdsmi_status_t | ::AMDSMI_STATUS_SUCCESS on success, non-zero on fail
*/
amdsmi_status_t amdsmi_get_metrics_table(amdsmi_cpusocket_handle socket_handle, uint8_t sock_ind,
struct hsmp_metric_table *metrics_table);
/** @} */
/*---------------------------------------------------------------------------*/
/** @defgroup auxiquer Auxillary functions */
/*---------------------------------------------------------------------------*/
+47 -2
Dosyayı Görüntüle
@@ -2685,8 +2685,7 @@ amdsmi_status_t amdsmi_set_cpu_socket_lclk_dpm_level(amdsmi_cpusocket_handle soc
if (r != AMDSMI_STATUS_SUCCESS)
return r;
status = static_cast<amdsmi_status_t>(esmi_socket_lclk_dpm_level_set(sock_ind,
nbio_id, min, max));
status = static_cast<amdsmi_status_t>(esmi_socket_lclk_dpm_level_set(sock_ind, nbio_id, min, max));
if (status != AMDSMI_STATUS_SUCCESS)
return status;
@@ -2813,6 +2812,52 @@ amdsmi_status_t amdsmi_get_cpu_current_xgmi_bw(amdsmi_cpusocket_handle socket_ha
return AMDSMI_STATUS_SUCCESS;
}
amdsmi_status_t amdsmi_get_metrics_table_version(amdsmi_cpusocket_handle socket_handle,
uint32_t *metrics_version)
{
amdsmi_status_t status;
uint32_t metrics_tbl_ver;
if (socket_handle == nullptr)
return AMDSMI_STATUS_INVAL;
amd::smi::AMDSmiCpuSocket* socket = nullptr;
amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket);
if (r != AMDSMI_STATUS_SUCCESS)
return r;
status = static_cast<amdsmi_status_t>(esmi_metrics_table_version_get(&metrics_tbl_ver));
*metrics_version = metrics_tbl_ver;
if (status != AMDSMI_STATUS_SUCCESS)
return status;
return AMDSMI_STATUS_SUCCESS;
}
amdsmi_status_t amdsmi_get_metrics_table(amdsmi_cpusocket_handle socket_handle, uint8_t sock_ind,
struct hsmp_metric_table *metrics_table)
{
amdsmi_status_t status;
struct hsmp_metric_table metrics_tbl;
if (socket_handle == nullptr)
return AMDSMI_STATUS_INVAL;
amd::smi::AMDSmiCpuSocket* socket = nullptr;
amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket);
if (r != AMDSMI_STATUS_SUCCESS)
return r;
status = static_cast<amdsmi_status_t>(esmi_metrics_table_get(sock_ind, &metrics_tbl));
*metrics_table = metrics_tbl;
if (status != AMDSMI_STATUS_SUCCESS)
return status;
return AMDSMI_STATUS_SUCCESS;
}
amdsmi_status_t amdsmi_get_number_of_cpu_sockets(uint32_t sockets)
{
amdsmi_status_t status = amd::smi::AMDSmiSystem::getInstance().get_cpu_sockets(sockets);