Update implementation of zesDeviceProcessesGetState to add sharedSize

Change-Id: I88e1fa8185b00cfaffae47d511d33f7e453d8276
This commit is contained in:
Vilvaraj, T J Vivek
2020-08-10 11:00:03 +05:30
committed by sys_ocldev
parent 199b4a2ec4
commit e51cd6208f
4 changed files with 42 additions and 5 deletions

View File

@@ -30,6 +30,7 @@ ze_result_t GlobalOperationsImp::processesGetState(uint32_t *pCount, zes_process
pProcesses[i].processId = pProcessList[i].processId;
pProcesses[i].engines = pProcessList[i].engines;
pProcesses[i].memSize = pProcessList[i].memSize;
pProcesses[i].sharedSize = pProcessList[i].sharedSize;
}
}
*pCount = static_cast<uint32_t>(pProcessList.size());

View File

@@ -235,10 +235,15 @@ ze_result_t LinuxGlobalOperationsImp::reset(ze_bool_t force) {
// this engine 0 is used by process.
ze_result_t LinuxGlobalOperationsImp::scanProcessesState(std::vector<zes_process_state_t> &pProcessList) {
std::vector<std::string> clientIds;
struct deviceMemStruct {
uint64_t deviceMemorySize;
uint64_t deviceSharedMemorySize;
};
struct engineMemoryPairType {
int64_t engineTypeField;
uint64_t deviceMemorySizeField;
deviceMemStruct deviceMemStructField;
};
ze_result_t result = pSysfsAccess->scanDirEntries(clientsDir, clientIds);
if (ZE_RESULT_SUCCESS != result) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
@@ -308,7 +313,18 @@ ze_result_t LinuxGlobalOperationsImp::scanProcessesState(std::vector<zes_process
}
}
engineMemoryPairType engineMemoryPair = {engineType, memSize};
uint64_t sharedMemSize = 0;
std::string realClientTotalSharedMemoryPath = clientsDir + "/" + clientId + "/" + "total_device_memory_buffer_objects" + "/" + "imported_bytes";
result = pSysfsAccess->read(realClientTotalSharedMemoryPath, sharedMemSize);
if (ZE_RESULT_SUCCESS != result) {
if (ZE_RESULT_ERROR_NOT_AVAILABLE == result) {
continue;
} else {
return result;
}
}
deviceMemStruct totalDeviceMem = {memSize, sharedMemSize};
engineMemoryPairType engineMemoryPair = {engineType, totalDeviceMem};
auto ret = pidClientMap.insert(std::make_pair(pid, engineMemoryPair));
if (ret.second == false) {
// insertion failed as entry with same pid already exists in map
@@ -316,9 +332,11 @@ ze_result_t LinuxGlobalOperationsImp::scanProcessesState(std::vector<zes_process
engineMemoryPairType updateEngineMemoryPair;
auto pidEntryFromMap = pidClientMap.find(pid);
auto existingEngineType = pidEntryFromMap->second.engineTypeField;
auto existingMemorySize = pidEntryFromMap->second.deviceMemorySizeField;
auto existingdeviceMemorySize = pidEntryFromMap->second.deviceMemStructField.deviceMemorySize;
auto existingdeviceSharedMemorySize = pidEntryFromMap->second.deviceMemStructField.deviceSharedMemorySize;
updateEngineMemoryPair.engineTypeField = existingEngineType | engineMemoryPair.engineTypeField;
updateEngineMemoryPair.deviceMemorySizeField = existingMemorySize + engineMemoryPair.deviceMemorySizeField;
updateEngineMemoryPair.deviceMemStructField.deviceMemorySize = existingdeviceMemorySize + engineMemoryPair.deviceMemStructField.deviceMemorySize;
updateEngineMemoryPair.deviceMemStructField.deviceSharedMemorySize = existingdeviceSharedMemorySize + engineMemoryPair.deviceMemStructField.deviceSharedMemorySize;
pidClientMap[pid] = updateEngineMemoryPair;
}
}
@@ -327,7 +345,8 @@ ze_result_t LinuxGlobalOperationsImp::scanProcessesState(std::vector<zes_process
for (auto itr = pidClientMap.begin(); itr != pidClientMap.end(); ++itr) {
zes_process_state_t process;
process.processId = static_cast<uint32_t>(itr->first);
process.memSize = itr->second.deviceMemorySizeField;
process.memSize = itr->second.deviceMemStructField.deviceMemorySize;
process.sharedSize = itr->second.deviceMemStructField.deviceSharedMemorySize;
process.engines = static_cast<uint32_t>(itr->second.engineTypeField);
pProcessList.push_back(process);
}