SWDEV-361376 - Added additional API calls to the python interface

- Added performance counter API calls
- Added part of unsupported functions in virtual env API calls
- README for both additions

Change-Id: I6fdf1fe83370975011fe4ec11c0b0ca2bab0a1b8
Signed-off-by: Dalibor Stanisavljevic <Dalibor.Stanisavljevic@amd.com>
Bu işleme şunda yer alıyor:
Dalibor Stanisavljevic
2022-11-10 10:11:59 +01:00
ebeveyn 62a69fb802
işleme f9f792230e
3 değiştirilmiş dosya ile 681 ekleme ve 9 silme
+260 -1
Dosyayı Görüntüle
@@ -1071,7 +1071,9 @@ def amdsmi_get_pcie_link_caps(
def amdsmi_get_device_handle_from_bdf(
bdf_info: Union[amdsmi_wrapper.amdsmi_bdf_t, str],
) -> amdsmi_wrapper.amdsmi_device_handle:
if not isinstance(bdf_info, amdsmi_wrapper.amdsmi_bdf_t) and not isinstance(bdf_info, str):
if not isinstance(bdf_info, amdsmi_wrapper.amdsmi_bdf_t) and not isinstance(
bdf_info, str
):
raise AmdSmiParameterException(bdf_info, amdsmi_wrapper.amdsmi_bdf_t)
if isinstance(bdf_info, str):
@@ -1099,6 +1101,263 @@ def amdsmi_get_device_handle_from_bdf(
return device_handle
def amdsmi_dev_counter_group_supported(
device_handle: amdsmi_wrapper.amdsmi_device_handle,
event_group: AmdSmiEventGroup,
):
if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle):
raise AmdSmiParameterException(
device_handle, amdsmi_wrapper.amdsmi_device_handle
)
if not isinstance(event_group, AmdSmiEventGroup):
raise AmdSmiParameterException(event_group, AmdSmiEventGroup)
_check_res(
amdsmi_wrapper.amdsmi_dev_counter_group_supported(device_handle, event_group)
)
def amdsmi_dev_counter_create(
device_handle: amdsmi_wrapper.amdsmi_device_handle,
event_type: AmdSmiEventType,
) -> amdsmi_wrapper.amdsmi_event_handle_t:
if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle):
raise AmdSmiParameterException(
device_handle, amdsmi_wrapper.amdsmi_device_handle
)
if not isinstance(event_type, AmdSmiEventType):
raise AmdSmiParameterException(event_type, AmdSmiEventType)
event_handle = amdsmi_wrapper.amdsmi_event_handle_t()
_check_res(
amdsmi_wrapper.amdsmi_dev_counter_create(
device_handle, event_type, ctypes.byref(event_handle)
)
)
return event_handle
def amdsmi_dev_counter_destroy(event_handle: amdsmi_wrapper.amdsmi_event_handle_t):
if not isinstance(event_handle, amdsmi_wrapper.amdsmi_event_handle_t):
raise AmdSmiParameterException(
event_handle, amdsmi_wrapper.amdsmi_event_handle_t
)
_check_res(amdsmi_wrapper.amdsmi_dev_counter_destroy(event_handle))
def amdsmi_counter_control(
event_handle: amdsmi_wrapper.amdsmi_event_handle_t,
counter_command: AmdSmiCounterCommand,
):
if not isinstance(event_handle, amdsmi_wrapper.amdsmi_event_handle_t):
raise AmdSmiParameterException(
event_handle, amdsmi_wrapper.amdsmi_event_handle_t
)
if not isinstance(counter_command, AmdSmiCounterCommand):
raise AmdSmiParameterException(counter_command, AmdSmiCounterCommand)
command_args = ctypes.c_void_p()
_check_res(
amdsmi_wrapper.amdsmi_counter_control(
event_handle, counter_command, command_args
)
)
def amdsmi_counter_read(
event_handle: amdsmi_wrapper.amdsmi_event_handle_t,
) -> Dict[str, Any]:
if not isinstance(event_handle, amdsmi_wrapper.amdsmi_event_handle_t):
raise AmdSmiParameterException(
event_handle, amdsmi_wrapper.amdsmi_event_handle_t
)
counter_value = amdsmi_wrapper.amdsmi_counter_value_t()
_check_res(
amdsmi_wrapper.amdsmi_counter_read(event_handle, ctypes.byref(counter_value))
)
return {
"value": counter_value.value,
"time_enabled": counter_value.time_enabled,
"time_running": counter_value.time_running
}
def amdsmi_counter_available_counters_get(
device_handle: amdsmi_wrapper.amdsmi_device_handle,
event_group: AmdSmiEventGroup,
) -> int:
if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle):
raise AmdSmiParameterException(
device_handle, amdsmi_wrapper.amdsmi_device_handle
)
if not isinstance(event_group, AmdSmiEventGroup):
raise AmdSmiParameterException(event_group, AmdSmiEventGroup)
available = amdsmi_wrapper.c_uint32()
_check_res(
amdsmi_wrapper.amdsmi_counter_available_counters_get(
device_handle, event_group, ctypes.byref(available)
)
)
return available.value
def amdsmi_dev_perf_level_set(
device_handle: amdsmi_wrapper.amdsmi_device_handle,
perf_level: AmdSmiDevPerfLevel,
):
if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle):
raise AmdSmiParameterException(
device_handle, amdsmi_wrapper.amdsmi_device_handle
)
if not isinstance(perf_level, AmdSmiDevPerfLevel):
raise AmdSmiParameterException(perf_level, AmdSmiDevPerfLevel)
_check_res(amdsmi_wrapper.amdsmi_dev_perf_level_set(device_handle, perf_level))
def amdsmi_dev_power_profile_presets_get(
device_handle: amdsmi_wrapper.amdsmi_device_handle, sensor_idx: int
) -> Dict[str, Any]:
if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle):
raise AmdSmiParameterException(
device_handle, amdsmi_wrapper.amdsmi_device_handle
)
if not isinstance(sensor_idx, int):
raise AmdSmiParameterException(sensor_idx, int)
sensor_idx = amdsmi_wrapper.c_uint32(sensor_idx)
status = amdsmi_wrapper.amdsmi_power_profile_status_t()
_check_res(
amdsmi_wrapper.amdsmi_dev_power_profile_presets_get(
device_handle, sensor_idx, ctypes.byref(status)
)
)
return {
"available_profiles": status.available_profiles,
"current": status.current,
"num_profiles": status.num_profiles
}
def amdsmi_dev_gpu_reset(device_handle: amdsmi_wrapper.amdsmi_device_handle):
if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle):
raise AmdSmiParameterException(
device_handle, amdsmi_wrapper.amdsmi_device_handle
)
_check_res(amdsmi_wrapper.amdsmi_dev_gpu_reset(device_handle))
def amdsmi_perf_determinism_mode_set(
device_handle: amdsmi_wrapper.amdsmi_device_handle, clock_value: int
):
if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle):
raise AmdSmiParameterException(
device_handle, amdsmi_wrapper.amdsmi_device_handle
)
if not isinstance(clock_value, int):
raise AmdSmiParameterException(clock_value, int)
clock_value = amdsmi_wrapper.c_uint64(clock_value)
_check_res(
amdsmi_wrapper.amdsmi_perf_determinism_mode_set(device_handle, clock_value)
)
def amdsmi_dev_fan_speed_set(
device_handle: amdsmi_wrapper.amdsmi_device_handle, sensor_idx: int, fan_speed: int
):
if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle):
raise AmdSmiParameterException(
device_handle, amdsmi_wrapper.amdsmi_device_handle
)
if not isinstance(sensor_idx, int):
raise AmdSmiParameterException(sensor_idx, int)
if not isinstance(fan_speed, int):
raise AmdSmiParameterException(fan_speed, int)
sensor_idx = amdsmi_wrapper.c_uint32(sensor_idx)
fan_speed = amdsmi_wrapper.c_uint64(fan_speed)
_check_res(
amdsmi_wrapper.amdsmi_dev_fan_speed_set(device_handle, sensor_idx, fan_speed)
)
def amdsmi_dev_fan_reset(
device_handle: amdsmi_wrapper.amdsmi_device_handle, sensor_idx: int
):
if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle):
raise AmdSmiParameterException(
device_handle, amdsmi_wrapper.amdsmi_device_handle
)
if not isinstance(sensor_idx, int):
raise AmdSmiParameterException(sensor_idx, int)
sensor_idx = amdsmi_wrapper.c_uint32(sensor_idx)
_check_res(amdsmi_wrapper.amdsmi_dev_fan_reset(device_handle, sensor_idx))
def amdsmi_dev_gpu_clk_freq_set(
device_handle: amdsmi_wrapper.amdsmi_device_handle,
clk_type: AmdSmiClockType,
freq_bitmask: int,
):
if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle):
raise AmdSmiParameterException(
device_handle, amdsmi_wrapper.amdsmi_device_handle
)
if not isinstance(clk_type, AmdSmiClockType):
raise AmdSmiParameterException(clk_type, AmdSmiParameterException)
if not isinstance(freq_bitmask, int):
raise AmdSmiParameterException(freq_bitmask, int)
freq_bitmask = amdsmi_wrapper.c_uint64(freq_bitmask)
_check_res(
amdsmi_wrapper.amdsmi_dev_gpu_clk_freq_set(
device_handle, clk_type, freq_bitmask
)
)
def amdsmi_dev_overdrive_level_set_v1(
device_handle: amdsmi_wrapper.amdsmi_device_handle, overdrive_value: int
):
if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle):
raise AmdSmiParameterException(
device_handle, amdsmi_wrapper.amdsmi_device_handle
)
if not isinstance(overdrive_value, int):
raise AmdSmiParameterException(overdrive_value, int)
overdrive_value = amdsmi_wrapper.c_uint32(overdrive_value)
_check_res(
amdsmi_wrapper.amdsmi_dev_overdrive_level_set_v1(device_handle, overdrive_value)
)
def amdsmi_dev_overdrive_level_set(
device_handle: amdsmi_wrapper.amdsmi_device_handle, overdrive_value: int
):
if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle):
raise AmdSmiParameterException(
device_handle, amdsmi_wrapper.amdsmi_device_handle
)
if not isinstance(overdrive_value, int):
raise AmdSmiParameterException(overdrive_value, int)
overdrive_value = amdsmi_wrapper.c_uint32(overdrive_value)
_check_res(
amdsmi_wrapper.amdsmi_dev_overdrive_level_set(device_handle, overdrive_value)
)
def amdsmi_dev_supported_func_iterator_open(
device_handle: amdsmi_wrapper.amdsmi_device_handle,
) -> amdsmi_wrapper.amdsmi_func_id_iter_handle_t: