Unify the amdsmi_get_pcie_info python interface
Make the python interface consistent with the C interface. Change-Id: Idda08f888947c757e475d5a024b0ec3d8e1d846a
Cette révision appartient à :
révisé par
Maisam Arif
Parent
f58613561c
révision
db33cda0c1
@@ -353,7 +353,10 @@ class AMDSMICommands():
|
||||
|
||||
try:
|
||||
link_caps = amdsmi_interface.amdsmi_get_pcie_info(args.gpu)
|
||||
bus_info.update(link_caps)
|
||||
bus_info['max_pcie_speed'] = link_caps['pcie_static']['max_pcie_speed']
|
||||
bus_info['pcie_slot_type'] = link_caps['pcie_static']['slot_type']
|
||||
bus_info['pcie_interface_version'] = link_caps['pcie_static']['pcie_interface_version']
|
||||
|
||||
if bus_info['max_pcie_speed'] % 1000 != 0:
|
||||
pcie_speed_GTs_value = round(bus_info['max_pcie_speed'] / 1000, 1)
|
||||
else:
|
||||
@@ -1396,17 +1399,17 @@ class AMDSMICommands():
|
||||
try:
|
||||
pcie_link_status = amdsmi_interface.amdsmi_get_pcie_info(args.gpu)
|
||||
|
||||
if pcie_link_status['pcie_speed'] % 1000 != 0:
|
||||
pcie_speed_GTs_value = round(pcie_link_status['pcie_speed'] / 1000, 1)
|
||||
if pcie_link_status['pcie_metric']['pcie_speed'] % 1000 != 0:
|
||||
pcie_speed_GTs_value = round(pcie_link_status['pcie_metric']['pcie_speed'] / 1000, 1)
|
||||
else:
|
||||
pcie_speed_GTs_value = round(pcie_link_status['pcie_speed'] / 1000)
|
||||
pcie_speed_GTs_value = round(pcie_link_status['pcie_metric']['pcie_speed'] / 1000)
|
||||
|
||||
pcie_dict['current_speed'] = pcie_speed_GTs_value
|
||||
pcie_dict['current_lanes'] = pcie_link_status['pcie_lanes']
|
||||
pcie_dict['current_lanes'] = pcie_link_status['pcie_metric']['pcie_width']
|
||||
|
||||
if self.logger.is_human_readable_format():
|
||||
unit = 'GT/s'
|
||||
pcie_dict['current_lanes'] = f"{pcie_link_status['pcie_lanes']} lanes"
|
||||
pcie_dict['current_lanes'] = f"{pcie_link_status['pcie_metric']['pcie_width']} lanes"
|
||||
pcie_dict['current_speed'] = f"{pcie_dict['current_speed']} GT/s"
|
||||
|
||||
except amdsmi_exception.AmdSmiLibraryException as e:
|
||||
|
||||
@@ -403,12 +403,12 @@ int main() {
|
||||
ret = amdsmi_get_pcie_info(processor_handles[j], &pcie_info);
|
||||
CHK_AMDSMI_RET(ret)
|
||||
printf(" Output of amdsmi_get_pcie_info:\n");
|
||||
printf("\tCurrent PCIe lanes: %d\n", pcie_info.pcie_metric.pcie_lanes);
|
||||
printf("\tCurrent PCIe lanes: %d\n", pcie_info.pcie_metric.pcie_width);
|
||||
printf("\tCurrent PCIe speed: %d\n", pcie_info.pcie_metric.pcie_speed);
|
||||
printf("\tCurrent PCIe Interface Version: %d\n",
|
||||
pcie_info.pcie_static.pcie_interface_version);
|
||||
printf("\tPCIe slot type: %d\n", pcie_info.pcie_static.slot_type);
|
||||
printf("\tPCIe max lanes: %d\n", pcie_info.pcie_static.max_pcie_lanes);
|
||||
printf("\tPCIe max lanes: %d\n", pcie_info.pcie_static.max_pcie_width);
|
||||
printf("\tPCIe max speed: %d\n", pcie_info.pcie_static.max_pcie_speed);
|
||||
|
||||
// Get VRAM temperature limit
|
||||
|
||||
@@ -500,15 +500,15 @@ typedef enum {
|
||||
|
||||
typedef struct {
|
||||
struct pcie_static_ {
|
||||
uint16_t max_pcie_lanes; //!< maximum number of PCIe lanes
|
||||
uint16_t max_pcie_width; //!< maximum number of PCIe lanes
|
||||
uint32_t max_pcie_speed; //!< maximum PCIe speed
|
||||
uint32_t pcie_interface_version; //!< PCIe interface version
|
||||
amdsmi_card_form_factor_t slot_type; //!< card form factor
|
||||
uint64_t reserved[10];
|
||||
} pcie_static;
|
||||
struct pcie_metric_ {
|
||||
uint16_t pcie_width; //!< current PCIe width
|
||||
uint32_t pcie_speed; //!< current PCIe speed in MT/s
|
||||
uint16_t pcie_lanes; //!< current PCIe width
|
||||
uint32_t pcie_bandwidth; //!< current PCIe bandwidth Mb/s
|
||||
uint64_t pcie_replay_count; //!< total number of the replays issued on the PCIe link
|
||||
uint64_t pcie_l0_to_recovery_count; //!< total number of times the PCIe link transitioned from L0 to the recovery state
|
||||
|
||||
@@ -791,7 +791,7 @@ Output: Dictionary with fields
|
||||
|
||||
Field | Description
|
||||
---|---
|
||||
`pcie_lanes`| pcie lanes in use
|
||||
`pcie_width`| pcie lanes in use
|
||||
`pcie_speed`| current pcie speed
|
||||
`pcie_interface_version`| current pcie generation
|
||||
|
||||
@@ -811,7 +811,7 @@ try:
|
||||
else:
|
||||
for device in devices:
|
||||
pcie_link_status = amdsmi_get_pcie_info(device)
|
||||
print(pcie_link_status["pcie_lanes"])
|
||||
print(pcie_link_status["pcie_width"])
|
||||
print(pcie_link_status["pcie_speed"])
|
||||
print(pcie_link_status["pcie_interface_version"])
|
||||
except AmdSmiException as e:
|
||||
|
||||
@@ -2134,13 +2134,24 @@ def amdsmi_get_pcie_info(
|
||||
)
|
||||
)
|
||||
|
||||
return {"pcie_speed": pcie_info.pcie_metric.pcie_speed,
|
||||
"pcie_lanes": pcie_info.pcie_metric.pcie_lanes,
|
||||
"pcie_interface_version": pcie_info.pcie_static.pcie_interface_version,
|
||||
return {
|
||||
"pcie_static": {
|
||||
"max_pcie_width": pcie_info.pcie_static.max_pcie_width,
|
||||
"max_pcie_speed": pcie_info.pcie_static.max_pcie_speed,
|
||||
"max_pcie_lanes": pcie_info.pcie_static.max_pcie_lanes,
|
||||
"pcie_interface_version": pcie_info.pcie_static.pcie_interface_version,
|
||||
"pcie_slot_type": pcie_info.pcie_static.slot_type}
|
||||
"slot_type": pcie_info.pcie_static.slot_type,
|
||||
},
|
||||
"pcie_metric": {
|
||||
"pcie_width": pcie_info.pcie_metric.pcie_width,
|
||||
"pcie_speed": pcie_info.pcie_metric.pcie_speed,
|
||||
"pcie_bandwidth": pcie_info.pcie_metric.pcie_bandwidth,
|
||||
"pcie_replay_count": pcie_info.pcie_metric.pcie_replay_count,
|
||||
"pcie_l0_to_recovery_count": pcie_info.pcie_metric.pcie_l0_to_recovery_count,
|
||||
"pcie_replay_roll_over_count": pcie_info.pcie_metric.pcie_replay_roll_over_count,
|
||||
"pcie_nak_sent_count": pcie_info.pcie_metric.pcie_nak_sent_count,
|
||||
"pcie_nak_received_count": pcie_info.pcie_metric.pcie_nak_received_count,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def amdsmi_get_processor_handle_from_bdf(bdf):
|
||||
|
||||
@@ -751,9 +751,9 @@ class struct_pcie_metric_(Structure):
|
||||
|
||||
struct_pcie_metric_._pack_ = 1 # source:False
|
||||
struct_pcie_metric_._fields_ = [
|
||||
('pcie_speed', ctypes.c_uint32),
|
||||
('pcie_lanes', ctypes.c_uint16),
|
||||
('pcie_width', ctypes.c_uint16),
|
||||
('PADDING_0', ctypes.c_ubyte * 2),
|
||||
('pcie_speed', ctypes.c_uint32),
|
||||
('pcie_bandwidth', ctypes.c_uint32),
|
||||
('PADDING_1', ctypes.c_ubyte * 4),
|
||||
('pcie_replay_count', ctypes.c_uint64),
|
||||
@@ -769,7 +769,7 @@ class struct_pcie_static_(Structure):
|
||||
|
||||
struct_pcie_static_._pack_ = 1 # source:False
|
||||
struct_pcie_static_._fields_ = [
|
||||
('max_pcie_lanes', ctypes.c_uint16),
|
||||
('max_pcie_width', ctypes.c_uint16),
|
||||
('PADDING_0', ctypes.c_ubyte * 2),
|
||||
('max_pcie_speed', ctypes.c_uint32),
|
||||
('pcie_interface_version', ctypes.c_uint32),
|
||||
|
||||
@@ -1964,7 +1964,7 @@ amdsmi_status_t amdsmi_get_pcie_info(amdsmi_processor_handle processor_handle, a
|
||||
printf("Failed to open file: %s \n", path_max_link_width.c_str());
|
||||
return AMDSMI_STATUS_API_FAILED;
|
||||
}
|
||||
info->pcie_static.max_pcie_lanes = (uint16_t)pcie_width;
|
||||
info->pcie_static.max_pcie_width = (uint16_t)pcie_width;
|
||||
|
||||
std::string path_max_link_speed = "/sys/class/drm/" +
|
||||
gpu_device->get_gpu_path() + "/device/max_link_speed";
|
||||
@@ -2028,7 +2028,7 @@ amdsmi_status_t amdsmi_get_pcie_info(amdsmi_processor_handle processor_handle, a
|
||||
if (status != AMDSMI_STATUS_SUCCESS)
|
||||
return status;
|
||||
|
||||
info->pcie_metric.pcie_lanes = metric_info.pcie_link_width;
|
||||
info->pcie_metric.pcie_width = metric_info.pcie_link_width;
|
||||
// gpu metrics is inconsistent with pcie_speed values, if 0-6 then it needs to be translated
|
||||
if (metric_info.pcie_link_speed <= 6) {
|
||||
status = smi_amdgpu_get_pcie_speed_from_pcie_type(metric_info.pcie_link_speed, &info->pcie_metric.pcie_speed); // mapping to MT/s
|
||||
|
||||
Référencer dans un nouveau ticket
Bloquer un utilisateur