diff --git a/level_zero/core/source/driver/driver_handle_imp.cpp b/level_zero/core/source/driver/driver_handle_imp.cpp index 2aa41097c2..0581556634 100644 --- a/level_zero/core/source/driver/driver_handle_imp.cpp +++ b/level_zero/core/source/driver/driver_handle_imp.cpp @@ -417,7 +417,7 @@ void DriverHandleImp::initDeviceUsmAllocPool(NEO::Device &device, bool multiDevi poolParams.poolSize = NEO::debugManager.flags.EnableDeviceUsmAllocationPool.get() * MemoryConstants::megaByte; } - bool trackResidency = false; + bool trackResidency = true; if (NEO::debugManager.flags.EnableUsmPoolResidencyTracking.get() != -1) { trackResidency = NEO::debugManager.flags.EnableUsmPoolResidencyTracking.get() != 0; } diff --git a/level_zero/core/test/unit_tests/sources/memory/test_memory_pooling.cpp b/level_zero/core/test/unit_tests/sources/memory/test_memory_pooling.cpp index 83d7ea2a75..1e555da93a 100644 --- a/level_zero/core/test/unit_tests/sources/memory/test_memory_pooling.cpp +++ b/level_zero/core/test/unit_tests/sources/memory/test_memory_pooling.cpp @@ -673,8 +673,6 @@ TEST_F(AllocUsmDeviceEnabledSinglePoolMemoryTest, givenMultiplePooledAllocations } TEST_F(AllocUsmDeviceEnabledSinglePoolMemoryTest, givenPooledAllocationWhenCallingResidencyOperationsThenSkipIfAllowed) { - DebugManagerStateRestore restorer; - NEO::debugManager.flags.EnableUsmPoolResidencyTracking.set(1); auto mockDeviceMemAllocPool = reinterpret_cast(l0Devices[0]->getNEODevice()->getUsmMemAllocPool()); ASSERT_NE(nullptr, mockDeviceMemAllocPool); EXPECT_TRUE(mockDeviceMemAllocPool->isInitialized()); @@ -736,8 +734,47 @@ TEST_F(AllocUsmDeviceEnabledSinglePoolMemoryTest, givenPooledAllocationWhenCalli EXPECT_EQ(ZE_RESULT_SUCCESS, context->freeMem(nonPooledPtr)); } +TEST_F(AllocUsmDeviceEnabledSinglePoolMemoryTest, givenDebugFlagWhenInitializingPoolThenEnableResidencyTrackingCorrectly) { + auto neoDevice = l0Devices[0]->getNEODevice(); + // default + EXPECT_TRUE(neoDevice->getUsmMemAllocPool()->isTrackingResidency()); + neoDevice->cleanupUsmAllocationPool(); + neoDevice->resetUsmAllocationPool(nullptr); + + DebugManagerStateRestore restorer; + NEO::debugManager.flags.EnableUsmPoolResidencyTracking.set(0); + driverHandle->initDeviceUsmAllocPool(*neoDevice, numRootDevices > 1); + EXPECT_FALSE(neoDevice->getUsmMemAllocPool()->isTrackingResidency()); + neoDevice->cleanupUsmAllocationPool(); + neoDevice->resetUsmAllocationPool(nullptr); + + NEO::debugManager.flags.EnableUsmPoolResidencyTracking.set(1); + driverHandle->initDeviceUsmAllocPool(*neoDevice, numRootDevices > 1); + EXPECT_TRUE(neoDevice->getUsmMemAllocPool()->isTrackingResidency()); +} + using AllocUsmDeviceEnabledMemoryNewVersionTest = AllocUsmPoolMemoryTest<-1, 1, -1>; +TEST_F(AllocUsmDeviceEnabledMemoryNewVersionTest, givenDebugFlagWhenInitializingPoolManagerThenEnableResidencyTrackingCorrectly) { + auto neoDevice = l0Devices[0]->getNEODevice(); + + // default + EXPECT_TRUE(reinterpret_cast(neoDevice->getUsmMemAllocPoolsManager())->trackResidency); + neoDevice->cleanupUsmAllocationPool(); + neoDevice->resetUsmAllocationPoolManager(nullptr); + + DebugManagerStateRestore restorer; + NEO::debugManager.flags.EnableUsmPoolResidencyTracking.set(0); + driverHandle->initDeviceUsmAllocPool(*neoDevice, numRootDevices > 1); + EXPECT_FALSE(reinterpret_cast(neoDevice->getUsmMemAllocPoolsManager())->trackResidency); + neoDevice->cleanupUsmAllocationPool(); + neoDevice->resetUsmAllocationPoolManager(nullptr); + + NEO::debugManager.flags.EnableUsmPoolResidencyTracking.set(1); + driverHandle->initDeviceUsmAllocPool(*neoDevice, numRootDevices > 1); + EXPECT_TRUE(reinterpret_cast(neoDevice->getUsmMemAllocPoolsManager())->trackResidency); +} + TEST_F(AllocUsmDeviceEnabledMemoryNewVersionTest, givenContextWhenAllocatingAndFreeingDeviceUsmThenPoolingIsUsed) { executionEnvironment->rootDeviceEnvironments[0]->osInterface.reset(new NEO::OSInterface()); executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::make_unique());