Add debug key to disable SBA tracking commands in single address space

DebuggerDisableSingleAddressSbaTracking defaults to false

Signed-off-by: Yates, Brandon <brandon.yates@intel.com>
This commit is contained in:
Yates, Brandon 2022-07-13 21:08:36 +00:00 committed by Compute-Runtime-Automation
parent fd1417532d
commit e55cd5961b
4 changed files with 31 additions and 7 deletions

View File

@ -76,6 +76,7 @@ DECLARE_DEBUG_VARIABLE(bool, UpdateCrossThreadDataSize, false, "Turn on cross th
DECLARE_DEBUG_VARIABLE(bool, UseNewQueryTopoIoctl, true, "Use DRM_I915_QUERY_COMPUTE_SLICES")
DECLARE_DEBUG_VARIABLE(bool, DisableGpuHangDetection, false, "Disable GPU hang detection")
DECLARE_DEBUG_VARIABLE(bool, DisableForceToStateless, false, "If platform requires force to stateless for buffers, then this flag can disable this requirement")
DECLARE_DEBUG_VARIABLE(bool, DebuggerDisableSingleAddressSbaTracking, false, "Disable SBA Tracking command programming in single address space mode")
DECLARE_DEBUG_VARIABLE(std::string, ForceDeviceId, std::string("unk"), "DeviceId selected for testing")
DECLARE_DEBUG_VARIABLE(std::string, FilterDeviceId, std::string("unk"), "Device id filter, adapter matching device id will be opened. Ignored when unk.")
DECLARE_DEBUG_VARIABLE(std::string, FilterBdfPath, std::string("unk"), "Linux-only, BDF path filter, only matching paths will be opened. Ignored when unk.")

View File

@ -9,12 +9,16 @@ namespace NEO {
template <typename GfxFamily>
size_t DebuggerL0Hw<GfxFamily>::getSbaTrackingCommandsSize(size_t trackedAddressCount) {
if (singleAddressSpaceSbaTracking) {
constexpr uint32_t aluCmdSize = sizeof(typename GfxFamily::MI_MATH) + sizeof(typename GfxFamily::MI_MATH_ALU_INST_INLINE) * NUM_ALU_INST_FOR_READ_MODIFY_WRITE;
return 2 * (sizeof(typename GfxFamily::MI_ARB_CHECK) + sizeof(typename GfxFamily::MI_BATCH_BUFFER_START)) +
trackedAddressCount * (sizeof(typename GfxFamily::MI_LOAD_REGISTER_IMM) + aluCmdSize + 2 * sizeof(typename GfxFamily::MI_STORE_REGISTER_MEM) +
3 * sizeof(typename GfxFamily::MI_STORE_DATA_IMM) +
sizeof(typename GfxFamily::MI_ARB_CHECK) +
sizeof(typename GfxFamily::MI_BATCH_BUFFER_START));
if (NEO::DebugManager.flags.DebuggerDisableSingleAddressSbaTracking.get()) {
return 0;
} else {
constexpr uint32_t aluCmdSize = sizeof(typename GfxFamily::MI_MATH) + sizeof(typename GfxFamily::MI_MATH_ALU_INST_INLINE) * NUM_ALU_INST_FOR_READ_MODIFY_WRITE;
return 2 * (sizeof(typename GfxFamily::MI_ARB_CHECK) + sizeof(typename GfxFamily::MI_BATCH_BUFFER_START)) +
trackedAddressCount * (sizeof(typename GfxFamily::MI_LOAD_REGISTER_IMM) + aluCmdSize + 2 * sizeof(typename GfxFamily::MI_STORE_REGISTER_MEM) +
3 * sizeof(typename GfxFamily::MI_STORE_DATA_IMM) +
sizeof(typename GfxFamily::MI_ARB_CHECK) +
sizeof(typename GfxFamily::MI_BATCH_BUFFER_START));
}
}
return trackedAddressCount * NEO::EncodeStoreMemory<GfxFamily>::getStoreDataImmSize();
}
@ -33,6 +37,10 @@ void DebuggerL0Hw<GfxFamily>::programSbaTrackingCommandsSingleAddressSpace(NEO::
UNRECOVERABLE_IF(!singleAddressSpaceSbaTracking);
if (NEO::DebugManager.flags.DebuggerDisableSingleAddressSbaTracking.get()) {
return;
}
std::vector<std::pair<size_t, uint64_t>> fieldOffsetAndValue;
if (sba.GeneralStateBaseAddress) {

View File

@ -436,4 +436,5 @@ EnablePrivateBO = 0
ExperimentalEnableDeviceAllocationCache = 0
OverrideL1CachePolicyInSurfaceStateAndStateless = -1
EnableBcsSwControlWa = -1
ExperimentalEnableL0DebuggerForOpenCL = 0
ExperimentalEnableL0DebuggerForOpenCL = 0
DebuggerDisableSingleAddressSbaTracking = 0

View File

@ -91,6 +91,20 @@ HWTEST2_F(SingleAddressSpaceFixture, WhenProgrammingSbaTrackingCommandsForSingle
EXPECT_THROW(debugger->getSbaTrackingCommandsSize(6), std::exception);
}
HWTEST2_F(SingleAddressSpaceFixture, GivenDebuggerDisableSingleAddressSbaTrackingThenNoCommandsProgrammed, IsAtLeastGen12lp) {
NEO::DebugManager.flags.DebuggerDisableSingleAddressSbaTracking.set(true);
auto debugger = std::make_unique<MockDebuggerL0Hw<FamilyType>>(pDevice);
NEO::LinearStream cmdStream;
NEO::Debugger::SbaAddresses sbaAddresses = {};
size_t sizeExpected = 0;
EXPECT_EQ(sizeExpected, cmdStream.getUsed());
debugger->programSbaTrackingCommandsSingleAddressSpace(cmdStream, sbaAddresses);
EXPECT_EQ(sizeExpected, cmdStream.getUsed());
EXPECT_EQ(sizeExpected, debugger->getSbaTrackingCommandsSize(6));
}
HWTEST2_F(SingleAddressSpaceFixture, GivenNonZeroSbaAddressesWhenProgrammingSbaTrackingCommandsForSingleAddressSpaceThenCorrectSequenceOfCommandsAreAddedToStream, IsAtLeastGen12lp) {
auto debugger = std::make_unique<MockDebuggerL0Hw<FamilyType>>(pDevice);
using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM;