From e51cd6208f907ca5d2ac4ff0ca23a80a86e62dee Mon Sep 17 00:00:00 2001 From: "Vilvaraj, T J Vivek" Date: Mon, 10 Aug 2020 11:00:03 +0530 Subject: [PATCH] Update implementation of zesDeviceProcessesGetState to add sharedSize Change-Id: I88e1fa8185b00cfaffae47d511d33f7e453d8276 --- .../global_operations_imp.cpp | 1 + .../linux/os_global_operations_imp.cpp | 29 +++++++++++++++---- .../linux/mock_global_operations.h | 6 ++++ .../linux/test_zes_global_operations.cpp | 11 +++++++ 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/level_zero/tools/source/sysman/global_operations/global_operations_imp.cpp b/level_zero/tools/source/sysman/global_operations/global_operations_imp.cpp index 149b2c1abb..c3dd1949bd 100644 --- a/level_zero/tools/source/sysman/global_operations/global_operations_imp.cpp +++ b/level_zero/tools/source/sysman/global_operations/global_operations_imp.cpp @@ -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(pProcessList.size()); diff --git a/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.cpp b/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.cpp index 1e05f9540f..e3a3eded24 100644 --- a/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.cpp +++ b/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.cpp @@ -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 &pProcessList) { std::vector 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::vectorread(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::vectorsecond.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(itr->first); - process.memSize = itr->second.deviceMemorySizeField; + process.memSize = itr->second.deviceMemStructField.deviceMemorySize; + process.sharedSize = itr->second.deviceMemStructField.deviceSharedMemorySize; process.engines = static_cast(itr->second.engineTypeField); pProcessList.push_back(process); } diff --git a/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/mock_global_operations.h b/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/mock_global_operations.h index 7f872a821c..4482ffee1a 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/mock_global_operations.h +++ b/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/mock_global_operations.h @@ -77,8 +77,14 @@ struct Mock : public GlobalOperationsSysfsAccess { (file.compare("clients/5/total_device_memory_buffer_objects/created_bytes") == 0) || (file.compare("clients/6/total_device_memory_buffer_objects/created_bytes") == 0)) { val = 1024; + } else if ((file.compare("clients/4/total_device_memory_buffer_objects/imported_bytes") == 0) || + (file.compare("clients/5/total_device_memory_buffer_objects/imported_bytes") == 0) || + (file.compare("clients/6/total_device_memory_buffer_objects/imported_bytes") == 0)) { + val = 512; } else if (file.compare("clients/7/total_device_memory_buffer_objects/created_bytes") == 0) { return ZE_RESULT_ERROR_UNKNOWN; + } else if (file.compare("clients/7/total_device_memory_buffer_objects/imported_bytes") == 0) { + return ZE_RESULT_ERROR_NOT_AVAILABLE; } else { return ZE_RESULT_ERROR_NOT_AVAILABLE; } diff --git a/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/test_zes_global_operations.cpp b/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/test_zes_global_operations.cpp index 531910b6f7..68db1e46e5 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/test_zes_global_operations.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/test_zes_global_operations.cpp @@ -16,6 +16,8 @@ namespace ult { constexpr uint64_t memSize1 = 2048; constexpr uint64_t memSize2 = 1024; +constexpr uint64_t sharedMemSize1 = 1024; +constexpr uint64_t sharedMemSize2 = 512; // In mock function getValUnsignedLong, we have set the engines used as 0, 3 and 1. // Hence, expecting 28 as engine field because 28 in binary would be 00011100 // This indicates bit number 2, 3 and 4 are set, thus this indicates, this process @@ -144,9 +146,11 @@ TEST_F(SysmanGlobalOperationsFixture, GivenValidDeviceHandleWhileRetrievingInfor EXPECT_EQ(processes[0].processId, pid1); EXPECT_EQ(processes[0].engines, engines1); EXPECT_EQ(processes[0].memSize, memSize1); + EXPECT_EQ(processes[0].sharedSize, sharedMemSize1); EXPECT_EQ(processes[1].processId, pid2); EXPECT_EQ(processes[1].engines, engines2); EXPECT_EQ(processes[1].memSize, memSize2); + EXPECT_EQ(processes[1].sharedSize, sharedMemSize2); } TEST_F(SysmanGlobalOperationsFixture, GivenValidDeviceHandleWhileRetrievingInformationAboutHostProcessesUsingFaultyClientFileThenFailureIsReturned) { @@ -162,6 +166,13 @@ TEST_F(SysmanGlobalOperationsFixture, GivenValidDeviceHandleWhileReadingExisting EXPECT_EQ(memSize2, memSize); } +TEST_F(SysmanGlobalOperationsFixture, GivenValidDeviceHandleWhileReadingInvalidMemoryFileThenErrorIsReturned) { + uint64_t memSize = 0; + ON_CALL(*pSysfsAccess.get(), scanDirEntries(_, _)) + .WillByDefault(::testing::Invoke(pSysfsAccess.get(), &Mock::getScannedDir4Entries)); + EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, pSysfsAccess->read("clients/7/total_device_memory_buffer_objects/imported_bytes", memSize)); +} + TEST_F(SysmanGlobalOperationsFixture, GivenValidDeviceHandleWhileReadingNonExistingFileThenErrorIsReturned) { std::vector engineEntries; EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, pSysfsAccess->scanDirEntries("clients/7/busy", engineEntries));