[SWDEV-512393] Added amdsmi_get_cpu_affinity_with_scope (#198)
Signed-off-by: Maisam Arif <Maisam.Arif@amd.com> Signed-off-by: Deepak Mewar <deepak.mewar@amd.com>
This commit is contained in:
@@ -86,6 +86,11 @@ from .amdsmi_interface import amdsmi_get_gpu_device_bdf
|
||||
from .amdsmi_interface import amdsmi_get_gpu_device_uuid
|
||||
from .amdsmi_interface import amdsmi_get_gpu_enumeration_info
|
||||
|
||||
# # Functions not dependent on ESMI library
|
||||
from .amdsmi_interface import amdsmi_get_cpu_socket_count
|
||||
from .amdsmi_interface import amdsmi_get_cpu_cores_per_socket
|
||||
from .amdsmi_interface import amdsmi_get_cpu_affinity_with_scope
|
||||
|
||||
# # SW Version Information
|
||||
from .amdsmi_interface import amdsmi_get_gpu_driver_info
|
||||
|
||||
@@ -278,6 +283,7 @@ from .amdsmi_interface import AmdSmiProcessorType
|
||||
from .amdsmi_interface import AmdSmiVirtualizationMode
|
||||
from .amdsmi_interface import AmdSmiVramType
|
||||
from .amdsmi_interface import AmdSmiVramVendor
|
||||
from .amdsmi_interface import AmdSmiAffinityScope
|
||||
|
||||
# Exceptions
|
||||
from .amdsmi_exception import AmdSmiLibraryException
|
||||
|
||||
@@ -520,6 +520,9 @@ class AmdSmiVramVendor(IntEnum):
|
||||
MICRON = amdsmi_wrapper.AMDSMI_VRAM_VENDOR_MICRON
|
||||
UNKNOWN = amdsmi_wrapper.AMDSMI_VRAM_VENDOR_UNKNOWN
|
||||
|
||||
class AmdSmiAffinityScope(IntEnum):
|
||||
NUMA_SCOPE = amdsmi_wrapper.AMDSMI_AFFINITY_SCOPE_NODE
|
||||
SOCKET_SCOPE = amdsmi_wrapper.AMDSMI_AFFINITY_SCOPE_SOCKET
|
||||
|
||||
class AmdSmiEventReader:
|
||||
def __init__(
|
||||
@@ -1738,6 +1741,23 @@ def amdsmi_get_cpu_model_name(
|
||||
)
|
||||
return f"{cpu_info.model_name}"
|
||||
|
||||
def amdsmi_get_cpu_cores_per_socket(sock_count: ctypes.c_uint32()):
|
||||
cps = amdsmi_wrapper.amdsmi_sock_info_t()
|
||||
|
||||
_check_res(
|
||||
amdsmi_wrapper.amdsmi_get_cpu_cores_per_socket(sock_count, cps)
|
||||
)
|
||||
return {"socket_id": cps.socket_id,
|
||||
"cores_per_socket": cps.cores_per_socket
|
||||
}
|
||||
|
||||
def amdsmi_get_cpu_socket_count():
|
||||
sock_count = ctypes.c_uint32()
|
||||
_check_res(
|
||||
amdsmi_wrapper.amdsmi_get_cpu_socket_count(ctypes.byref(sock_count))
|
||||
)
|
||||
return sock_count.value
|
||||
|
||||
def amdsmi_init(flag=AmdSmiInitFlags.INIT_AMD_GPUS):
|
||||
if not isinstance(flag, AmdSmiInitFlags):
|
||||
raise AmdSmiParameterException(flag, AmdSmiInitFlags)
|
||||
@@ -1841,6 +1861,35 @@ def amdsmi_get_gpu_enumeration_info(processor_handle: amdsmi_wrapper.amdsmi_proc
|
||||
|
||||
return enumeration_info
|
||||
|
||||
def amdsmi_get_cpu_affinity_with_scope(
|
||||
processor_handle: amdsmi_wrapper.amdsmi_processor_handle,
|
||||
scope: AmdSmiAffinityScope
|
||||
) -> List[int]:
|
||||
if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
|
||||
raise AmdSmiParameterException(
|
||||
processor_handle, amdsmi_wrapper.amdsmi_processor_handle
|
||||
)
|
||||
|
||||
if not isinstance(scope, AmdSmiAffinityScope):
|
||||
raise AmdSmiParameterException(scope, AmdSmiAffinityScope)
|
||||
|
||||
socket_count = amdsmi_get_cpu_socket_count()
|
||||
sock_info = amdsmi_get_cpu_cores_per_socket(socket_count)
|
||||
core_count = sock_info['cores_per_socket']
|
||||
|
||||
size = ctypes.c_uint32(0)
|
||||
size = (socket_count * core_count)/ (ctypes.sizeof(ctypes.c_uint64) * 8)
|
||||
size = int(math.ceil(size))
|
||||
size = ctypes.c_uint32(size)
|
||||
cpu_set = (ctypes.c_uint64 * size.value)()
|
||||
|
||||
_check_res(
|
||||
amdsmi_wrapper.amdsmi_get_cpu_affinity_with_scope(
|
||||
processor_handle, size, cpu_set, scope)
|
||||
)
|
||||
|
||||
return cpu_set
|
||||
|
||||
def amdsmi_get_gpu_asic_info(
|
||||
processor_handle: amdsmi_wrapper.amdsmi_processor_handle,
|
||||
) -> Dict[str, Any]:
|
||||
|
||||
@@ -2131,6 +2131,15 @@ AMDSMI_VIRTUALIZATION_MODE_HOST = 2
|
||||
AMDSMI_VIRTUALIZATION_MODE_GUEST = 3
|
||||
AMDSMI_VIRTUALIZATION_MODE_PASSTHROUGH = 4
|
||||
amdsmi_virtualization_mode_t = ctypes.c_uint32 # enum
|
||||
|
||||
# values for enumeration 'amdsmi_affinity_scope_t'
|
||||
amdsmi_affinity_scope_t__enumvalues = {
|
||||
0: 'AMDSMI_AFFINITY_SCOPE_NODE',
|
||||
1: 'AMDSMI_AFFINITY_SCOPE_SOCKET',
|
||||
}
|
||||
AMDSMI_AFFINITY_SCOPE_NODE = 0
|
||||
AMDSMI_AFFINITY_SCOPE_SOCKET = 1
|
||||
amdsmi_affinity_scope_t = ctypes.c_uint32 # enum
|
||||
class struct_amdsmi_smu_fw_version_t(Structure):
|
||||
pass
|
||||
|
||||
@@ -2322,6 +2331,16 @@ struct_amdsmi_cpu_info_t._fields_ = [
|
||||
]
|
||||
|
||||
amdsmi_cpu_info_t = struct_amdsmi_cpu_info_t
|
||||
class struct_amdsmi_sock_info_t(Structure):
|
||||
pass
|
||||
|
||||
struct_amdsmi_sock_info_t._pack_ = 1 # source:False
|
||||
struct_amdsmi_sock_info_t._fields_ = [
|
||||
('socket_id', ctypes.c_uint32),
|
||||
('cores_per_socket', ctypes.c_uint32),
|
||||
]
|
||||
|
||||
amdsmi_sock_info_t = struct_amdsmi_sock_info_t
|
||||
uint64_t = ctypes.c_uint64
|
||||
amdsmi_init = _libraries['libamd_smi.so'].amdsmi_init
|
||||
amdsmi_init.restype = amdsmi_status_t
|
||||
@@ -2369,6 +2388,10 @@ amdsmi_get_gpu_device_uuid.argtypes = [amdsmi_processor_handle, ctypes.POINTER(c
|
||||
amdsmi_get_gpu_enumeration_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_enumeration_info
|
||||
amdsmi_get_gpu_enumeration_info.restype = amdsmi_status_t
|
||||
amdsmi_get_gpu_enumeration_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_enumeration_info_t)]
|
||||
uint32_t = ctypes.c_uint32
|
||||
amdsmi_get_cpu_affinity_with_scope = _libraries['libamd_smi.so'].amdsmi_get_cpu_affinity_with_scope
|
||||
amdsmi_get_cpu_affinity_with_scope.restype = amdsmi_status_t
|
||||
amdsmi_get_cpu_affinity_with_scope.argtypes = [amdsmi_processor_handle, uint32_t, ctypes.POINTER(ctypes.c_uint64), amdsmi_affinity_scope_t]
|
||||
amdsmi_get_gpu_id = _libraries['libamd_smi.so'].amdsmi_get_gpu_id
|
||||
amdsmi_get_gpu_id.restype = amdsmi_status_t
|
||||
amdsmi_get_gpu_id.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)]
|
||||
@@ -2378,7 +2401,6 @@ amdsmi_get_gpu_revision.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctyp
|
||||
amdsmi_get_gpu_vendor_name = _libraries['libamd_smi.so'].amdsmi_get_gpu_vendor_name
|
||||
amdsmi_get_gpu_vendor_name.restype = amdsmi_status_t
|
||||
amdsmi_get_gpu_vendor_name.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_char), size_t]
|
||||
uint32_t = ctypes.c_uint32
|
||||
amdsmi_get_gpu_vram_vendor = _libraries['libamd_smi.so'].amdsmi_get_gpu_vram_vendor
|
||||
amdsmi_get_gpu_vram_vendor.restype = amdsmi_status_t
|
||||
amdsmi_get_gpu_vram_vendor.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_char), uint32_t]
|
||||
@@ -2939,6 +2961,12 @@ amdsmi_get_cpu_model_name.argtypes = [amdsmi_processor_handle, ctypes.POINTER(st
|
||||
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))]
|
||||
amdsmi_get_cpu_cores_per_socket = _libraries['libamd_smi.so'].amdsmi_get_cpu_cores_per_socket
|
||||
amdsmi_get_cpu_cores_per_socket.restype = amdsmi_status_t
|
||||
amdsmi_get_cpu_cores_per_socket.argtypes = [uint32_t, ctypes.POINTER(struct_amdsmi_sock_info_t)]
|
||||
amdsmi_get_cpu_socket_count = _libraries['libamd_smi.so'].amdsmi_get_cpu_socket_count
|
||||
amdsmi_get_cpu_socket_count.restype = amdsmi_status_t
|
||||
amdsmi_get_cpu_socket_count.argtypes = [ctypes.POINTER(ctypes.c_uint32)]
|
||||
__all__ = \
|
||||
['AGG_BW0', 'AMDSMI_ACCELERATOR_DECODER',
|
||||
'AMDSMI_ACCELERATOR_DMA', 'AMDSMI_ACCELERATOR_ENCODER',
|
||||
@@ -2950,6 +2978,7 @@ __all__ = \
|
||||
'AMDSMI_ACCELERATOR_PARTITION_QPX',
|
||||
'AMDSMI_ACCELERATOR_PARTITION_SPX',
|
||||
'AMDSMI_ACCELERATOR_PARTITION_TPX', 'AMDSMI_ACCELERATOR_XCC',
|
||||
'AMDSMI_AFFINITY_SCOPE_NODE', 'AMDSMI_AFFINITY_SCOPE_SOCKET',
|
||||
'AMDSMI_CACHE_PROPERTY_CPU_CACHE',
|
||||
'AMDSMI_CACHE_PROPERTY_DATA_CACHE',
|
||||
'AMDSMI_CACHE_PROPERTY_ENABLED',
|
||||
@@ -3173,18 +3202,18 @@ __all__ = \
|
||||
'amdsmi_accelerator_partition_profile_t',
|
||||
'amdsmi_accelerator_partition_resource_profile_t',
|
||||
'amdsmi_accelerator_partition_resource_type_t',
|
||||
'amdsmi_accelerator_partition_type_t', 'amdsmi_asic_info_t',
|
||||
'amdsmi_bdf_t', 'amdsmi_bit_field_t', 'amdsmi_board_info_t',
|
||||
'amdsmi_cache_property_type_t', 'amdsmi_card_form_factor_t',
|
||||
'amdsmi_clean_gpu_local_data', 'amdsmi_clk_info_t',
|
||||
'amdsmi_clk_limit_type_t', 'amdsmi_clk_type_t',
|
||||
'amdsmi_compute_partition_type_t', 'amdsmi_container_types_t',
|
||||
'amdsmi_counter_command_t', 'amdsmi_counter_value_t',
|
||||
'amdsmi_cper_guid_t', 'amdsmi_cper_hdr_t',
|
||||
'amdsmi_cper_notify_type_t', 'amdsmi_cper_sev_t',
|
||||
'amdsmi_cper_timestamp_t', 'amdsmi_cper_valid_bits_t',
|
||||
'amdsmi_cpu_apb_disable', 'amdsmi_cpu_apb_enable',
|
||||
'amdsmi_cpu_info_t', 'amdsmi_cpu_util_t',
|
||||
'amdsmi_accelerator_partition_type_t', 'amdsmi_affinity_scope_t',
|
||||
'amdsmi_asic_info_t', 'amdsmi_bdf_t', 'amdsmi_bit_field_t',
|
||||
'amdsmi_board_info_t', 'amdsmi_cache_property_type_t',
|
||||
'amdsmi_card_form_factor_t', 'amdsmi_clean_gpu_local_data',
|
||||
'amdsmi_clk_info_t', 'amdsmi_clk_limit_type_t',
|
||||
'amdsmi_clk_type_t', 'amdsmi_compute_partition_type_t',
|
||||
'amdsmi_container_types_t', 'amdsmi_counter_command_t',
|
||||
'amdsmi_counter_value_t', 'amdsmi_cper_guid_t',
|
||||
'amdsmi_cper_hdr_t', 'amdsmi_cper_notify_type_t',
|
||||
'amdsmi_cper_sev_t', 'amdsmi_cper_timestamp_t',
|
||||
'amdsmi_cper_valid_bits_t', 'amdsmi_cpu_apb_disable',
|
||||
'amdsmi_cpu_apb_enable', 'amdsmi_cpu_info_t', 'amdsmi_cpu_util_t',
|
||||
'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',
|
||||
@@ -3198,11 +3227,12 @@ __all__ = \
|
||||
'amdsmi_free_name_value_pairs', 'amdsmi_freq_ind_t',
|
||||
'amdsmi_freq_volt_region_t', 'amdsmi_frequencies_t',
|
||||
'amdsmi_frequency_range_t', 'amdsmi_fw_block_t',
|
||||
'amdsmi_fw_info_t', 'amdsmi_get_afids_from_cper',
|
||||
'amdsmi_fw_info_t', 'amdsmi_get_afids_from_cper',
|
||||
'amdsmi_get_cpu_affinity_with_scope',
|
||||
'amdsmi_get_clk_freq', 'amdsmi_get_clock_info',
|
||||
'amdsmi_get_cpu_cclk_limit', 'amdsmi_get_cpu_core_boostlimit',
|
||||
'amdsmi_get_cpu_core_current_freq_limit',
|
||||
'amdsmi_get_cpu_core_energy',
|
||||
'amdsmi_get_cpu_core_energy', 'amdsmi_get_cpu_cores_per_socket',
|
||||
'amdsmi_get_cpu_current_io_bandwidth',
|
||||
'amdsmi_get_cpu_current_xgmi_bw', 'amdsmi_get_cpu_ddr_bw',
|
||||
'amdsmi_get_cpu_dimm_power_consumption',
|
||||
@@ -3215,6 +3245,7 @@ __all__ = \
|
||||
'amdsmi_get_cpu_pwr_svi_telemetry_all_rails',
|
||||
'amdsmi_get_cpu_smu_fw_version',
|
||||
'amdsmi_get_cpu_socket_c0_residency',
|
||||
'amdsmi_get_cpu_socket_count',
|
||||
'amdsmi_get_cpu_socket_current_active_freq_limit',
|
||||
'amdsmi_get_cpu_socket_energy',
|
||||
'amdsmi_get_cpu_socket_freq_range',
|
||||
@@ -3332,8 +3363,9 @@ __all__ = \
|
||||
'amdsmi_set_gpu_process_isolation', 'amdsmi_set_power_cap',
|
||||
'amdsmi_set_soc_pstate', 'amdsmi_set_xgmi_plpd',
|
||||
'amdsmi_shut_down', 'amdsmi_smu_fw_version_t',
|
||||
'amdsmi_socket_handle', 'amdsmi_status_code_to_string',
|
||||
'amdsmi_status_t', 'amdsmi_stop_gpu_event_notification',
|
||||
'amdsmi_sock_info_t', 'amdsmi_socket_handle',
|
||||
'amdsmi_status_code_to_string', 'amdsmi_status_t',
|
||||
'amdsmi_stop_gpu_event_notification',
|
||||
'amdsmi_temp_range_refresh_rate_t', 'amdsmi_temperature_metric_t',
|
||||
'amdsmi_temperature_type_t', 'amdsmi_topo_get_link_type',
|
||||
'amdsmi_topo_get_link_weight', 'amdsmi_topo_get_numa_node_number',
|
||||
@@ -3380,7 +3412,7 @@ __all__ = \
|
||||
'struct_amdsmi_proc_info_t', 'struct_amdsmi_process_info_t',
|
||||
'struct_amdsmi_range_t', 'struct_amdsmi_ras_feature_t',
|
||||
'struct_amdsmi_retired_page_record_t',
|
||||
'struct_amdsmi_smu_fw_version_t',
|
||||
'struct_amdsmi_smu_fw_version_t', 'struct_amdsmi_sock_info_t',
|
||||
'struct_amdsmi_temp_range_refresh_rate_t',
|
||||
'struct_amdsmi_topology_nearest_t',
|
||||
'struct_amdsmi_utilization_counter_t',
|
||||
|
||||
Reference in New Issue
Block a user