From 6c5a56f1a66e50c7dd40014d1a9541350ff61525 Mon Sep 17 00:00:00 2001 From: "Yates, Brandon" Date: Fri, 27 May 2022 23:37:00 +0000 Subject: [PATCH] L0 Debugger Windows - Enable single address space SBA tracking Related-to: NEO-6719 Signed-off-by: Yates, Brandon --- .../core/source/debugger/debugger_l0.cpp | 2 + level_zero/core/source/debugger/debugger_l0.h | 2 + .../debugger/linux/debugger_l0_linux.cpp | 4 ++ .../debugger/windows/debugger_l0_windows.cpp | 4 ++ .../sources/debugger/l0_debugger_fixture.h | 22 ++++++ .../debugger/linux/test_l0_debugger_linux.cpp | 4 ++ .../sources/debugger/test_l0_debugger_1.cpp | 35 ++++++---- .../sources/debugger/test_l0_debugger_2.cpp | 40 +++++------ .../test_l0_debugger_sba_tracking.cpp | 70 ++++++++++++++----- .../windows/test_l0_debugger_windows.cpp | 4 ++ 10 files changed, 137 insertions(+), 50 deletions(-) diff --git a/level_zero/core/source/debugger/debugger_l0.cpp b/level_zero/core/source/debugger/debugger_l0.cpp index 86a227acd5..ad437169f0 100644 --- a/level_zero/core/source/debugger/debugger_l0.cpp +++ b/level_zero/core/source/debugger/debugger_l0.cpp @@ -30,6 +30,8 @@ DebuggerL0::DebuggerL0(NEO::Device *device) : device(device) { void DebuggerL0::initialize() { + initSbaTrackingMode(); + if (NEO::DebugManager.flags.DebuggerForceSbaTrackingMode.get() != -1) { setSingleAddressSpaceSbaTracking(NEO::DebugManager.flags.DebuggerForceSbaTrackingMode.get()); } diff --git a/level_zero/core/source/debugger/debugger_l0.h b/level_zero/core/source/debugger/debugger_l0.h index 4df07a1f78..97a251a41b 100644 --- a/level_zero/core/source/debugger/debugger_l0.h +++ b/level_zero/core/source/debugger/debugger_l0.h @@ -96,6 +96,7 @@ class DebuggerL0 : public NEO::Debugger, NEO::NonCopyableOrMovableClass { MOCKABLE_VIRTUAL void notifyCommandQueueCreated(); MOCKABLE_VIRTUAL void notifyCommandQueueDestroyed(); MOCKABLE_VIRTUAL void notifyModuleLoadAllocations(const StackVec &allocs); + void initSbaTrackingMode(); virtual void programSbaTrackingCommands(NEO::LinearStream &cmdStream, const SbaAddresses &sba) = 0; virtual size_t getSbaAddressLoadCommandsSize() = 0; @@ -107,6 +108,7 @@ class DebuggerL0 : public NEO::Debugger, NEO::NonCopyableOrMovableClass { void setSingleAddressSpaceSbaTracking(bool value) { singleAddressSpaceSbaTracking = value; } + bool getSingleAddressSpaceSbaTracking() { return singleAddressSpaceSbaTracking; } protected: static bool isAnyTrackedAddressChanged(SbaAddresses sba) { diff --git a/level_zero/core/source/debugger/linux/debugger_l0_linux.cpp b/level_zero/core/source/debugger/linux/debugger_l0_linux.cpp index 0b89a1f665..32f0c75954 100644 --- a/level_zero/core/source/debugger/linux/debugger_l0_linux.cpp +++ b/level_zero/core/source/debugger/linux/debugger_l0_linux.cpp @@ -25,6 +25,10 @@ bool DebuggerL0::initDebuggingInOs(NEO::OSInterface *osInterface) { return false; } +void DebuggerL0::initSbaTrackingMode() { + singleAddressSpaceSbaTracking = false; +} + void DebuggerL0::registerElf(NEO::DebugData *debugData, NEO::GraphicsAllocation *isaAllocation) { if (device->getRootDeviceEnvironment().osInterface.get() != nullptr) { auto drm = device->getRootDeviceEnvironment().osInterface->getDriverModel()->as(); diff --git a/level_zero/core/source/debugger/windows/debugger_l0_windows.cpp b/level_zero/core/source/debugger/windows/debugger_l0_windows.cpp index 0586989e25..b43025a75b 100644 --- a/level_zero/core/source/debugger/windows/debugger_l0_windows.cpp +++ b/level_zero/core/source/debugger/windows/debugger_l0_windows.cpp @@ -25,6 +25,10 @@ bool DebuggerL0::initDebuggingInOs(NEO::OSInterface *osInterface) { return true; } +void DebuggerL0::initSbaTrackingMode() { + singleAddressSpaceSbaTracking = true; +} + void DebuggerL0::registerElf(NEO::DebugData *debugData, NEO::GraphicsAllocation *isaAllocation) { } diff --git a/level_zero/core/test/unit_tests/sources/debugger/l0_debugger_fixture.h b/level_zero/core/test/unit_tests/sources/debugger/l0_debugger_fixture.h index 423a9717c2..244318d5f3 100644 --- a/level_zero/core/test/unit_tests/sources/debugger/l0_debugger_fixture.h +++ b/level_zero/core/test/unit_tests/sources/debugger/l0_debugger_fixture.h @@ -84,5 +84,27 @@ struct L0DebuggerHwFixture : public L0DebuggerFixture { DebuggerL0 *debuggerHw = nullptr; }; +struct L0DebuggerPerContextAddressSpaceFixture : public L0DebuggerHwFixture { + void SetUp() { + NEO::DebugManager.flags.DebuggerForceSbaTrackingMode.set(0); + L0DebuggerHwFixture::SetUp(); + } + void TearDown() { + L0DebuggerHwFixture::TearDown(); + } + DebugManagerStateRestore restorer; +}; + +struct L0DebuggerHwParameterizedFixture : ::testing::TestWithParam, public L0DebuggerHwFixture { + void SetUp() override { + NEO::DebugManager.flags.DebuggerForceSbaTrackingMode.set(GetParam()); + L0DebuggerHwFixture::SetUp(); + } + void TearDown() override { + L0DebuggerHwFixture::TearDown(); + } + DebugManagerStateRestore restorer; +}; + } // namespace ult } // namespace L0 diff --git a/level_zero/core/test/unit_tests/sources/debugger/linux/test_l0_debugger_linux.cpp b/level_zero/core/test/unit_tests/sources/debugger/linux/test_l0_debugger_linux.cpp index 74033d3d51..6dbb1ef2ea 100644 --- a/level_zero/core/test/unit_tests/sources/debugger/linux/test_l0_debugger_linux.cpp +++ b/level_zero/core/test/unit_tests/sources/debugger/linux/test_l0_debugger_linux.cpp @@ -73,6 +73,10 @@ TEST_F(L0DebuggerLinuxTest, whenDebuggerIsCreatedThenItCallsDrmToRegisterResourc EXPECT_TRUE(drmMock->registerClassesCalled); } +TEST_F(L0DebuggerLinuxTest, givenLinuxOSWhenL0DebuggerIsCreatedAddressModeIsNotSingleSpace) { + EXPECT_FALSE(device->getL0Debugger()->getSingleAddressSpaceSbaTracking()); +} + TEST(L0DebuggerLinux, givenVmBindAndPerContextVmEnabledInDrmWhenInitializingDebuggingInOsThenRegisterResourceClassesIsCalled) { auto executionEnvironment = std::make_unique(); diff --git a/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_1.cpp b/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_1.cpp index dc8d155804..6ad4446ae0 100644 --- a/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_1.cpp +++ b/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_1.cpp @@ -21,20 +21,21 @@ namespace L0 { namespace ult { using L0DebuggerTest = Test; +using L0DebuggerParameterizedTests = L0DebuggerHwParameterizedFixture; -TEST_F(L0DebuggerTest, givenL0DebuggerWhenCallingIsLegacyThenFalseIsReturned) { +TEST_P(L0DebuggerParameterizedTests, givenL0DebuggerWhenCallingIsLegacyThenFalseIsReturned) { EXPECT_FALSE(neoDevice->getDebugger()->isLegacy()); } -TEST_F(L0DebuggerTest, givenL0DebuggerWhenGettingSourceLevelDebuggerThenNullptrReturned) { +TEST_P(L0DebuggerParameterizedTests, givenL0DebuggerWhenGettingSourceLevelDebuggerThenNullptrReturned) { EXPECT_EQ(nullptr, neoDevice->getSourceLevelDebugger()); } -TEST_F(L0DebuggerTest, givenL0DebuggerWhenGettingL0DebuggerThenValidDebuggerInstanceIsReturned) { +TEST_P(L0DebuggerParameterizedTests, givenL0DebuggerWhenGettingL0DebuggerThenValidDebuggerInstanceIsReturned) { EXPECT_NE(nullptr, device->getL0Debugger()); } -TEST_F(L0DebuggerTest, givenL0DebuggerWhenGettingSipAllocationThenValidSipTypeIsReturned) { +TEST_P(L0DebuggerParameterizedTests, givenL0DebuggerWhenGettingSipAllocationThenValidSipTypeIsReturned) { neoDevice->setDebuggerActive(true); auto systemRoutine = SipKernel::getSipKernel(*neoDevice).getSipAllocation(); ASSERT_NE(nullptr, systemRoutine); @@ -49,12 +50,12 @@ TEST_F(L0DebuggerTest, givenL0DebuggerWhenGettingSipAllocationThenValidSipTypeIs EXPECT_EQ(expectedSipAllocation, systemRoutine); } -TEST_F(L0DebuggerTest, givenL0DebuggerWhenGettingSipTypeThenDebugBindlessIsReturned) { +TEST_P(L0DebuggerParameterizedTests, givenL0DebuggerWhenGettingSipTypeThenDebugBindlessIsReturned) { auto sipType = SipKernel::getSipKernelType(*neoDevice); EXPECT_EQ(NEO::SipKernelType::DbgBindless, sipType); } -TEST_F(L0DebuggerTest, givenL0DebuggerWhenGettingStateSaveAreaHeaderThenValidSipTypeIsReturned) { +TEST_P(L0DebuggerParameterizedTests, givenL0DebuggerWhenGettingStateSaveAreaHeaderThenValidSipTypeIsReturned) { auto &stateSaveAreaHeader = SipKernel::getSipKernel(*neoDevice).getStateSaveAreaHeader(); auto sipType = SipKernel::getSipKernelType(*neoDevice); @@ -63,12 +64,12 @@ TEST_F(L0DebuggerTest, givenL0DebuggerWhenGettingStateSaveAreaHeaderThenValidSip EXPECT_EQ(expectedStateSaveAreaHeader, stateSaveAreaHeader); } -TEST_F(L0DebuggerTest, givenProgramDebuggingEnabledWhenDebuggerIsCreatedThenFusedEusAreDisabled) { +TEST_P(L0DebuggerParameterizedTests, givenProgramDebuggingEnabledWhenDebuggerIsCreatedThenFusedEusAreDisabled) { EXPECT_TRUE(driverHandle->enableProgramDebugging); EXPECT_FALSE(neoDevice->getHardwareInfo().capabilityTable.fusedEuEnabled); } -TEST_F(L0DebuggerTest, givenProgramDebuggingEnabledWhenDebuggerIsCreatedThenCompressionIsDisabled) { +TEST_P(L0DebuggerParameterizedTests, givenProgramDebuggingEnabledWhenDebuggerIsCreatedThenCompressionIsDisabled) { EXPECT_TRUE(driverHandle->enableProgramDebugging); EXPECT_FALSE(neoDevice->getHardwareInfo().capabilityTable.ftrRenderCompressedBuffers); EXPECT_FALSE(neoDevice->getHardwareInfo().capabilityTable.ftrRenderCompressedImages); @@ -137,7 +138,8 @@ TEST(Debugger, givenDebuggingEnabledInExecEnvWhenAllocatingIsaThenSingleBankIsUs neoDevice->getMemoryManager()->freeGraphicsMemory(allocation); } -HWTEST_F(L0DebuggerTest, givenDebuggingEnabledWhenCommandListIsExecutedThenValidKernelDebugCommandsAreAdded) { +using L0DebuggerPerContextAddressSpaceTest = Test; +HWTEST_F(L0DebuggerPerContextAddressSpaceTest, givenDebuggingEnabledWhenCommandListIsExecutedThenValidKernelDebugCommandsAreAdded) { using MI_LOAD_REGISTER_IMM = typename FamilyType::MI_LOAD_REGISTER_IMM; using STATE_SIP = typename FamilyType::STATE_SIP; @@ -203,7 +205,9 @@ HWTEST_F(L0DebuggerTest, givenDebuggingEnabledWhenCommandListIsExecutedThenValid commandQueue->destroy(); } -HWTEST_F(L0DebuggerTest, givenDebuggerWhenAppendingKernelToCommandListThenBindlessSurfaceStateForDebugSurfaceIsProgrammedAtOffsetZero) { +using Gen12Plus = IsAtLeastGfxCore; + +HWTEST2_P(L0DebuggerParameterizedTests, givenDebuggerWhenAppendingKernelToCommandListThenBindlessSurfaceStateForDebugSurfaceIsProgrammedAtOffsetZero, Gen12Plus) { using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; Mock<::L0::Kernel> kernel; @@ -233,7 +237,7 @@ HWTEST_F(L0DebuggerTest, givenDebuggerWhenAppendingKernelToCommandListThenBindle EXPECT_EQ(RENDER_SURFACE_STATE::COHERENCY_TYPE_GPU_COHERENT, debugSurfaceState->getCoherencyType()); } -HWTEST_F(L0DebuggerTest, givenDebuggerWhenAppendingKernelToCommandListThenDebugSurfaceIsProgrammedWithL3DisabledMOCS) { +HWTEST2_P(L0DebuggerParameterizedTests, givenDebuggerWhenAppendingKernelToCommandListThenDebugSurfaceIsProgrammedWithL3DisabledMOCS, Gen12Plus) { using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; Mock<::L0::Kernel> kernel; @@ -255,7 +259,7 @@ HWTEST_F(L0DebuggerTest, givenDebuggerWhenAppendingKernelToCommandListThenDebugS EXPECT_EQ(actualMocs, mocsNoCache); } -HWTEST_F(L0DebuggerTest, givenEnabledDebuggingWhenIsaTypeAllocatedOnMultitileDeviceThenSharedAllocationIsCreated) { +HWTEST_P(L0DebuggerParameterizedTests, givenEnabledDebuggingWhenIsaTypeAllocatedOnMultitileDeviceThenSharedAllocationIsCreated) { auto debugger = device->getL0Debugger(); ASSERT_NE(nullptr, debugger); @@ -640,7 +644,7 @@ HWTEST_F(L0DebuggerTest, givenDebuggerWhenCreatedThenModuleHeapDebugAreaIsCreate neoDevice->getMemoryManager()->freeGraphicsMemory(allocation); } -HWTEST_F(L0DebuggerTest, givenBindlessSipWhenModuleHeapDebugAreaIsCreatedThenReservedFieldIsSet) { +HWTEST_P(L0DebuggerParameterizedTests, givenBindlessSipWhenModuleHeapDebugAreaIsCreatedThenReservedFieldIsSet) { DebugManagerStateRestore restorer; NEO::DebugManager.flags.UseBindlessDebugSip.set(1); @@ -660,7 +664,7 @@ HWTEST_F(L0DebuggerTest, givenBindlessSipWhenModuleHeapDebugAreaIsCreatedThenRes EXPECT_EQ(1u, header->reserved1); } -HWTEST_F(L0DebuggerTest, givenUseBindlessDebugSipZeroWhenModuleHeapDebugAreaIsCreatedThenReservedFieldIsSet) { +HWTEST_P(L0DebuggerParameterizedTests, givenUseBindlessDebugSipZeroWhenModuleHeapDebugAreaIsCreatedThenReservedFieldIsSet) { DebugManagerStateRestore restorer; NEO::DebugManager.flags.UseBindlessDebugSip.set(0); @@ -714,5 +718,8 @@ using ATSOrDG2 = IsWithinGfxCore; HWTEST2_F(L0DebuggerTest, givenAtsOrDg2AndDebugIsActiveThenDisableL3CacheInGmmHelperIsSet, ATSOrDG2) { EXPECT_TRUE(static_cast(neoDevice->getGmmHelper())->allResourcesUncached); } + +INSTANTIATE_TEST_CASE_P(SBAModesForDebugger, L0DebuggerParameterizedTests, ::testing::Values(0, 1)); + } // namespace ult } // namespace L0 diff --git a/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_2.cpp b/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_2.cpp index 9895cde048..11ed1519c4 100644 --- a/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_2.cpp +++ b/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_2.cpp @@ -19,17 +19,15 @@ namespace L0 { namespace ult { -using L0DebuggerTest = Test; - -struct L0DebuggerWithBlitterTest : public L0DebuggerTest { +struct L0DebuggerWithBlitterTest : public L0DebuggerHwParameterizedFixture { void SetUp() override { VariableBackup backupHwInfo(defaultHwInfo.get()); defaultHwInfo->capabilityTable.blitterOperationsSupported = true; - L0DebuggerTest::SetUp(); + L0DebuggerHwParameterizedFixture::SetUp(); } }; -HWTEST_F(L0DebuggerWithBlitterTest, givenFlushTaskSubmissionEnabledWhenCommandListIsInititalizedOrResetThenCaptureSbaIsNotCalled) { +HWTEST_P(L0DebuggerWithBlitterTest, givenFlushTaskSubmissionEnabledWhenCommandListIsInititalizedOrResetThenCaptureSbaIsNotCalled) { using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS; DebugManagerStateRestore restorer; @@ -58,7 +56,7 @@ HWTEST_F(L0DebuggerWithBlitterTest, givenFlushTaskSubmissionEnabledWhenCommandLi commandList->destroy(); } -HWTEST_F(L0DebuggerWithBlitterTest, givenFlushTaskSubmissionDisabledWhenCommandListIsInititalizedOrResetThenCaptureSbaIsNotCalled) { +HWTEST_P(L0DebuggerWithBlitterTest, givenFlushTaskSubmissionDisabledWhenCommandListIsInititalizedOrResetThenCaptureSbaIsNotCalled) { using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS; DebugManagerStateRestore restorer; @@ -87,7 +85,7 @@ HWTEST_F(L0DebuggerWithBlitterTest, givenFlushTaskSubmissionDisabledWhenCommandL commandList->destroy(); } -HWTEST_F(L0DebuggerWithBlitterTest, givenDebuggerLogsDisabledWhenCommandListIsSynchronizedThenSbaAddressesAreNotPrinted) { +HWTEST_P(L0DebuggerWithBlitterTest, givenDebuggerLogsDisabledWhenCommandListIsSynchronizedThenSbaAddressesAreNotPrinted) { DebugManagerStateRestore restorer; NEO::DebugManager.flags.DebuggerLogBitmask.set(0); @@ -107,7 +105,8 @@ HWTEST_F(L0DebuggerWithBlitterTest, givenDebuggerLogsDisabledWhenCommandListIsSy commandList->destroy(); } -HWTEST_F(L0DebuggerWithBlitterTest, givenImmediateCommandListWhenExecutingWithFlushTaskThenSipIsInstalledAndDebuggerAllocationsAreResident) { +using Gen12Plus = IsAtLeastGfxCore; +HWTEST2_P(L0DebuggerWithBlitterTest, givenImmediateCommandListWhenExecutingWithFlushTaskThenSipIsInstalledAndDebuggerAllocationsAreResident, Gen12Plus) { using STATE_SIP = typename FamilyType::STATE_SIP; using MI_LOAD_REGISTER_IMM = typename FamilyType::MI_LOAD_REGISTER_IMM; @@ -168,7 +167,7 @@ HWTEST_F(L0DebuggerWithBlitterTest, givenImmediateCommandListWhenExecutingWithFl commandList->destroy(); } -HWTEST_F(L0DebuggerWithBlitterTest, givenInternalUsageImmediateCommandListWhenExecutingThenDebuggerAllocationsAreNotResident) { +HWTEST_P(L0DebuggerWithBlitterTest, givenInternalUsageImmediateCommandListWhenExecutingThenDebuggerAllocationsAreNotResident) { using STATE_SIP = typename FamilyType::STATE_SIP; Mock<::L0::Kernel> kernel; @@ -209,7 +208,7 @@ HWTEST_F(L0DebuggerWithBlitterTest, givenInternalUsageImmediateCommandListWhenEx commandList->destroy(); } -HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledForImmediateCommandListForAppendLaunchKernelIndirectThenSuccessIsReturned) { +HWTEST2_P(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledForImmediateCommandListForAppendLaunchKernelIndirectThenSuccessIsReturned, Gen12Plus) { Mock<::L0::Kernel> kernel; DebugManagerStateRestore restorer; NEO::DebugManager.flags.EnableFlushTaskSubmission.set(true); @@ -226,7 +225,7 @@ HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledForImme commandList->destroy(); } -HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionDisabledForImmediateCommandListForAppendLaunchKernelIndirectThenSuccessIsReturned) { +HWTEST2_P(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionDisabledForImmediateCommandListForAppendLaunchKernelIndirectThenSuccessIsReturned, Gen12Plus) { Mock<::L0::Kernel> kernel; DebugManagerStateRestore restorer; NEO::DebugManager.flags.EnableFlushTaskSubmission.set(false); @@ -243,7 +242,7 @@ HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionDisabledForImm commandList->destroy(); } -HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledForImmediateCommandListForAppendMemoryCopyThenSuccessIsReturned) { +HWTEST2_P(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledForImmediateCommandListForAppendMemoryCopyThenSuccessIsReturned, Gen12Plus) { DebugManagerStateRestore restorer; NEO::DebugManager.flags.EnableFlushTaskSubmission.set(true); @@ -259,7 +258,7 @@ HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledForImme commandList->destroy(); } -HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionDisabledForImmediateCommandListForAppendMemoryCopyThenSuccessIsReturned) { +HWTEST2_P(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionDisabledForImmediateCommandListForAppendMemoryCopyThenSuccessIsReturned, Gen12Plus) { DebugManagerStateRestore restorer; NEO::DebugManager.flags.EnableFlushTaskSubmission.set(false); @@ -275,7 +274,7 @@ HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionDisabledForImm commandList->destroy(); } -HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledForImmediateCommandListForAppendMemoryCopyRegionThenSuccessIsReturned) { +HWTEST2_P(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledForImmediateCommandListForAppendMemoryCopyRegionThenSuccessIsReturned, Gen12Plus) { DebugManagerStateRestore restorer; NEO::DebugManager.flags.EnableFlushTaskSubmission.set(true); @@ -296,7 +295,7 @@ HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledForImme commandList->destroy(); } -HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledForRegularCommandListForAppendMemoryCopyRegionThenSuccessIsReturned) { +HWTEST2_P(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledForRegularCommandListForAppendMemoryCopyRegionThenSuccessIsReturned, Gen12Plus) { DebugManagerStateRestore restorer; NEO::DebugManager.flags.EnableFlushTaskSubmission.set(true); @@ -329,7 +328,7 @@ HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledForRegu commandQueue->destroy(); } -HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionDisabledForImmediateCommandListForAppendMemoryCopyRegionThenSuccessIsReturned) { +HWTEST2_P(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionDisabledForImmediateCommandListForAppendMemoryCopyRegionThenSuccessIsReturned, Gen12Plus) { DebugManagerStateRestore restorer; NEO::DebugManager.flags.EnableFlushTaskSubmission.set(false); @@ -348,7 +347,7 @@ HWTEST_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionDisabledForImm commandList->destroy(); } -HWTEST2_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledCommandListAndAppendMemoryCopyCalledInLoopThenMultipleCommandBufferAreUsedAndSuccessIsReturned, IsAtLeastSkl) { +HWTEST2_P(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledCommandListAndAppendMemoryCopyCalledInLoopThenMultipleCommandBufferAreUsedAndSuccessIsReturned, Gen12Plus) { DebugManagerStateRestore restorer; NEO::DebugManager.flags.EnableFlushTaskSubmission.set(true); @@ -366,7 +365,7 @@ HWTEST2_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionEnabledComman commandList->destroy(); } -HWTEST2_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionDisabledCommandListAndAppendMemoryCopyCalledInLoopThenMultipleCommandBufferAreUsedAndSuccessIsReturned, IsAtLeastSkl) { +HWTEST2_P(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionDisabledCommandListAndAppendMemoryCopyCalledInLoopThenMultipleCommandBufferAreUsedAndSuccessIsReturned, Gen12Plus) { DebugManagerStateRestore restorer; NEO::DebugManager.flags.EnableFlushTaskSubmission.set(false); @@ -384,7 +383,7 @@ HWTEST2_F(L0DebuggerWithBlitterTest, givenUseCsrImmediateSubmissionDisabledComma commandList->destroy(); } -HWTEST2_F(L0DebuggerWithBlitterTest, givenDebuggingEnabledWhenInternalCmdQIsUsedThenDebuggerPathsAreNotExecuted, IsAtLeastSkl) { +HWTEST2_P(L0DebuggerWithBlitterTest, givenDebuggingEnabledWhenInternalCmdQIsUsedThenDebuggerPathsAreNotExecuted, IsAtLeastSkl) { ze_command_queue_desc_t queueDesc = {}; std::unique_ptr, Deleter> commandQueue(new MockCommandQueueHw(device, neoDevice->getDefaultEngine().commandStreamReceiver, &queueDesc)); @@ -428,7 +427,7 @@ HWTEST2_F(L0DebuggerWithBlitterTest, givenDebuggingEnabledWhenInternalCmdQIsUsed commandList->destroy(); } -HWTEST_F(L0DebuggerWithBlitterTest, givenDebuggingEnabledWhenCommandListIsExecutedOnCopyOnlyCmdQThenKernelDebugCommandsAreNotAdded) { +HWTEST_P(L0DebuggerWithBlitterTest, givenDebuggingEnabledWhenCommandListIsExecutedOnCopyOnlyCmdQThenKernelDebugCommandsAreNotAdded) { using MI_LOAD_REGISTER_IMM = typename FamilyType::MI_LOAD_REGISTER_IMM; using STATE_SIP = typename FamilyType::STATE_SIP; @@ -508,6 +507,7 @@ HWTEST_F(L0DebuggerWithBlitterTest, givenDebuggingEnabledWhenCommandListIsExecut commandQueue->destroy(); } +INSTANTIATE_TEST_CASE_P(SBAModesForDebugger, L0DebuggerWithBlitterTest, ::testing::Values(0, 1)); } // namespace ult } // namespace L0 diff --git a/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_sba_tracking.cpp b/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_sba_tracking.cpp index 86cd99849f..c18ca7983c 100644 --- a/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_sba_tracking.cpp +++ b/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_sba_tracking.cpp @@ -19,13 +19,45 @@ namespace L0 { namespace ult { +struct PerContextAddressSpaceFixture : public Test { + void SetUp() override { + NEO::DebugManager.flags.DebuggerForceSbaTrackingMode.set(0); + Test::SetUp(); + } + + void TearDown() override { + Test::TearDown(); + } + + DebugManagerStateRestore restorer; +}; + +struct L0DebuggerSimpleParameterizedTest : public ::testing::TestWithParam, DeviceFixture { + void SetUp() override { + NEO::DebugManager.flags.DebuggerForceSbaTrackingMode.set(GetParam()); + DeviceFixture::SetUp(); + } + + void TearDown() override { + DeviceFixture::TearDown(); + } + + DebugManagerStateRestore restorer; +}; + +using L0DebuggerPerContextAddressSpaceTest = Test; + using L0DebuggerTest = Test; -HWTEST_F(L0DebuggerTest, givenL0DebuggerWhenCreatedThenPerContextSbaTrackingBuffersAreAllocated) { +using L0DebuggerParameterizedTests = L0DebuggerHwParameterizedFixture; + +HWTEST_P(L0DebuggerParameterizedTests, givenL0DebuggerWhenCreatedThenPerContextSbaTrackingBuffersAreAllocated) { auto debugger = device->getL0Debugger(); ASSERT_NE(nullptr, debugger); - EXPECT_NE(0u, debugger->getSbaTrackingGpuVa()); + if (!debugger->getSingleAddressSpaceSbaTracking()) { + EXPECT_NE(0u, debugger->getSbaTrackingGpuVa()); + } std::vector allocations; auto &allEngines = device->getNEODevice()->getMemoryManager()->getRegisteredEngines(); @@ -68,11 +100,13 @@ HWTEST_F(L0DebuggerTest, givenCreatedL0DebuggerThenSbaTrackingBuffersContainVali } } -HWTEST_F(L0DebuggerTest, givenL0DebuggerWhenCreatedThenPerContextSbaTrackingBuffersAreAllocatedWithProperStorageInfo) { +HWTEST_P(L0DebuggerParameterizedTests, givenL0DebuggerWhenCreatedThenPerContextSbaTrackingBuffersAreAllocatedWithProperStorageInfo) { auto debugger = device->getL0Debugger(); ASSERT_NE(nullptr, debugger); - EXPECT_NE(0u, debugger->getSbaTrackingGpuVa()); + if (!debugger->getSingleAddressSpaceSbaTracking()) { + EXPECT_NE(0u, debugger->getSbaTrackingGpuVa()); + } std::vector allocations; for (auto &engine : device->getNEODevice()->getAllEngines()) { @@ -160,8 +194,9 @@ HWTEST_F(L0DebuggerMultiSubDeviceTest, givenMultiSubDevicesWhenSbaTrackingBuffer } using NotGen8Or11 = AreNotGfxCores; +using Gen12Plus = IsAtLeastGfxCore; -HWTEST2_F(L0DebuggerTest, givenDebuggingEnabledAndRequiredGsbaWhenCommandListIsExecutedThenProgramGsbaWritesToSbaTrackingBuffer, NotGen8Or11) { +HWTEST2_F(L0DebuggerPerContextAddressSpaceTest, givenDebuggingEnabledAndRequiredGsbaWhenCommandListIsExecutedThenProgramGsbaWritesToSbaTrackingBuffer, NotGen8Or11) { using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS; @@ -220,7 +255,7 @@ HWTEST2_F(L0DebuggerTest, givenDebuggingEnabledAndRequiredGsbaWhenCommandListIsE commandQueue->destroy(); } -HWTEST_F(L0DebuggerTest, givenDebuggingEnabledAndDebuggerLogsWhenCommandQueueIsSynchronizedThenSbaAddressesArePrinted) { +HWTEST2_F(L0DebuggerTest, givenDebuggingEnabledAndDebuggerLogsWhenCommandQueueIsSynchronizedThenSbaAddressesArePrinted, Gen12Plus) { DebugManagerStateRestore restorer; NEO::DebugManager.flags.DebuggerLogBitmask.set(255); @@ -255,7 +290,7 @@ HWTEST_F(L0DebuggerTest, givenDebuggingEnabledAndDebuggerLogsWhenCommandQueueIsS using L0DebuggerSimpleTest = Test; -HWTEST_F(L0DebuggerSimpleTest, givenNullL0DebuggerAndDebuggerLogsWhenCommandQueueIsSynchronizedThenSbaAddressesAreNotPrinted) { +HWTEST2_F(L0DebuggerSimpleTest, givenNullL0DebuggerAndDebuggerLogsWhenCommandQueueIsSynchronizedThenSbaAddressesAreNotPrinted, Gen12Plus) { DebugManagerStateRestore restorer; NEO::DebugManager.flags.DebuggerLogBitmask.set(255); @@ -286,7 +321,7 @@ HWTEST_F(L0DebuggerSimpleTest, givenNullL0DebuggerAndDebuggerLogsWhenCommandQueu commandQueue->destroy(); } -HWTEST_F(L0DebuggerTest, givenL0DebuggerAndDebuggerLogsDisabledWhenCommandQueueIsSynchronizedThenSbaAddressesAreNotPrinted) { +HWTEST2_F(L0DebuggerTest, givenL0DebuggerAndDebuggerLogsDisabledWhenCommandQueueIsSynchronizedThenSbaAddressesAreNotPrinted, Gen12Plus) { DebugManagerStateRestore restorer; NEO::DebugManager.flags.DebuggerLogBitmask.set(0); @@ -317,7 +352,7 @@ HWTEST_F(L0DebuggerTest, givenL0DebuggerAndDebuggerLogsDisabledWhenCommandQueueI commandQueue->destroy(); } -HWTEST2_F(L0DebuggerTest, givenDebuggingEnabledWhenNonCopyCommandListIsInititalizedOrResetThenSSHAddressIsTracked, NotGen8Or11) { +HWTEST2_F(L0DebuggerTest, givenDebuggingEnabledWhenNonCopyCommandListIsInititalizedOrResetThenSSHAddressIsTracked, Gen12Plus) { using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS; size_t usedSpaceBefore = 0; @@ -347,7 +382,7 @@ HWTEST2_F(L0DebuggerTest, givenDebuggingEnabledWhenNonCopyCommandListIsInititali commandList->destroy(); } -HWTEST2_F(L0DebuggerTest, givenDebuggingEnabledWhenCommandListIsExecutedThenSbaBufferIsPushedToResidencyContainer, IsAtLeastSkl) { +HWTEST2_F(L0DebuggerTest, givenDebuggingEnabledWhenCommandListIsExecutedThenSbaBufferIsPushedToResidencyContainer, Gen12Plus) { ze_command_queue_desc_t queueDesc = {}; std::unique_ptr, Deleter> commandQueue(new MockCommandQueueHw(device, neoDevice->getDefaultEngine().commandStreamReceiver, &queueDesc)); @@ -375,10 +410,10 @@ HWTEST2_F(L0DebuggerTest, givenDebuggingEnabledWhenCommandListIsExecutedThenSbaB commandList->destroy(); } -HWTEST_F(L0DebuggerSimpleTest, givenNonZeroGpuVasWhenProgrammingSbaTrackingThenCorrectCmdsAreAddedToStream) { +HWTEST_F(PerContextAddressSpaceFixture, givenNonZeroGpuVasWhenProgrammingSbaTrackingThenCorrectCmdsAreAddedToStream) { using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; auto debugger = std::make_unique>(neoDevice); - + debugger->singleAddressSpaceSbaTracking = 0; debugger->sbaTrackingGpuVa.address = 0x45670000; auto expectedGpuVa = debugger->sbaTrackingGpuVa.address + offsetof(SbaTrackedAddresses, GeneralStateBaseAddress); @@ -461,7 +496,7 @@ HWTEST_F(L0DebuggerSimpleTest, givenNonZeroGpuVasWhenProgrammingSbaTrackingThenC EXPECT_TRUE(cmdSdi->getStoreQword()); } -HWTEST_F(L0DebuggerSimpleTest, givenCanonizedGpuVasWhenProgrammingSbaTrackingThenNonCanonicalAddressesAreStored) { +HWTEST_F(PerContextAddressSpaceFixture, givenCanonizedGpuVasWhenProgrammingSbaTrackingThenNonCanonicalAddressesAreStored) { using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; auto debugger = std::make_unique>(neoDevice); @@ -547,7 +582,7 @@ HWTEST_F(L0DebuggerSimpleTest, givenCanonizedGpuVasWhenProgrammingSbaTrackingThe EXPECT_TRUE(cmdSdi->getStoreQword()); } -HWTEST_F(L0DebuggerSimpleTest, givenZeroGpuVasWhenProgrammingSbaTrackingThenStreamIsNotUsed) { +HWTEST2_P(L0DebuggerSimpleParameterizedTest, givenZeroGpuVasWhenProgrammingSbaTrackingThenStreamIsNotUsed, Gen12Plus) { using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; auto debugger = std::make_unique>(neoDevice); @@ -567,7 +602,7 @@ HWTEST_F(L0DebuggerSimpleTest, givenZeroGpuVasWhenProgrammingSbaTrackingThenStre EXPECT_EQ(0u, cmdStream.getUsed()); } -HWTEST_F(L0DebuggerSimpleTest, givenNotChangedSurfaceStateWhenCapturingSBAThenNoTrackingCmdsAreAdded) { +HWTEST2_P(L0DebuggerSimpleParameterizedTest, givenNotChangedSurfaceStateWhenCapturingSBAThenNoTrackingCmdsAreAdded, Gen12Plus) { auto debugger = std::make_unique>(neoDevice); debugger->sbaTrackingGpuVa.address = 0x45670000; @@ -590,7 +625,7 @@ HWTEST_F(L0DebuggerSimpleTest, givenNotChangedSurfaceStateWhenCapturingSBAThenNo EXPECT_EQ(sizeUsed, sizeUsed2); } -HWTEST_F(L0DebuggerSimpleTest, givenChangedBaseAddressesWhenCapturingSBAThenNoTrackingCmdsAreAdded) { +HWTEST2_P(L0DebuggerSimpleParameterizedTest, givenChangedBaseAddressesWhenCapturingSBAThenTrackingCmdsAreAdded, Gen12Plus) { auto debugger = std::make_unique>(neoDevice); debugger->sbaTrackingGpuVa.address = 0x45670000; @@ -634,5 +669,8 @@ HWTEST_F(L0DebuggerSimpleTest, givenChangedBaseAddressesWhenCapturingSBAThenNoTr } } +INSTANTIATE_TEST_CASE_P(SBAModesForDebugger, L0DebuggerParameterizedTests, ::testing::Values(0, 1)); +INSTANTIATE_TEST_CASE_P(SBAModesForDebugger, L0DebuggerSimpleParameterizedTest, ::testing::Values(0, 1)); + } // namespace ult } // namespace L0 diff --git a/level_zero/core/test/unit_tests/sources/debugger/windows/test_l0_debugger_windows.cpp b/level_zero/core/test/unit_tests/sources/debugger/windows/test_l0_debugger_windows.cpp index aae512e9fa..72e2dc226e 100644 --- a/level_zero/core/test/unit_tests/sources/debugger/windows/test_l0_debugger_windows.cpp +++ b/level_zero/core/test/unit_tests/sources/debugger/windows/test_l0_debugger_windows.cpp @@ -77,5 +77,9 @@ TEST_F(L0DebuggerWindowsTest, givenProgramDebuggingEnabledWhenDriverHandleIsCrea EXPECT_EQ(nullptr, neoDevice->getSourceLevelDebugger()); } +TEST_F(L0DebuggerWindowsTest, givenWindowsOSWhenL0DebuggerIsCreatedAddressModeIsSingleSpace) { + EXPECT_TRUE(device->getL0Debugger()->getSingleAddressSpaceSbaTracking()); +} + } // namespace ult } // namespace L0