Add support to retrieve process VRAM usage information.

Change-Id: I60843a99207a658022a26aa346b79f91863833cf
This commit is contained in:
Mukul Joshi
2020-05-22 22:13:03 -04:00
committed by Mukul Joshi
parent bdf22c1c9e
commit e30ebbc787
4 changed files with 39 additions and 3 deletions
+1
View File
@@ -712,6 +712,7 @@ typedef struct {
typedef struct {
uint32_t process_id; //!< Process ID
uint32_t pasid; //!< PASID
uint64_t vram_usage; //!< VRAM usage
} rsmi_process_info_t;
+2 -1
View File
@@ -98,7 +98,8 @@ int
GetProcessInfo(rsmi_process_info_t *procs, uint32_t num_allocated,
uint32_t *num_procs_found);
int
GetProcessInfoForPID(uint32_t pid, rsmi_process_info_t *proc);
GetProcessInfoForPID(uint32_t pid, rsmi_process_info_t *proc,
std::unordered_set<uint64_t> *gpu_set);
int
GetProcessGPUs(uint32_t pid, std::unordered_set<uint64_t> *gpu_count);
+11 -1
View File
@@ -2924,7 +2924,17 @@ rsmi_compute_process_info_by_pid_get(uint32_t pid,
return RSMI_STATUS_INVALID_ARGS;
}
int err = amd::smi::GetProcessInfoForPID(pid, proc);
std::unordered_set<uint64_t> gpu_set;
amd::smi::RocmSMI& smi = amd::smi::RocmSMI::getInstance();
auto it = smi.kfd_node_map().begin();
while (it != smi.kfd_node_map().end()) {
uint64_t gpu_id = it->first;
gpu_set.insert(gpu_id);
it++;
}
int err = amd::smi::GetProcessInfoForPID(pid, proc, &gpu_set);
if (err) {
return errno_to_rsmi_status(err);
+25 -1
View File
@@ -384,10 +384,13 @@ int GetProcessGPUs(uint32_t pid, std::unordered_set<uint64_t> *gpu_set) {
return 0;
}
int GetProcessInfoForPID(uint32_t pid, rsmi_process_info_t *proc) {
int GetProcessInfoForPID(uint32_t pid, rsmi_process_info_t *proc,
std::unordered_set<uint64_t> *gpu_set) {
assert(proc != nullptr);
assert(gpu_set != nullptr);
int err;
std::string tmp;
std::unordered_set<uint64_t>::iterator itr;
std::string proc_str_path = kKFDProcPathRoot;
proc_str_path += "/";
@@ -413,6 +416,27 @@ int GetProcessInfoForPID(uint32_t pid, rsmi_process_info_t *proc) {
}
proc->pasid = std::stoi(tmp);
proc->vram_usage = 0;
for (itr = gpu_set->begin(); itr != gpu_set->end(); itr++) {
uint64_t gpu_id = (*itr);
std::string vram_str_path = proc_str_path;
vram_str_path += "/vram_";
vram_str_path += std::to_string(gpu_id);
err = ReadSysfsStr(vram_str_path, &tmp);
if (err) {
return err;
}
if (!is_number(tmp)) {
return EINVAL;
}
proc->vram_usage += std::stoi(tmp);
}
return 0;
}