[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]
Αυτή η υποβολή περιλαμβάνεται σε:
@@ -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
|
||||
|
||||
Αναφορά σε νέο ζήτημα
Block a user