From def17accbe80704f7611ec3e6a3a85873bdca22d Mon Sep 17 00:00:00 2001 From: Maisam Arif Date: Tue, 19 Sep 2023 18:50:03 -0500 Subject: [PATCH] Corrected voltage_read call in amdsmi_get_power_info Change-Id: I4097b3ac5699360d4e91c8b8254431b6b6768c3e Signed-off-by: Maisam Arif --- amdsmi_cli/amdsmi_commands.py | 40 +++++++++++--------------------- py-interface/amdsmi_interface.py | 2 +- src/amd_smi/amd_smi.cc | 39 +++++++++++++++---------------- 3 files changed, 33 insertions(+), 48 deletions(-) diff --git a/amdsmi_cli/amdsmi_commands.py b/amdsmi_cli/amdsmi_commands.py index 664817c1ee..d6600c0bc8 100644 --- a/amdsmi_cli/amdsmi_commands.py +++ b/amdsmi_cli/amdsmi_commands.py @@ -850,10 +850,10 @@ class AMDSMICommands(): if self.helpers.is_linux() and self.helpers.is_baremetal(): if args.power: - power_dict = {'average_socket_power': "N/A", - 'gfx_voltage': "N/A", - 'soc_voltage': "N/A", - 'mem_voltage': "N/A", + power_dict = {'current_power': "N/A", + 'current_gfx_voltage': "N/A", + 'current_soc_voltage': "N/A", + 'current_mem_voltage': "N/A", 'power_limit': "N/A", 'power_management': "N/A"} @@ -868,35 +868,21 @@ class AMDSMICommands(): try: power_measure = amdsmi_interface.amdsmi_get_power_info(args.gpu) - power_dict['average_socket_power'] = power_measure['average_socket_power'] - power_dict['gfx_voltage'] = power_measure['gfx_voltage'] - power_dict['soc_voltage'] = power_measure['soc_voltage'] - power_dict['mem_voltage'] = power_measure['mem_voltage'] - power_dict['power_limit'] = power_measure['power_limit'] + for key, value in power_measure.items(): + if value == 0xFFFFFFFF: + power_dict[key] = "N/A" + else: + power_dict[key] = f"{value}" if self.logger.is_human_readable_format(): - power_dict['average_socket_power'] = f"{power_measure['average_socket_power']} W" - power_dict['gfx_voltage'] = f"{power_measure['gfx_voltage']} mV" - power_dict['soc_voltage'] = f"{power_measure['soc_voltage']} mV" - power_dict['mem_voltage'] = f"{power_measure['mem_voltage']} mV" + power_dict['current_power'] = f"{power_measure['average_socket_power']} W" + power_dict['current_gfx_voltage'] = f"{power_measure['gfx_voltage']} mV" + power_dict['current_soc_voltage'] = f"{power_measure['soc_voltage']} mV" + power_dict['current_mem_voltage'] = f"{power_measure['mem_voltage']} mV" power_dict['power_limit'] = f"{power_measure['power_limit']} W" except amdsmi_exception.AmdSmiLibraryException as e: logging.debug("Failed to get power info for gpu %s | %s", args.gpu, e.get_error_info()) - if self.logger.is_gpuvsmi_compatibility(): - power_dict['current_power'] = power_dict.pop('average_socket_power') - power_dict['current_voltage'] = power_dict.pop('gfx_voltage') - power_dict['current_soc_voltage'] = power_dict.pop('soc_voltage') - power_dict['current_mem_voltage'] = power_dict.pop('mem_voltage') - - try: - power_dict['current_fan_rpm'] = amdsmi_interface.amdsmi_get_gpu_fan_rpms(args.gpu, 0) - if self.logger.is_human_readable_format(): - power_dict['current_fan_rpm'] = f"{power_dict['current_fan_rpm']} RPM" - except amdsmi_exception.AmdSmiLibraryException as e: - power_dict['current_fan_rpm'] = "N/A" - logging.debug("Failed to get fan rpm for gpu %s | %s", args.gpu, e.get_error_info()) - values_dict['power'] = power_dict if args.clock: try: diff --git a/py-interface/amdsmi_interface.py b/py-interface/amdsmi_interface.py index fbb6fcc82f..971a53f576 100644 --- a/py-interface/amdsmi_interface.py +++ b/py-interface/amdsmi_interface.py @@ -946,7 +946,7 @@ def amdsmi_get_gpu_driver_info( def amdsmi_get_power_info( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> Dict[str, Any]: +) -> Dict[str, ctypes.c_uint32]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle diff --git a/src/amd_smi/amd_smi.cc b/src/amd_smi/amd_smi.cc index af64c0c15d..1be040cb20 100644 --- a/src/amd_smi/amd_smi.cc +++ b/src/amd_smi/amd_smi.cc @@ -1668,37 +1668,36 @@ amdsmi_get_power_info(amdsmi_processor_handle processor_handle, amdsmi_power_inf if (info == nullptr) { return AMDSMI_STATUS_INVAL; } - - amdsmi_gpu_metrics_t metrics = {}; - amd::smi::AMDSmiGPUDevice* gpu_device = nullptr; - amdsmi_status_t r = get_gpu_device_from_handle(processor_handle, &gpu_device); - if (r != AMDSMI_STATUS_SUCCESS) - return r; - amdsmi_status_t status; - status = amdsmi_get_gpu_metrics_info(processor_handle, &metrics); - if (status != AMDSMI_STATUS_SUCCESS) { + amd::smi::AMDSmiGPUDevice* gpu_device = nullptr; + status = get_gpu_device_from_handle(processor_handle, &gpu_device); + if (status != AMDSMI_STATUS_SUCCESS) return status; + + info->average_socket_power = 0xFFFFFFFF; + info->gfx_voltage = 0xFFFFFFFF; + info->soc_voltage = 0xFFFFFFFF; // Not implmented yet + info->mem_voltage = 0xFFFFFFFF; // Not implmented yet + info->power_limit = 0xFFFFFFFF; + + amdsmi_gpu_metrics_t metrics = {}; + status = amdsmi_get_gpu_metrics_info(processor_handle, &metrics); + if (status == AMDSMI_STATUS_SUCCESS) { + info->average_socket_power = metrics.average_socket_power; } int64_t voltage_read = 0; - - status = amdsmi_get_gpu_volt_metric(processor_handle, AMDSMI_VOLT_TYPE_VDDGFX, AMDSMI_VOLT_CURRENT, &voltage_read); - if (status != AMDSMI_STATUS_SUCCESS) { - return status; + status = amdsmi_get_gpu_volt_metric(processor_handle, AMDSMI_VOLT_TYPE_VDDGFX, AMDSMI_VOLT_CURRENT, &voltage_read); + if (status == AMDSMI_STATUS_SUCCESS) { + info->gfx_voltage = voltage_read; } int power_limit = 0; status = smi_amdgpu_get_power_cap(gpu_device, &power_limit); - if (status != AMDSMI_STATUS_SUCCESS) { - return status; + if (status == AMDSMI_STATUS_SUCCESS) { + info->power_limit = power_limit; } - info->power_limit = power_limit; - - info->gfx_voltage = voltage_read; - - info->average_socket_power = metrics.average_socket_power; return status; }