Added amdsmi cpu family & cpu model

- Updated header and source files
- Updated python interface
- Generated python wrapper for updated header
- Updated the CLI to have cpu family & cpu model
  as part of metric table

Change-Id: Iea440251797270d5d29ffe883b0ad6db790be658
This commit is contained in:
Deepak Mewar
2024-02-02 01:29:46 -05:00
committed by Maisam Arif
parent 8adf3eba1b
commit 6f7273fda5
9 changed files with 132 additions and 4 deletions
+12
View File
@@ -1969,6 +1969,18 @@ class AMDSMICommands():
if (args.cpu_metrics_table):
static_dict["metrics_table"] = {}
try:
cpu_fam = amdsmi_interface.amdsmi_get_cpu_family()
static_dict["metrics_table"]["cpu_family"] = cpu_fam
except amdsmi_exception.AmdSmiLibraryException as e:
static_dict["metrics_table"]["cpu_family"] = "N/A"
logging.debug("Failed to get cpu family | %s", e.get_error_info())
try:
cpu_mod = amdsmi_interface.amdsmi_get_cpu_model()
static_dict["metrics_table"]["cpu_model"] = cpu_mod
except amdsmi_exception.AmdSmiLibraryException as e:
static_dict["metrics_table"]["cpu_model"] = "N/A"
logging.debug("Failed to get cpu model | %s", e.get_error_info())
try:
metrics_table = amdsmi_interface.amdsmi_get_metrics_table(args.cpu)
static_dict["metrics_table"]["response"] = metrics_table
+18
View File
@@ -4963,6 +4963,24 @@ amdsmi_status_t amdsmi_get_metrics_table(amdsmi_processor_handle processor_handl
amdsmi_status_t amdsmi_first_online_core_on_cpu_socket(amdsmi_processor_handle processor_handle,
uint32_t *pcore_ind);
/**
* @brief Get CPU family.
*
* @param[in,out] cpu_family - Input buffer to return the cpu family
*
* @return ::amdsmi_status_t | ::AMDSMI_STATUS_SUCCESS on success, non-zero on fail
*/
amdsmi_status_t amdsmi_get_cpu_family(uint32_t *cpu_family);
/**
* @brief Get CPU model.
*
* @param[in,out] cpu_model - Input buffer to return the cpu model
*
* @return ::amdsmi_status_t | ::AMDSMI_STATUS_SUCCESS on success, non-zero on fail
*/
amdsmi_status_t amdsmi_get_cpu_model(uint32_t *cpu_model);
/**
* @brief Get a description of provided AMDSMI error status for esmi errors.
*
+3
View File
@@ -75,6 +75,9 @@ class AMDSmiSystem {
amdsmi_status_t gpu_index_to_handle(uint32_t gpu_index,
amdsmi_processor_handle* processor_handle);
amdsmi_status_t get_cpu_family(uint32_t *cpu_family);
amdsmi_status_t get_cpu_model(uint32_t *cpu_model);
private:
AMDSmiSystem() : init_flag_(AMDSMI_INIT_AMD_GPUS) {}
+40
View File
@@ -6038,3 +6038,43 @@ try:
except AmdSmiException as e:
print(e)
```
### amdsmi_get_cpu_family
Description: Get cpu family.
Output: cpu family
Exceptions that can be thrown by `amdsmi_get_cpu_family` function:
* `AmdSmiLibraryException`
Example:
```python
try:
cpu_family = amdsmi_get_cpu_family()
print(cpu_family)
except AmdSmiException as e:
print(e)
```
### amdsmi_get_cpu_model
Description: Get cpu model.
Output: cpu model
Exceptions that can be thrown by `amdsmi_get_cpu_model` function:
* `AmdSmiLibraryException`
Example:
```python
try:
cpu_model = amdsmi_get_cpu_model()
print(cpu_model)
except AmdSmiException as e:
print(e)
```
+2
View File
@@ -72,6 +72,8 @@ try:
from .amdsmi_interface import amdsmi_get_metrics_table_version
from .amdsmi_interface import amdsmi_get_metrics_table
from .amdsmi_interface import amdsmi_first_online_core_on_cpu_socket
from .amdsmi_interface import amdsmi_get_cpu_family
from .amdsmi_interface import amdsmi_get_cpu_model
except AttributeError:
pass
+14
View File
@@ -1496,6 +1496,20 @@ def amdsmi_first_online_core_on_cpu_socket(
return pcore_ind.value
def amdsmi_get_cpu_family():
family = ctypes.c_uint32()
_check_res(
amdsmi_wrapper.amdsmi_get_cpu_family(ctypes.byref(family))
)
return family.value
def amdsmi_get_cpu_model():
model = ctypes.c_uint32()
_check_res(
amdsmi_wrapper.amdsmi_get_cpu_model(ctypes.byref(model))
)
return model.value
def amdsmi_init(flag=AmdSmiInitFlags.INIT_AMD_GPUS):
if not isinstance(flag, AmdSmiInitFlags):
raise AmdSmiParameterException(flag, AmdSmiInitFlags)
+9 -2
View File
@@ -2294,6 +2294,12 @@ amdsmi_get_metrics_table.argtypes = [amdsmi_processor_handle, ctypes.POINTER(str
amdsmi_first_online_core_on_cpu_socket = _libraries['libamd_smi.so'].amdsmi_first_online_core_on_cpu_socket
amdsmi_first_online_core_on_cpu_socket.restype = amdsmi_status_t
amdsmi_first_online_core_on_cpu_socket.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32)]
amdsmi_get_cpu_family = _libraries['libamd_smi.so'].amdsmi_get_cpu_family
amdsmi_get_cpu_family.restype = amdsmi_status_t
amdsmi_get_cpu_family.argtypes = [ctypes.POINTER(ctypes.c_uint32)]
amdsmi_get_cpu_model = _libraries['libamd_smi.so'].amdsmi_get_cpu_model
amdsmi_get_cpu_model.restype = amdsmi_status_t
amdsmi_get_cpu_model.argtypes = [ctypes.POINTER(ctypes.c_uint32)]
amdsmi_get_esmi_err_msg = _libraries['libamd_smi.so'].amdsmi_get_esmi_err_msg
amdsmi_get_esmi_err_msg.restype = amdsmi_status_t
amdsmi_get_esmi_err_msg.argtypes = [amdsmi_status_t, ctypes.POINTER(ctypes.POINTER(ctypes.c_char))]
@@ -2490,8 +2496,9 @@ __all__ = \
'amdsmi_get_cpu_current_xgmi_bw', 'amdsmi_get_cpu_ddr_bw',
'amdsmi_get_cpu_dimm_power_consumption',
'amdsmi_get_cpu_dimm_temp_range_and_refresh_rate',
'amdsmi_get_cpu_dimm_thermal_sensor', 'amdsmi_get_cpu_fclk_mclk',
'amdsmi_get_cpu_hsmp_proto_ver', 'amdsmi_get_cpu_prochot_status',
'amdsmi_get_cpu_dimm_thermal_sensor', 'amdsmi_get_cpu_family',
'amdsmi_get_cpu_fclk_mclk', 'amdsmi_get_cpu_hsmp_proto_ver',
'amdsmi_get_cpu_model', 'amdsmi_get_cpu_prochot_status',
'amdsmi_get_cpu_pwr_svi_telemetry_all_rails',
'amdsmi_get_cpu_smu_fw_version',
'amdsmi_get_cpu_socket_c0_residency',
+32
View File
@@ -3081,6 +3081,38 @@ amdsmi_status_t amdsmi_first_online_core_on_cpu_socket(amdsmi_processor_handle p
return AMDSMI_STATUS_SUCCESS;
}
amdsmi_status_t amdsmi_get_cpu_family(uint32_t *cpu_family)
{
amdsmi_status_t status;
uint32_t family;
AMDSMI_CHECK_INIT();
status = amd::smi::AMDSmiSystem::getInstance().get_cpu_family(&family);
if (status != AMDSMI_STATUS_SUCCESS)
return amdsmi_errno_to_esmi_status(status);
*cpu_family = family;
return AMDSMI_STATUS_SUCCESS;
}
amdsmi_status_t amdsmi_get_cpu_model(uint32_t *cpu_model)
{
amdsmi_status_t status;
uint32_t model;
AMDSMI_CHECK_INIT();
status = amd::smi::AMDSmiSystem::getInstance().get_cpu_model(&model);
if (status != AMDSMI_STATUS_SUCCESS)
return amdsmi_errno_to_esmi_status(status);
*cpu_model = model;
return AMDSMI_STATUS_SUCCESS;
}
amdsmi_status_t amdsmi_get_esmi_err_msg(amdsmi_status_t status, const char **status_string)
{
for (auto& iter : amd::smi::esmi_status_map) {
+2 -2
View File
@@ -56,7 +56,7 @@ namespace smi {
#define AMD_SMI_INIT_FLAG_RESRV_TEST1 0x800000000000000 //!< Reserved for test
static amdsmi_status_t get_cpu_family(uint32_t *cpu_family) {
amdsmi_status_t AMDSmiSystem::get_cpu_family(uint32_t *cpu_family) {
amdsmi_status_t ret;
ret = static_cast<amdsmi_status_t>(esmi_cpu_family_get(cpu_family));
@@ -68,7 +68,7 @@ static amdsmi_status_t get_cpu_family(uint32_t *cpu_family) {
}
static amdsmi_status_t get_cpu_model(uint32_t *cpu_model) {
amdsmi_status_t AMDSmiSystem::get_cpu_model(uint32_t *cpu_model) {
amdsmi_status_t ret;
ret = static_cast<amdsmi_status_t>(esmi_cpu_model_get(cpu_model));