diff --git a/shared/source/debug_settings/debug_variables_base.inl b/shared/source/debug_settings/debug_variables_base.inl index 0a0cb5010e..bac7d0587f 100644 --- a/shared/source/debug_settings/debug_variables_base.inl +++ b/shared/source/debug_settings/debug_variables_base.inl @@ -503,8 +503,8 @@ DECLARE_DEBUG_VARIABLE(bool, ForceSamplerLowFilteringPrecision, false, "Force Lo DECLARE_DEBUG_VARIABLE(bool, EnablePrivateBO, false, "Enable PRELIM_I915_GEM_CREATE_EXT_VM_PRIVATE extension creating VM_PRIVATE BOs") DECLARE_DEBUG_VARIABLE(bool, EnableAIL, true, "Enables AIL") DECLARE_DEBUG_VARIABLE(bool, EnableReservingInSvmRange, true, "Enables reserving virtual memory in the SVM range") +DECLARE_DEBUG_VARIABLE(bool, EnableDeferBacking, false, "Enables defer backing on xe kmd") DECLARE_DEBUG_VARIABLE(bool, DisableProgrammableMetricsSupport, false, "Disable Programmable Metrics support") -DECLARE_DEBUG_VARIABLE(int32_t, EnableDeferBacking, -1, "Enables defer backing on xe kmd, -1:default(enabled), 0:disable, 1:enable") DECLARE_DEBUG_VARIABLE(int64_t, VmBindWaitUserFenceTimeout, -1, "-1: default, >0: time in ns for wait function timeout") DECLARE_DEBUG_VARIABLE(int32_t, ForceRunAloneContext, -1, "Control creation of run-alone HW context, -1:default, 0:disable, 1:enable") DECLARE_DEBUG_VARIABLE(int32_t, AddClGlSharing, -1, "Add cl-gl extension") diff --git a/shared/source/os_interface/linux/drm_memory_manager.cpp b/shared/source/os_interface/linux/drm_memory_manager.cpp index db04eb598a..92b15566bd 100644 --- a/shared/source/os_interface/linux/drm_memory_manager.cpp +++ b/shared/source/os_interface/linux/drm_memory_manager.cpp @@ -1637,7 +1637,6 @@ void *DrmMemoryManager::lockResourceImpl(GraphicsAllocation &graphicsAllocation) if (ioctlHelper->makeResidentBeforeLockNeeded()) { auto memoryOperationsInterface = static_cast(executionEnvironment.rootDeviceEnvironments[rootDeviceIndex]->memoryOperationsInterface.get()); auto graphicsAllocationPtr = &graphicsAllocation; - registerAllocationInOs(graphicsAllocationPtr); [[maybe_unused]] auto ret = memoryOperationsInterface->makeResidentWithinOsContext(getDefaultOsContext(rootDeviceIndex), ArrayRef(&graphicsAllocationPtr, 1), false, false, true) == MemoryOperationsStatus::success; DEBUG_BREAK_IF(!ret); } diff --git a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp index 6553057077..e83d8de1ed 100644 --- a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp +++ b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp @@ -271,11 +271,6 @@ bool IoctlHelperXe::initialize() { assignValue(tileIdToMediaGtId, gt.tile_id, gt.gt_id); } } - - if (debugManager.flags.EnableDeferBacking.get() != -1) { - enableDeferBacking = debugManager.flags.EnableDeferBacking.get(); - } - return true; } @@ -658,7 +653,7 @@ int IoctlHelperXe::createGemExt(const MemRegionsVec &memClassInstances, size_t a create.placement = static_cast(memoryInstances.to_ulong()); create.cpu_caching = this->getCpuCachingMode(isCoherent, isSysMemOnly); - if (enableDeferBacking) { + if (debugManager.flags.EnableDeferBacking.get()) { create.flags |= DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING; } @@ -704,7 +699,7 @@ uint32_t IoctlHelperXe::createGem(uint64_t size, uint32_t memoryBanks, std::opti create.placement = static_cast(memoryInstances.to_ulong()); create.cpu_caching = this->getCpuCachingMode(isCoherent, isSysMemOnly); - if (enableDeferBacking) { + if (debugManager.flags.EnableDeferBacking.get()) { create.flags |= DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING; } @@ -1821,7 +1816,11 @@ bool IoctlHelperXe::isImmediateVmBindRequired() const { } bool IoctlHelperXe::makeResidentBeforeLockNeeded() const { - return enableDeferBacking; + auto makeResidentBeforeLockNeeded = false; + if (debugManager.flags.EnableDeferBacking.get()) { + makeResidentBeforeLockNeeded = true; + } + return makeResidentBeforeLockNeeded; } void IoctlHelperXe::insertEngineToContextParams(ContextParamEngines<> &contextParamEngines, uint32_t engineId, const EngineClassInstance *engineClassInstance, uint32_t tileId, bool hasVirtualEngines) { diff --git a/shared/source/os_interface/linux/xe/ioctl_helper_xe.h b/shared/source/os_interface/linux/xe/ioctl_helper_xe.h index 57e9fe196b..d1bbe7ebaf 100644 --- a/shared/source/os_interface/linux/xe/ioctl_helper_xe.h +++ b/shared/source/os_interface/linux/xe/ioctl_helper_xe.h @@ -232,8 +232,6 @@ class IoctlHelperXe : public IoctlHelper { }; std::unique_ptr euDebugInterface; - - bool enableDeferBacking = true; }; template diff --git a/shared/test/common/test_files/igdrcl.config b/shared/test/common/test_files/igdrcl.config index eb45d0d90a..3e11086c49 100644 --- a/shared/test/common/test_files/igdrcl.config +++ b/shared/test/common/test_files/igdrcl.config @@ -646,7 +646,7 @@ EnableTimestampPoolAllocator = -1 PipelinedEuThreadArbitration = -1 ExperimentalUSMAllocationReuseCleaner = -1 DummyPageBackingEnabled = 0 -EnableDeferBacking = -1 +EnableDeferBacking = 0 ForceLowLatencyHint = -1 EmitMemAdvisePriorToCopyForNonUsm = -1 TreatNonUsmForTransfersAsSharedSystem = -1 diff --git a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp index 7a49585e7f..a8f7dda4f5 100644 --- a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp @@ -138,6 +138,9 @@ TEST_F(IoctlHelperXeGemCreateExtTests, givenIoctlHelperXeWhenCallingGemCreateExt } TEST_F(IoctlHelperXeGemCreateExtTests, givenIoctlHelperXeWhenCallingGemCreateExtWithOnlySystemRegionAndCoherencyThenWriteBackCPUCachingIsUsed) { + DebugManagerStateRestore restorer; + debugManager.flags.EnableDeferBacking.set(1); + MemRegionsVec memRegions = {systemMemory}; bool isCoherent = true; @@ -146,24 +149,10 @@ TEST_F(IoctlHelperXeGemCreateExtTests, givenIoctlHelperXeWhenCallingGemCreateExt EXPECT_EQ(static_cast(DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING), (drm->createParamsFlags & DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING)); } -TEST_F(IoctlHelperXeGemCreateExtTests, givenIoctlHelperXeAndDeferBackingIsDisabledWhenCallingGemCreateExtThenVerifyGemCreateFlagsAreNotSet) { - DebugManagerStateRestore restorer; - debugManager.flags.EnableDeferBacking.set(0); - auto executionEnvironment = std::make_unique(); - auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); - auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); - xeIoctlHelper->initialize(); - MemRegionsVec memRegions = {systemMemory}; - bool isCoherent = true; - - EXPECT_NE(0, xeIoctlHelper->createGemExt(memRegions, allocSize, handle, patIndex, std::nullopt, pairHandle, isChunked, numOfChunks, std::nullopt, std::nullopt, isCoherent)); - EXPECT_EQ(0u, drm->createParamsFlags); -} - TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndNoLocalMemoryThenProperValuesSet) { DebugManagerStateRestore restorer; debugManager.flags.EnableLocalMemory.set(0); - debugManager.flags.EnableDeferBacking.set(0); + debugManager.flags.EnableDeferBacking.set(1); auto executionEnvironment = std::make_unique(); auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); @@ -182,7 +171,7 @@ TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndNoLocalMemoryThe EXPECT_TRUE(xeIoctlHelper->bindInfo.empty()); EXPECT_EQ(size, drm->createParamsSize); - EXPECT_EQ(0u, drm->createParamsFlags); + EXPECT_EQ(static_cast(DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING), (drm->createParamsFlags & DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING)); EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm->createParamsCpuCaching); EXPECT_EQ(1u, drm->createParamsPlacement); @@ -194,6 +183,7 @@ TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndNoLocalMemoryThe TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateWhenMemoryBanksZeroThenProperValuesSet) { DebugManagerStateRestore restorer; debugManager.flags.EnableLocalMemory.set(0); + debugManager.flags.EnableDeferBacking.set(1); auto executionEnvironment = std::make_unique(); auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); @@ -224,6 +214,7 @@ TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateWhenMemoryBanksZero TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndLocalMemoryThenProperValuesSet) { DebugManagerStateRestore restorer; debugManager.flags.EnableLocalMemory.set(1); + debugManager.flags.EnableDeferBacking.set(1); auto executionEnvironment = std::make_unique(); auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); @@ -3301,22 +3292,13 @@ TEST_F(IoctlHelperXeTest, whenQueryDeviceIdAndRevisionAndSharedSystemUsmSupportD EXPECT_FALSE(drm->isSharedSystemAllocEnabled()); } -TEST_F(IoctlHelperXeTest, givenXeIoctlHelperWhenMakeResidentBeforeLockNeededIsCalledThenVerifyTrueIsReturned) { - auto executionEnvironment = std::make_unique(); - auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); - auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); - xeIoctlHelper->initialize(); - EXPECT_TRUE(xeIoctlHelper->makeResidentBeforeLockNeeded()); -} - -TEST_F(IoctlHelperXeTest, givenXeIoctlHelperAndDeferBackingFlagSetToFalseWhenMakeResidentBeforeLockNeededIsCalledThenVerifyTrueIsReturned) { +TEST_F(IoctlHelperXeTest, givenXeIoctlHelperAndDeferBackingFlagSetToTrueWhenMakeResidentBeforeLockNeededIsCalledThenVerifyTrueIsReturned) { DebugManagerStateRestore restorer; - debugManager.flags.EnableDeferBacking.set(0); + debugManager.flags.EnableDeferBacking.set(1); auto executionEnvironment = std::make_unique(); - auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); - auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); - xeIoctlHelper->initialize(); - EXPECT_FALSE(xeIoctlHelper->makeResidentBeforeLockNeeded()); + DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto xeIoctlHelper = std::make_unique(drm); + EXPECT_TRUE(xeIoctlHelper->makeResidentBeforeLockNeeded()); } TEST_F(IoctlHelperXeTest, givenXeIoctlHelperWhenCreateDrmContextAndLowLatencyHintNotAvailableThenNoFlagIsSet) {