[SWDEV-423481/SWDEV-423393] Align all device identifier details

Updated:
 * [CLI] Fixed vram % - printf style formatting causes many data errors
   This fix updates to the recommended way of outputting formatted data.
   https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting
 * [API/CLI] Added gpu_id / GUID from kfd (rsmi_dev_guid_get)
       -> CLI name: "GUID"
       -> ROCm SMI calls: no arg, -i, --showhw, --showproduct
 * [API/CLI] Added node_id from kfd (rsmi_dev_node_get)
       -> CLI name: "Node"
       -> ROCm SMI calls: no arg, --showhw, --showproduct
 * [CLI] Added target gfx version from kfd
       -> CLI name: "GFX Version" or "GFX VER"
       -> ROCm SMI calls: --showhw, --showproduct
 * [CLI] Base ROCm CLI
       -> Removed - stacked id formatting:
	   This is to simplify identifiers helpful to users.
	   More identifiers can be found on -i --showhw, --showproduct
 * [CLI] Update -i, --showhw, --showproduct, w/out arg
      -> Card ID/DID/Model/SKU/VBIOS:
            All unsupported values now display "N/A" instead
            of "unknown" or "unsupported"
 * [CLI] Showhw now expands data based on content

Change-Id: Ifb8586f9f545892b8a5aa7903608273cdd77e075
Signed-off-by: Charis Poag <Charis.Poag@amd.com>


[ROCm/rocm_smi_lib commit: 4b5ccb57f0]
Αυτή η υποβολή περιλαμβάνεται σε:
Charis Poag
2024-01-31 21:03:33 -06:00
γονέας dc98babe34
υποβολή 059fd6260e
8 αρχεία άλλαξαν με 403 προσθήκες και 171 διαγραφές
@@ -5143,11 +5143,12 @@ rsmi_status_t rsmi_dev_target_graphics_version_get(uint32_t dv_ind,
uint64_t *gfx_version) {
TRY
std::ostringstream ss;
ss << __PRETTY_FUNCTION__ << "| ======= start =======";
ss << __PRETTY_FUNCTION__ << " | ======= start ======="
<< " | Device #: " << dv_ind;
LOG_TRACE(ss);
rsmi_status_t ret = RSMI_STATUS_NOT_SUPPORTED;
std::string version = "";
const uint64_t undefined_gfx_version = std::numeric_limits<uint64_t>::max();
LOG_TRACE(ss);
if (gfx_version == nullptr) {
ret = RSMI_STATUS_INVALID_ARGS;
} else {
@@ -5160,15 +5161,80 @@ rsmi_status_t rsmi_dev_target_graphics_version_get(uint32_t dv_ind,
}
ss << __PRETTY_FUNCTION__
<< " | ======= end ======= "
<< " | Returning: " << getRSMIStatusString(ret)
<< " | Returning: " << getRSMIStatusString(ret, false)
<< " | Device #: " << dv_ind
<< " | Type: N/A"
<< " | Data: " << ((gfx_version == nullptr) ? "nullptr": std::to_string(*gfx_version));
<< " | Type: Target_graphics_version"
<< " | Data: "
<< ((gfx_version == nullptr) ? "nullptr" :
amd::smi::print_unsigned_hex_and_int(*gfx_version));
LOG_TRACE(ss);
return ret;
CATCH
}
rsmi_status_t rsmi_dev_guid_get(uint32_t dv_ind, uint64_t *guid) {
TRY
std::ostringstream ss;
ss << __PRETTY_FUNCTION__ << " | ======= start ======="
<< " | Device #: " << dv_ind;
LOG_TRACE(ss);
GET_DEV_AND_KFDNODE_FROM_INDX
uint64_t kgd_gpu_id = 0;
rsmi_status_t resp = RSMI_STATUS_NOT_SUPPORTED;
int ret = kfd_node->KFDNode::get_gpu_id(&kgd_gpu_id);
resp = amd::smi::ErrnoToRsmiStatus(ret);
if (guid == nullptr) {
resp = RSMI_STATUS_INVALID_ARGS;
} else {
*guid = kgd_gpu_id;
}
ss << __PRETTY_FUNCTION__
<< " | ======= end ======= "
<< " | Returning: " << getRSMIStatusString(resp, false)
<< " | Device #: " << dv_ind
<< " | Type: GUID (gpu_id)"
<< " | Data: " << ((guid == nullptr) ? "nullptr" :
amd::smi::print_unsigned_hex_and_int(*guid));
LOG_INFO(ss);
return resp;
CATCH
}
rsmi_status_t rsmi_dev_node_id_get(uint32_t dv_ind, uint32_t *node_id) {
TRY
std::ostringstream ss;
ss << __PRETTY_FUNCTION__ << " | ======= start ======="
<< " | Device #: " << dv_ind;
LOG_TRACE(ss);
GET_DEV_AND_KFDNODE_FROM_INDX
uint32_t kgd_node_id = std::numeric_limits<uint32_t>::max();
rsmi_status_t resp = RSMI_STATUS_NOT_SUPPORTED;
int ret = kfd_node->KFDNode::get_node_id(&kgd_node_id);
resp = amd::smi::ErrnoToRsmiStatus(ret);
if (node_id == nullptr) {
resp = RSMI_STATUS_INVALID_ARGS;
} else {
*node_id = kgd_node_id;
if (kgd_node_id == std::numeric_limits<uint32_t>::max()) {
resp = RSMI_STATUS_NOT_SUPPORTED;
}
}
ss << __PRETTY_FUNCTION__
<< " | ======= end ======= "
<< " | Returning: " << getRSMIStatusString(resp, false)
<< " | Device #: " << dv_ind
<< " | Type: node_id"
<< " | Data: " << ((node_id == nullptr) ? "nullptr" :
amd::smi::print_unsigned_hex_and_int(*node_id));
LOG_INFO(ss);
return resp;
CATCH
}
enum iterator_handle_type {
FUNC_ITER = 0,
VARIANT_ITER,
@@ -984,15 +984,72 @@ int KFDNode::get_gfx_target_version(uint64_t *gfx_target_version) {
*gfx_target_version = gfx_version;
ss << __PRETTY_FUNCTION__
<< " | File: " << properties_path
<< " | Successfully read node #" << std::to_string(this->node_indx_)
<< " | Read node: " << std::to_string(this->node_indx_)
<< " for gfx_target_version"
<< " | Data (gfx_target_version) *gfx_target_version = "
<< " | Data (*gfx_target_version): "
<< std::to_string(*gfx_target_version)
<< " | return = " << std::to_string(ret)
<< getRSMIStatusString(amd::smi::ErrnoToRsmiStatus(ret), false)
<< " | ";
LOG_DEBUG(ss);
return ret;
}
// Public interface for device
// /sys/class/kfd/kfd/topology/nodes/*/gpu_id
int KFDNode::get_gpu_id(uint64_t *gpu_id) {
std::ostringstream ss;
std::string gpuid_path = "/sys/class/kfd/kfd/topology/nodes/"
+ std::to_string(this->node_indx_) + "/gpu_id";
const uint64_t undefined_gpu_id = std::numeric_limits<uint64_t>::max();
std::string gpu_id_string = "";
*gpu_id = undefined_gpu_id;
int ret = ReadSysfsStr(gpuid_path, &gpu_id_string);
if (ret != 0 || gpu_id_string.empty()) {
ss << __PRETTY_FUNCTION__
<< " | File: " << gpuid_path
<< " | Data (*gpu_id): empty or nullptr"
<< " | Issue: Could not read node #" << std::to_string(this->node_indx_)
<< ". KFD node was an unsupported node or value read was empty."
<< " | Return: "
<< getRSMIStatusString(amd::smi::ErrnoToRsmiStatus(ret), false)
<< " | ";
LOG_ERROR(ss);
return ret;
}
*gpu_id = std::stoull(gpu_id_string);
if (*gpu_id == 0) { // CPU node - return not supported
*gpu_id = undefined_gpu_id;
ret = ENOENT; // map to RSMI_STATUS_NOT_SUPPORTED
}
ss << __PRETTY_FUNCTION__
<< " | File: " << gpuid_path
<< " | Read node #: " << std::to_string(this->node_indx_)
<< " | Data (*gpu_id): " << std::to_string(*gpu_id)
<< " | Return: "
<< getRSMIStatusString(amd::smi::ErrnoToRsmiStatus(ret), false)
<< " | ";
LOG_DEBUG(ss);
return ret;
}
// Public interface for device
// /sys/class/kfd/kfd/topology/nodes/<node_id>
int KFDNode::get_node_id(uint32_t *node_id) {
std::ostringstream ss;
int ret = 0;
std::string nodeid_path = "/sys/class/kfd/kfd/topology/nodes/"
+ std::to_string(this->node_indx_);
ss << __PRETTY_FUNCTION__
<< " | File: " << nodeid_path
<< " | Read node #: " << std::to_string(this->node_indx_)
<< " | Data (*node_id): " << std::to_string(*node_id)
<< " | Return: "
<< getRSMIStatusString(amd::smi::ErrnoToRsmiStatus(ret), false)
<< " | ";
*node_id = this->node_indx_;
LOG_DEBUG(ss);
return ret;
}
} // namespace smi
} // namespace amd