[SWDEV-496693]GPU Metrics 1.7
Features added:
- [SWDEV-475244] Add new interface to get max memory bandwidth
Updated API: amdsmi_get_gpu_vram_info
Updated: struct amdsmi_vram_info_t to include vram_max_bandwidth
CLI: amd-smi static --vram
- [SWDEV-488349] Add new interface for XGMI link status
New API: amdsmi_get_gpu_xgmi_link_status
CLI: amd-smi xgmi --link-status
Signed-off-by: Juan Castillo <juan.castillo@amd.com>
Change-Id: I1aa35b741136eb4f02f7ea9a95b865886273eb72
[ROCm/amdsmi commit: f8b8347627]
This commit is contained in:
committed by
Arif, Maisam
parent
01d303806a
commit
2ddb2ef032
@@ -105,6 +105,7 @@ from .amdsmi_interface import amdsmi_get_clock_info
|
||||
from .amdsmi_interface import amdsmi_get_pcie_info
|
||||
from .amdsmi_interface import amdsmi_get_gpu_bad_page_info
|
||||
from .amdsmi_interface import amdsmi_get_violation_status
|
||||
from .amdsmi_interface import amdsmi_get_gpu_xgmi_link_status
|
||||
|
||||
# # Process Information
|
||||
from .amdsmi_interface import amdsmi_get_gpu_process_list
|
||||
|
||||
@@ -1818,15 +1818,50 @@ def amdsmi_get_gpu_vram_info(
|
||||
amdsmi_wrapper.amdsmi_get_gpu_vram_info(
|
||||
processor_handle, ctypes.byref(vram_info))
|
||||
)
|
||||
|
||||
return {
|
||||
"vram_type": vram_info.vram_type,
|
||||
"vram_vendor": vram_info.vram_vendor,
|
||||
"vram_size": vram_info.vram_size,
|
||||
"vram_bit_width": vram_info.vram_bit_width
|
||||
"vram_bit_width": _validate_if_max_uint(vram_info.vram_bit_width, MaxUIntegerTypes.UINT32_T),
|
||||
"vram_max_bandwidth": _validate_if_max_uint(vram_info.vram_max_bandwidth, MaxUIntegerTypes.UINT64_T),
|
||||
}
|
||||
|
||||
|
||||
def amdsmi_get_gpu_xgmi_link_status(
|
||||
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
|
||||
)
|
||||
status_info = amdsmi_wrapper.amdsmi_xgmi_link_status_t()
|
||||
_check_res(
|
||||
amdsmi_wrapper.amdsmi_get_gpu_xgmi_link_status(
|
||||
processor_handle, ctypes.byref(status_info))
|
||||
)
|
||||
|
||||
link_status = []
|
||||
count = 0
|
||||
for link in status_info.status:
|
||||
if count == status_info.total_links:
|
||||
break
|
||||
if amdsmi_wrapper.amdsmi_xgmi_link_status_type_t__enumvalues[link] == 'AMDSMI_XGMI_LINK_DISABLE': # XGMI link is disabled
|
||||
link_status.append("X")
|
||||
elif amdsmi_wrapper.amdsmi_xgmi_link_status_type_t__enumvalues[link] == 'AMDSMI_XGMI_LINK_UP': # XGMI Link is up
|
||||
link_status.append("U")
|
||||
elif amdsmi_wrapper.amdsmi_xgmi_link_status_type_t__enumvalues[link] == 'AMDSMI_XGMI_LINK_DOWN': # XGMI Link is down
|
||||
link_status.append("D")
|
||||
else:
|
||||
link_status.append("N/A")
|
||||
count += 1
|
||||
|
||||
return_dict = {
|
||||
"status" : link_status,
|
||||
"total_links": status_info.total_links,
|
||||
}
|
||||
return return_dict
|
||||
|
||||
|
||||
def amdsmi_get_gpu_cache_info(
|
||||
processor_handle: amdsmi_wrapper.amdsmi_processor_handle,
|
||||
) -> List[Dict[str, Any]]:
|
||||
@@ -3863,7 +3898,10 @@ def amdsmi_get_gpu_metrics_info(
|
||||
"xcp_stats.jpeg_busy": list(gpu_metrics.xcp_stats),
|
||||
"xcp_stats.vcn_busy": list(gpu_metrics.xcp_stats),
|
||||
"xcp_stats.gfx_busy_acc": list(gpu_metrics.xcp_stats),
|
||||
"xcp_stats.gfx_below_host_limit_acc": list(gpu_metrics.xcp_stats),
|
||||
"pcie_lc_perf_other_end_recovery": _validate_if_max_uint(gpu_metrics.pcie_lc_perf_other_end_recovery, MaxUIntegerTypes.UINT32_T),
|
||||
"vram_max_bandwidth": _validate_if_max_uint(gpu_metrics.vram_max_bandwidth, MaxUIntegerTypes.UINT64_T),
|
||||
"xgmi_link_status": _validate_if_max_uint(list(gpu_metrics.xgmi_link_status), MaxUIntegerTypes.UINT16_T),
|
||||
}
|
||||
|
||||
# Create 2d array with each XCD's stats
|
||||
@@ -3893,6 +3931,12 @@ def amdsmi_get_gpu_metrics_info(
|
||||
for val in item.gfx_busy_acc:
|
||||
print_xcp_detail.append(_validate_if_max_uint(val, MaxUIntegerTypes.UINT64_T, isActivity=True))
|
||||
gpu_metrics_output[k][curr_xcp] = print_xcp_detail
|
||||
if 'xcp_stats.gfx_below_host_limit_acc' in k:
|
||||
for curr_xcp, item in enumerate(v):
|
||||
print_xcp_detail = []
|
||||
for val in item.gfx_below_host_limit_acc:
|
||||
print_xcp_detail.append(_validate_if_max_uint(val, MaxUIntegerTypes.UINT64_T, isActivity=True))
|
||||
gpu_metrics_output[k][curr_xcp] = print_xcp_detail
|
||||
return gpu_metrics_output
|
||||
|
||||
|
||||
|
||||
@@ -1044,7 +1044,8 @@ struct_amdsmi_vram_info_t._fields_ = [
|
||||
('vram_size', ctypes.c_uint64),
|
||||
('vram_bit_width', ctypes.c_uint32),
|
||||
('PADDING_0', ctypes.c_ubyte * 4),
|
||||
('reserved', ctypes.c_uint64 * 5),
|
||||
('vram_max_bandwidth', ctypes.c_uint64),
|
||||
('reserved', ctypes.c_uint64 * 4),
|
||||
]
|
||||
|
||||
amdsmi_vram_info_t = struct_amdsmi_vram_info_t
|
||||
@@ -1119,6 +1120,16 @@ amdsmi_process_handle_t = ctypes.c_uint32
|
||||
class struct_amdsmi_proc_info_t(Structure):
|
||||
pass
|
||||
|
||||
class struct_engine_usage_(Structure):
|
||||
pass
|
||||
|
||||
struct_engine_usage_._pack_ = 1 # source:False
|
||||
struct_engine_usage_._fields_ = [
|
||||
('gfx', ctypes.c_uint64),
|
||||
('enc', ctypes.c_uint64),
|
||||
('reserved', ctypes.c_uint32 * 12),
|
||||
]
|
||||
|
||||
class struct_memory_usage_(Structure):
|
||||
pass
|
||||
|
||||
@@ -1130,16 +1141,6 @@ struct_memory_usage_._fields_ = [
|
||||
('reserved', ctypes.c_uint32 * 10),
|
||||
]
|
||||
|
||||
class struct_engine_usage_(Structure):
|
||||
pass
|
||||
|
||||
struct_engine_usage_._pack_ = 1 # source:False
|
||||
struct_engine_usage_._fields_ = [
|
||||
('gfx', ctypes.c_uint64),
|
||||
('enc', ctypes.c_uint64),
|
||||
('reserved', ctypes.c_uint32 * 12),
|
||||
]
|
||||
|
||||
struct_amdsmi_proc_info_t._pack_ = 1 # source:False
|
||||
struct_amdsmi_proc_info_t._fields_ = [
|
||||
('name', ctypes.c_char * 256),
|
||||
@@ -1739,6 +1740,7 @@ struct_amdsmi_gpu_xcp_metrics_t._fields_ = [
|
||||
('jpeg_busy', ctypes.c_uint16 * 32),
|
||||
('vcn_busy', ctypes.c_uint16 * 4),
|
||||
('gfx_busy_acc', ctypes.c_uint64 * 8),
|
||||
('gfx_below_host_limit_acc', ctypes.c_uint64 * 8),
|
||||
]
|
||||
|
||||
amdsmi_gpu_xcp_metrics_t = struct_amdsmi_gpu_xcp_metrics_t
|
||||
@@ -1820,9 +1822,34 @@ struct_amdsmi_gpu_metrics_t._fields_ = [
|
||||
('xcp_stats', struct_amdsmi_gpu_xcp_metrics_t * 8),
|
||||
('pcie_lc_perf_other_end_recovery', ctypes.c_uint32),
|
||||
('PADDING_5', ctypes.c_ubyte * 4),
|
||||
('vram_max_bandwidth', ctypes.c_uint64),
|
||||
('xgmi_link_status', ctypes.c_uint16 * 8),
|
||||
]
|
||||
|
||||
amdsmi_gpu_metrics_t = struct_amdsmi_gpu_metrics_t
|
||||
|
||||
# values for enumeration 'amdsmi_xgmi_link_status_type_t'
|
||||
amdsmi_xgmi_link_status_type_t__enumvalues = {
|
||||
0: 'AMDSMI_XGMI_LINK_DOWN',
|
||||
1: 'AMDSMI_XGMI_LINK_UP',
|
||||
2: 'AMDSMI_XGMI_LINK_DISABLE',
|
||||
}
|
||||
AMDSMI_XGMI_LINK_DOWN = 0
|
||||
AMDSMI_XGMI_LINK_UP = 1
|
||||
AMDSMI_XGMI_LINK_DISABLE = 2
|
||||
amdsmi_xgmi_link_status_type_t = ctypes.c_uint32 # enum
|
||||
class struct_amdsmi_xgmi_link_status_t(Structure):
|
||||
pass
|
||||
|
||||
struct_amdsmi_xgmi_link_status_t._pack_ = 1 # source:False
|
||||
struct_amdsmi_xgmi_link_status_t._fields_ = [
|
||||
('total_links', ctypes.c_uint32),
|
||||
('status', amdsmi_xgmi_link_status_type_t * 8),
|
||||
('PADDING_0', ctypes.c_ubyte * 4),
|
||||
('reserved', ctypes.c_uint64 * 7),
|
||||
]
|
||||
|
||||
amdsmi_xgmi_link_status_t = struct_amdsmi_xgmi_link_status_t
|
||||
class struct_amdsmi_name_value_t(Structure):
|
||||
pass
|
||||
|
||||
@@ -2397,6 +2424,9 @@ amdsmi_get_pcie_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_
|
||||
amdsmi_get_xgmi_info = _libraries['libamd_smi.so'].amdsmi_get_xgmi_info
|
||||
amdsmi_get_xgmi_info.restype = amdsmi_status_t
|
||||
amdsmi_get_xgmi_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_xgmi_info_t)]
|
||||
amdsmi_get_gpu_xgmi_link_status = _libraries['libamd_smi.so'].amdsmi_get_gpu_xgmi_link_status
|
||||
amdsmi_get_gpu_xgmi_link_status.restype = amdsmi_status_t
|
||||
amdsmi_get_gpu_xgmi_link_status.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_xgmi_link_status_t)]
|
||||
amdsmi_get_fw_info = _libraries['libamd_smi.so'].amdsmi_get_fw_info
|
||||
amdsmi_get_fw_info.restype = amdsmi_status_t
|
||||
amdsmi_get_fw_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_fw_info_t)]
|
||||
@@ -2763,8 +2793,9 @@ __all__ = \
|
||||
'AMDSMI_VRAM_VENDOR__PLACEHOLDER3',
|
||||
'AMDSMI_VRAM_VENDOR__PLACEHOLDER4',
|
||||
'AMDSMI_VRAM_VENDOR__PLACEHOLDER5', 'AMDSMI_VRAM_VENDOR__SAMSUNG',
|
||||
'AMDSMI_VRAM_VENDOR__WINBOND', 'AMDSMI_XGMI_STATUS_ERROR',
|
||||
'AMDSMI_XGMI_STATUS_MULTIPLE_ERRORS',
|
||||
'AMDSMI_VRAM_VENDOR__WINBOND', 'AMDSMI_XGMI_LINK_DISABLE',
|
||||
'AMDSMI_XGMI_LINK_DOWN', 'AMDSMI_XGMI_LINK_UP',
|
||||
'AMDSMI_XGMI_STATUS_ERROR', 'AMDSMI_XGMI_STATUS_MULTIPLE_ERRORS',
|
||||
'AMDSMI_XGMI_STATUS_NO_ERRORS', 'CLK_LIMIT_MAX', 'CLK_LIMIT_MIN',
|
||||
'RD_BW0', 'WR_BW0', 'amd_metrics_table_header_t',
|
||||
'amdsmi_accelerator_partition_profile_t',
|
||||
@@ -2851,7 +2882,8 @@ __all__ = \
|
||||
'amdsmi_get_gpu_total_ecc_count', 'amdsmi_get_gpu_vbios_info',
|
||||
'amdsmi_get_gpu_vendor_name', 'amdsmi_get_gpu_volt_metric',
|
||||
'amdsmi_get_gpu_vram_info', 'amdsmi_get_gpu_vram_usage',
|
||||
'amdsmi_get_gpu_vram_vendor', 'amdsmi_get_hsmp_metrics_table',
|
||||
'amdsmi_get_gpu_vram_vendor', 'amdsmi_get_gpu_xgmi_link_status',
|
||||
'amdsmi_get_hsmp_metrics_table',
|
||||
'amdsmi_get_hsmp_metrics_table_version', 'amdsmi_get_lib_version',
|
||||
'amdsmi_get_link_metrics', 'amdsmi_get_link_topology_nearest',
|
||||
'amdsmi_get_minmax_bandwidth_between_processors',
|
||||
@@ -2924,6 +2956,7 @@ __all__ = \
|
||||
'amdsmi_voltage_metric_t', 'amdsmi_voltage_type_t',
|
||||
'amdsmi_vram_info_t', 'amdsmi_vram_type_t', 'amdsmi_vram_usage_t',
|
||||
'amdsmi_vram_vendor_type_t', 'amdsmi_xgmi_info_t',
|
||||
'amdsmi_xgmi_link_status_t', 'amdsmi_xgmi_link_status_type_t',
|
||||
'amdsmi_xgmi_status_t', 'processor_type_t', 'size_t',
|
||||
'struct__links', 'struct_amd_metrics_table_header_t',
|
||||
'struct_amdsmi_accelerator_partition_profile_t',
|
||||
@@ -2958,7 +2991,8 @@ __all__ = \
|
||||
'struct_amdsmi_vbios_info_t', 'struct_amdsmi_version_t',
|
||||
'struct_amdsmi_violation_status_t', 'struct_amdsmi_vram_info_t',
|
||||
'struct_amdsmi_vram_usage_t', 'struct_amdsmi_xgmi_info_t',
|
||||
'struct_cache_', 'struct_engine_usage_', 'struct_fw_info_list_',
|
||||
'struct_amdsmi_xgmi_link_status_t', 'struct_cache_',
|
||||
'struct_engine_usage_', 'struct_fw_info_list_',
|
||||
'struct_memory_usage_', 'struct_nps_flags_',
|
||||
'struct_pcie_metric_', 'struct_pcie_static_',
|
||||
'struct_amdsmi_bdf_t', 'uint32_t', 'uint64_t', 'uint8_t',
|
||||
|
||||
Reference in New Issue
Block a user