Set and get DPM policy for GPU device
Add new APIs to set and get dpm policy for the GPU device. Change-Id: I26fa49cd17d0ce66bda3446c38945a6cf35717ff
This commit is contained in:
committed by
Shuzhou Liu
parent
2f8f34946e
commit
108e6d4ae6
@@ -360,7 +360,6 @@ class AmdSmiProcessorType(IntEnum):
|
||||
NON_AMD_GPU = amdsmi_wrapper.NON_AMD_GPU
|
||||
NON_AMD_CPU = amdsmi_wrapper.NON_AMD_CPU
|
||||
|
||||
|
||||
class AmdSmiEventReader:
|
||||
def __init__(
|
||||
self, processor_handle: amdsmi_wrapper.amdsmi_processor_handle,
|
||||
@@ -2690,6 +2689,19 @@ def amdsmi_set_clk_freq(
|
||||
)
|
||||
)
|
||||
|
||||
def amdsmi_set_dpm_policy(
|
||||
processor_handle: amdsmi_wrapper.amdsmi_processor_handle,
|
||||
policy_id: int,
|
||||
):
|
||||
if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
|
||||
raise AmdSmiParameterException(
|
||||
processor_handle, amdsmi_wrapper.amdsmi_processor_handle
|
||||
)
|
||||
_check_res(
|
||||
amdsmi_wrapper.amdsmi_set_dpm_policy(
|
||||
processor_handle, policy_id
|
||||
)
|
||||
)
|
||||
|
||||
def amdsmi_set_gpu_overdrive_level(
|
||||
processor_handle: amdsmi_wrapper.amdsmi_processor_handle, overdrive_value: int
|
||||
@@ -3249,6 +3261,36 @@ def amdsmi_get_clk_freq(
|
||||
"frequency": list(freq.frequency)[: freq.num_supported - 1],
|
||||
}
|
||||
|
||||
def amdsmi_get_dpm_policy(
|
||||
processor_handle: amdsmi_wrapper.amdsmi_processor_handle,
|
||||
) -> Dict[str, Any]:
|
||||
if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
|
||||
raise AmdSmiParameterException(
|
||||
processor_handle, amdsmi_wrapper.amdsmi_processor_handle
|
||||
)
|
||||
|
||||
policy = amdsmi_wrapper.amdsmi_dpm_policy_t()
|
||||
_check_res(
|
||||
amdsmi_wrapper.amdsmi_get_dpm_policy(
|
||||
processor_handle, ctypes.byref(policy)
|
||||
)
|
||||
)
|
||||
|
||||
polices = []
|
||||
for i in range(0, policy.num_supported):
|
||||
id = policy.policies[i].policy_id
|
||||
desc = policy.policies[i].policy_description
|
||||
polices.append({
|
||||
'policy_id' : id,
|
||||
'policy_description': desc.decode()
|
||||
})
|
||||
current_id = policy.policies[policy.current].policy_id
|
||||
|
||||
return {
|
||||
"num_supported": policy.num_supported,
|
||||
"current_id": current_id,
|
||||
"policies": polices,
|
||||
}
|
||||
|
||||
def amdsmi_get_gpu_od_volt_info(
|
||||
processor_handle: amdsmi_wrapper.amdsmi_processor_handle,
|
||||
|
||||
@@ -746,6 +746,19 @@ amdsmi_card_form_factor_t = ctypes.c_uint32 # enum
|
||||
class struct_amdsmi_pcie_info_t(Structure):
|
||||
pass
|
||||
|
||||
class struct_pcie_static_(Structure):
|
||||
pass
|
||||
|
||||
struct_pcie_static_._pack_ = 1 # source:False
|
||||
struct_pcie_static_._fields_ = [
|
||||
('max_pcie_width', ctypes.c_uint16),
|
||||
('PADDING_0', ctypes.c_ubyte * 2),
|
||||
('max_pcie_speed', ctypes.c_uint32),
|
||||
('pcie_interface_version', ctypes.c_uint32),
|
||||
('slot_type', amdsmi_card_form_factor_t),
|
||||
('reserved', ctypes.c_uint64 * 10),
|
||||
]
|
||||
|
||||
class struct_pcie_metric_(Structure):
|
||||
pass
|
||||
|
||||
@@ -764,19 +777,6 @@ struct_pcie_metric_._fields_ = [
|
||||
('reserved', ctypes.c_uint64 * 13),
|
||||
]
|
||||
|
||||
class struct_pcie_static_(Structure):
|
||||
pass
|
||||
|
||||
struct_pcie_static_._pack_ = 1 # source:False
|
||||
struct_pcie_static_._fields_ = [
|
||||
('max_pcie_width', ctypes.c_uint16),
|
||||
('PADDING_0', ctypes.c_ubyte * 2),
|
||||
('max_pcie_speed', ctypes.c_uint32),
|
||||
('pcie_interface_version', ctypes.c_uint32),
|
||||
('slot_type', amdsmi_card_form_factor_t),
|
||||
('reserved', ctypes.c_uint64 * 10),
|
||||
]
|
||||
|
||||
struct_amdsmi_pcie_info_t._pack_ = 1 # source:False
|
||||
struct_amdsmi_pcie_info_t._fields_ = [
|
||||
('pcie_static', struct_pcie_static_),
|
||||
@@ -1480,6 +1480,27 @@ struct_amdsmi_frequencies_t._fields_ = [
|
||||
]
|
||||
|
||||
amdsmi_frequencies_t = struct_amdsmi_frequencies_t
|
||||
class struct_amdsmi_dpm_policy_entry_t(Structure):
|
||||
pass
|
||||
|
||||
struct_amdsmi_dpm_policy_entry_t._pack_ = 1 # source:False
|
||||
struct_amdsmi_dpm_policy_entry_t._fields_ = [
|
||||
('policy_id', ctypes.c_uint32),
|
||||
('policy_description', ctypes.c_char * 32),
|
||||
]
|
||||
|
||||
amdsmi_dpm_policy_entry_t = struct_amdsmi_dpm_policy_entry_t
|
||||
class struct_amdsmi_dpm_policy_t(Structure):
|
||||
pass
|
||||
|
||||
struct_amdsmi_dpm_policy_t._pack_ = 1 # source:False
|
||||
struct_amdsmi_dpm_policy_t._fields_ = [
|
||||
('num_supported', ctypes.c_uint32),
|
||||
('current', ctypes.c_uint32),
|
||||
('policies', struct_amdsmi_dpm_policy_entry_t * 32),
|
||||
]
|
||||
|
||||
amdsmi_dpm_policy_t = struct_amdsmi_dpm_policy_t
|
||||
class struct_amdsmi_pcie_bandwidth_t(Structure):
|
||||
pass
|
||||
|
||||
@@ -2030,6 +2051,12 @@ amdsmi_set_gpu_overdrive_level.argtypes = [amdsmi_processor_handle, uint32_t]
|
||||
amdsmi_set_clk_freq = _libraries['libamd_smi.so'].amdsmi_set_clk_freq
|
||||
amdsmi_set_clk_freq.restype = amdsmi_status_t
|
||||
amdsmi_set_clk_freq.argtypes = [amdsmi_processor_handle, amdsmi_clk_type_t, uint64_t]
|
||||
amdsmi_get_dpm_policy = _libraries['libamd_smi.so'].amdsmi_get_dpm_policy
|
||||
amdsmi_get_dpm_policy.restype = amdsmi_status_t
|
||||
amdsmi_get_dpm_policy.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_dpm_policy_t)]
|
||||
amdsmi_set_dpm_policy = _libraries['libamd_smi.so'].amdsmi_set_dpm_policy
|
||||
amdsmi_set_dpm_policy.restype = amdsmi_status_t
|
||||
amdsmi_set_dpm_policy.argtypes = [amdsmi_processor_handle, uint32_t]
|
||||
amdsmi_get_lib_version = _libraries['libamd_smi.so'].amdsmi_get_lib_version
|
||||
amdsmi_get_lib_version.restype = amdsmi_status_t
|
||||
amdsmi_get_lib_version.argtypes = [ctypes.POINTER(struct_amdsmi_version_t)]
|
||||
@@ -2486,7 +2513,8 @@ __all__ = \
|
||||
'amdsmi_cpu_apb_enable', 'amdsmi_cpusocket_handle',
|
||||
'amdsmi_ddr_bw_metrics_t', 'amdsmi_dev_perf_level_t',
|
||||
'amdsmi_dimm_power_t', 'amdsmi_dimm_thermal_t',
|
||||
'amdsmi_dpm_level_t', 'amdsmi_driver_info_t',
|
||||
'amdsmi_dpm_level_t', 'amdsmi_dpm_policy_entry_t',
|
||||
'amdsmi_dpm_policy_t', 'amdsmi_driver_info_t',
|
||||
'amdsmi_engine_usage_t', 'amdsmi_error_count_t',
|
||||
'amdsmi_event_group_t', 'amdsmi_event_handle_t',
|
||||
'amdsmi_event_type_t', 'amdsmi_evt_notification_data_t',
|
||||
@@ -2516,10 +2544,10 @@ __all__ = \
|
||||
'amdsmi_get_cpu_socket_power', 'amdsmi_get_cpu_socket_power_cap',
|
||||
'amdsmi_get_cpu_socket_power_cap_max',
|
||||
'amdsmi_get_cpu_socket_temperature', 'amdsmi_get_cpucore_handles',
|
||||
'amdsmi_get_cpusocket_handles', 'amdsmi_get_energy_count',
|
||||
'amdsmi_get_esmi_err_msg', 'amdsmi_get_fw_info',
|
||||
'amdsmi_get_gpu_activity', 'amdsmi_get_gpu_asic_info',
|
||||
'amdsmi_get_gpu_available_counters',
|
||||
'amdsmi_get_cpusocket_handles', 'amdsmi_get_dpm_policy',
|
||||
'amdsmi_get_energy_count', 'amdsmi_get_esmi_err_msg',
|
||||
'amdsmi_get_fw_info', 'amdsmi_get_gpu_activity',
|
||||
'amdsmi_get_gpu_asic_info', 'amdsmi_get_gpu_available_counters',
|
||||
'amdsmi_get_gpu_bad_page_info', 'amdsmi_get_gpu_bdf_id',
|
||||
'amdsmi_get_gpu_board_info', 'amdsmi_get_gpu_cache_info',
|
||||
'amdsmi_get_gpu_compute_partition',
|
||||
@@ -2599,7 +2627,8 @@ __all__ = \
|
||||
'amdsmi_set_cpu_socket_boostlimit',
|
||||
'amdsmi_set_cpu_socket_lclk_dpm_level',
|
||||
'amdsmi_set_cpu_socket_power_cap', 'amdsmi_set_cpu_xgmi_width',
|
||||
'amdsmi_set_gpu_clk_range', 'amdsmi_set_gpu_compute_partition',
|
||||
'amdsmi_set_dpm_policy', 'amdsmi_set_gpu_clk_range',
|
||||
'amdsmi_set_gpu_compute_partition',
|
||||
'amdsmi_set_gpu_event_notification_mask',
|
||||
'amdsmi_set_gpu_fan_speed', 'amdsmi_set_gpu_memory_partition',
|
||||
'amdsmi_set_gpu_od_clk_info', 'amdsmi_set_gpu_od_volt_info',
|
||||
@@ -2625,6 +2654,7 @@ __all__ = \
|
||||
'struct_amdsmi_clk_info_t', 'struct_amdsmi_counter_value_t',
|
||||
'struct_amdsmi_ddr_bw_metrics_t', 'struct_amdsmi_dimm_power_t',
|
||||
'struct_amdsmi_dimm_thermal_t', 'struct_amdsmi_dpm_level_t',
|
||||
'struct_amdsmi_dpm_policy_entry_t', 'struct_amdsmi_dpm_policy_t',
|
||||
'struct_amdsmi_driver_info_t', 'struct_amdsmi_engine_usage_t',
|
||||
'struct_amdsmi_error_count_t',
|
||||
'struct_amdsmi_evt_notification_data_t',
|
||||
|
||||
Reference in New Issue
Block a user