Skip to content

Commit

Permalink
Add support to retrieve process VRAM usage information.
Browse files Browse the repository at this point in the history
Change-Id: I60843a99207a658022a26aa346b79f91863833cf
  • Loading branch information
mukjoshi committed May 26, 2020
1 parent bdf22c1 commit e30ebbc
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 3 deletions.
1 change: 1 addition & 0 deletions include/rocm_smi/rocm_smi.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;


Expand Down
3 changes: 2 additions & 1 deletion include/rocm_smi/rocm_smi_kfd.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
12 changes: 11 additions & 1 deletion src/rocm_smi.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
26 changes: 25 additions & 1 deletion src/rocm_smi_kfd.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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 += "/";
Expand All @@ -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;
}

Expand Down

0 comments on commit e30ebbc

Please sign in to comment.