diff --git a/projects/amdsmi/include/rocm_smi/rocm_smi.h b/projects/amdsmi/include/rocm_smi/rocm_smi.h index 8908bac7b4..085f92787e 100755 --- a/projects/amdsmi/include/rocm_smi/rocm_smi.h +++ b/projects/amdsmi/include/rocm_smi/rocm_smi.h @@ -748,6 +748,7 @@ typedef struct { uint32_t process_id; //!< Process ID uint32_t pasid; //!< PASID uint64_t vram_usage; //!< VRAM usage + uint64_t sdma_usage; //!< SDMA usage in microseconds } rsmi_process_info_t; diff --git a/projects/amdsmi/src/rocm_smi_kfd.cc b/projects/amdsmi/src/rocm_smi_kfd.cc index 7d6011aec9..b70f22c25b 100755 --- a/projects/amdsmi/src/rocm_smi_kfd.cc +++ b/projects/amdsmi/src/rocm_smi_kfd.cc @@ -433,6 +433,7 @@ int GetProcessInfoForPID(uint32_t pid, rsmi_process_info_t *proc, proc->pasid = std::stoi(tmp); proc->vram_usage = 0; + proc->sdma_usage = 0; for (itr = gpu_set->begin(); itr != gpu_set->end(); itr++) { uint64_t gpu_id = (*itr); @@ -451,6 +452,21 @@ int GetProcessInfoForPID(uint32_t pid, rsmi_process_info_t *proc, } proc->vram_usage += std::stoi(tmp); + + std::string sdma_str_path = proc_str_path; + sdma_str_path += "/sdma_"; + sdma_str_path += std::to_string(gpu_id); + + err = ReadSysfsStr(sdma_str_path, &tmp); + if (err) { + return err; + } + + if (!is_number(tmp)) { + return EINVAL; + } + + proc->sdma_usage += std::stoi(tmp); } return 0; diff --git a/projects/amdsmi/tests/rocm_smi_test/functional/process_info_read.cc b/projects/amdsmi/tests/rocm_smi_test/functional/process_info_read.cc index ff1dfdf0fb..7159fdd197 100755 --- a/projects/amdsmi/tests/rocm_smi_test/functional/process_info_read.cc +++ b/projects/amdsmi/tests/rocm_smi_test/functional/process_info_read.cc @@ -207,7 +207,10 @@ void TestProcInfoRead::Run(void) { ASSERT_EQ(proc_info.pasid, procs[j].pasid); std::cout << "\t** Process ID: " << procs[j].process_id << " VRAM Usage: " << - proc_info.vram_usage << std::endl; + proc_info.vram_usage << + " SDMA Usage: " << + proc_info.sdma_usage << + std::endl; } } }