Create module debug area allocation
Related-To: NEO-4550 Change-Id: I1aa151134cb51a7d4f578de3b08cdd51aefc58f2 Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
parent
60bfcbd69f
commit
4623cb3f85
|
@ -46,6 +46,27 @@ DebuggerL0::DebuggerL0(NEO::Device *device) : device(device) {
|
||||||
|
|
||||||
perContextSbaAllocations[engine.osContext->getContextId()] = sbaAllocation;
|
perContextSbaAllocations[engine.osContext->getContextId()] = sbaAllocation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto &hwInfo = device->getHardwareInfo();
|
||||||
|
auto &hwHelper = NEO::HwHelper::get(hwInfo.platform.eRenderCoreFamily);
|
||||||
|
NEO::AllocationProperties properties{device->getRootDeviceIndex(), true, MemoryConstants::pageSize64k,
|
||||||
|
NEO::GraphicsAllocation::AllocationType::DEBUG_MODULE_AREA,
|
||||||
|
false,
|
||||||
|
device->getDeviceBitfield()};
|
||||||
|
moduleDebugArea = device->getMemoryManager()->allocateGraphicsMemoryWithProperties(properties);
|
||||||
|
|
||||||
|
DebugAreaHeader debugArea = {};
|
||||||
|
debugArea.size = sizeof(DebugAreaHeader);
|
||||||
|
debugArea.pgsize = 1;
|
||||||
|
debugArea.isShared = 0;
|
||||||
|
debugArea.scratchBegin = sizeof(DebugAreaHeader);
|
||||||
|
debugArea.scratchEnd = MemoryConstants::pageSize64k - sizeof(DebugAreaHeader);
|
||||||
|
|
||||||
|
NEO::MemoryTransferHelper::transferMemoryToAllocation(hwHelper.isBlitCopyRequiredForLocalMemory(hwInfo, *moduleDebugArea),
|
||||||
|
*device, moduleDebugArea, 0, &debugArea,
|
||||||
|
sizeof(DebugAreaHeader));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerL0::printTrackedAddresses(uint32_t contextId) {
|
void DebuggerL0::printTrackedAddresses(uint32_t contextId) {
|
||||||
|
@ -65,6 +86,7 @@ DebuggerL0 ::~DebuggerL0() {
|
||||||
device->getMemoryManager()->freeGraphicsMemory(alloc.second);
|
device->getMemoryManager()->freeGraphicsMemory(alloc.second);
|
||||||
}
|
}
|
||||||
device->getMemoryManager()->freeGpuAddress(sbaTrackingGpuVa, device->getRootDeviceIndex());
|
device->getMemoryManager()->freeGpuAddress(sbaTrackingGpuVa, device->getRootDeviceIndex());
|
||||||
|
device->getMemoryManager()->freeGraphicsMemory(moduleDebugArea);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DebuggerL0::isDebuggerActive() {
|
bool DebuggerL0::isDebuggerActive() {
|
||||||
|
|
|
@ -34,6 +34,19 @@ struct SbaTrackedAddresses {
|
||||||
uint64_t BindlessSurfaceStateBaseAddress = 0;
|
uint64_t BindlessSurfaceStateBaseAddress = 0;
|
||||||
uint64_t BindlessSamplerStateBaseAddress = 0;
|
uint64_t BindlessSamplerStateBaseAddress = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct DebugAreaHeader {
|
||||||
|
char magic[8] = "dbgarea";
|
||||||
|
uint64_t reserved1;
|
||||||
|
uint8_t version;
|
||||||
|
uint8_t pgsize;
|
||||||
|
uint8_t size;
|
||||||
|
uint8_t reserved2;
|
||||||
|
uint16_t scratchBegin;
|
||||||
|
uint16_t scratchEnd;
|
||||||
|
uint64_t isShared : 1;
|
||||||
|
};
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
class DebuggerL0 : public NEO::Debugger, NEO::NonCopyableOrMovableClass {
|
class DebuggerL0 : public NEO::Debugger, NEO::NonCopyableOrMovableClass {
|
||||||
|
@ -48,6 +61,10 @@ class DebuggerL0 : public NEO::Debugger, NEO::NonCopyableOrMovableClass {
|
||||||
return perContextSbaAllocations[contextId];
|
return perContextSbaAllocations[contextId];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NEO::GraphicsAllocation *getModuleDebugArea() {
|
||||||
|
return moduleDebugArea;
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t getSbaTrackingGpuVa() {
|
uint64_t getSbaTrackingGpuVa() {
|
||||||
return sbaTrackingGpuVa.address;
|
return sbaTrackingGpuVa.address;
|
||||||
}
|
}
|
||||||
|
@ -71,6 +88,7 @@ class DebuggerL0 : public NEO::Debugger, NEO::NonCopyableOrMovableClass {
|
||||||
NEO::GraphicsAllocation *sbaAllocation = nullptr;
|
NEO::GraphicsAllocation *sbaAllocation = nullptr;
|
||||||
std::unordered_map<uint32_t, NEO::GraphicsAllocation *> perContextSbaAllocations;
|
std::unordered_map<uint32_t, NEO::GraphicsAllocation *> perContextSbaAllocations;
|
||||||
NEO::AddressRange sbaTrackingGpuVa;
|
NEO::AddressRange sbaTrackingGpuVa;
|
||||||
|
NEO::GraphicsAllocation *moduleDebugArea = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
using DebugerL0CreateFn = DebuggerL0 *(*)(NEO::Device *device);
|
using DebugerL0CreateFn = DebuggerL0 *(*)(NEO::Device *device);
|
||||||
|
|
|
@ -21,7 +21,9 @@ struct L0DebuggerFixture {
|
||||||
auto mockBuiltIns = new MockBuiltins();
|
auto mockBuiltIns = new MockBuiltins();
|
||||||
executionEnvironment->prepareRootDeviceEnvironments(1);
|
executionEnvironment->prepareRootDeviceEnvironments(1);
|
||||||
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltIns);
|
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltIns);
|
||||||
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(defaultHwInfo.get());
|
hwInfo = *NEO::defaultHwInfo.get();
|
||||||
|
hwInfo.featureTable.ftrLocalMemory = true;
|
||||||
|
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&hwInfo);
|
||||||
executionEnvironment->initializeMemoryManager();
|
executionEnvironment->initializeMemoryManager();
|
||||||
|
|
||||||
neoDevice = NEO::MockDevice::create<NEO::MockDevice>(executionEnvironment, 0u);
|
neoDevice = NEO::MockDevice::create<NEO::MockDevice>(executionEnvironment, 0u);
|
||||||
|
@ -41,6 +43,7 @@ struct L0DebuggerFixture {
|
||||||
std::unique_ptr<Mock<L0::DriverHandleImp>> driverHandle;
|
std::unique_ptr<Mock<L0::DriverHandleImp>> driverHandle;
|
||||||
NEO::MockDevice *neoDevice = nullptr;
|
NEO::MockDevice *neoDevice = nullptr;
|
||||||
L0::Device *device = nullptr;
|
L0::Device *device = nullptr;
|
||||||
|
NEO::HardwareInfo hwInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct L0DebuggerHwFixture : public L0DebuggerFixture {
|
struct L0DebuggerHwFixture : public L0DebuggerFixture {
|
||||||
|
|
|
@ -8,9 +8,12 @@
|
||||||
#include "shared/source/command_stream/linear_stream.h"
|
#include "shared/source/command_stream/linear_stream.h"
|
||||||
#include "shared/source/gen_common/reg_configs_common.h"
|
#include "shared/source/gen_common/reg_configs_common.h"
|
||||||
#include "shared/source/gmm_helper/gmm_helper.h"
|
#include "shared/source/gmm_helper/gmm_helper.h"
|
||||||
|
#include "shared/source/helpers/blit_commands_helper.h"
|
||||||
#include "shared/source/helpers/preamble.h"
|
#include "shared/source/helpers/preamble.h"
|
||||||
|
#include "shared/source/memory_manager/graphics_allocation.h"
|
||||||
#include "shared/source/os_interface/os_context.h"
|
#include "shared/source/os_interface/os_context.h"
|
||||||
#include "shared/test/unit_test/cmd_parse/gen_cmd_parse.h"
|
#include "shared/test/unit_test/cmd_parse/gen_cmd_parse.h"
|
||||||
|
#include "shared/test/unit_test/helpers/variable_backup.h"
|
||||||
|
|
||||||
#include "test.h"
|
#include "test.h"
|
||||||
|
|
||||||
|
@ -616,5 +619,35 @@ HWTEST_F(L0DebuggerSimpleTest, givenChangedBaseAddressesWhenCapturingSBAThenNoTr
|
||||||
EXPECT_NE(0u, sizeUsed);
|
EXPECT_NE(0u, sizeUsed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HWTEST_F(L0DebuggerTest, givenDebuggerWhenCreatedThenModuleHeapDebugAreaIsCreated) {
|
||||||
|
auto mockBlitMemoryToAllocation = [](const NEO::Device &device, NEO::GraphicsAllocation *memory, size_t offset, const void *hostPtr,
|
||||||
|
Vec3<size_t> size) -> NEO::BlitOperationResult {
|
||||||
|
memcpy(memory->getUnderlyingBuffer(), hostPtr, size.x);
|
||||||
|
return BlitOperationResult::Success;
|
||||||
|
};
|
||||||
|
VariableBackup<NEO::BlitHelperFunctions::BlitMemoryToAllocationFunc> blitMemoryToAllocationFuncBackup(
|
||||||
|
&NEO::BlitHelperFunctions::blitMemoryToAllocation, mockBlitMemoryToAllocation);
|
||||||
|
|
||||||
|
auto debugger = std::make_unique<MockDebuggerL0Hw<FamilyType>>(neoDevice);
|
||||||
|
auto debugArea = debugger->getModuleDebugArea();
|
||||||
|
|
||||||
|
auto allocation = neoDevice->getMemoryManager()->allocateGraphicsMemoryWithProperties(
|
||||||
|
{neoDevice->getRootDeviceIndex(), 4096, NEO::GraphicsAllocation::AllocationType::KERNEL_ISA, neoDevice->getDeviceBitfield()});
|
||||||
|
|
||||||
|
EXPECT_EQ(allocation->storageInfo.getMemoryBanks(), debugArea->storageInfo.getMemoryBanks());
|
||||||
|
|
||||||
|
DebugAreaHeader *header = reinterpret_cast<DebugAreaHeader *>(debugArea->getUnderlyingBuffer());
|
||||||
|
EXPECT_EQ(1u, header->pgsize);
|
||||||
|
EXPECT_EQ(0u, header->isShared);
|
||||||
|
|
||||||
|
EXPECT_STREQ("dbgarea", header->magic);
|
||||||
|
EXPECT_EQ(sizeof(DebugAreaHeader), header->size);
|
||||||
|
EXPECT_EQ(sizeof(DebugAreaHeader), header->scratchBegin);
|
||||||
|
EXPECT_EQ(MemoryConstants::pageSize64k - sizeof(DebugAreaHeader), header->scratchEnd);
|
||||||
|
|
||||||
|
neoDevice->getMemoryManager()->freeGraphicsMemory(allocation);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ult
|
} // namespace ult
|
||||||
} // namespace L0
|
} // namespace L0
|
||||||
|
|
|
@ -167,7 +167,6 @@ GraphicsAllocation *OsAgnosticMemoryManager::allocate32BitGraphicsMemoryImpl(con
|
||||||
memoryAllocation->set32BitAllocation(true);
|
memoryAllocation->set32BitAllocation(true);
|
||||||
memoryAllocation->setGpuBaseAddress(GmmHelper::canonize(gfxPartition->getHeapBase(heap)));
|
memoryAllocation->setGpuBaseAddress(GmmHelper::canonize(gfxPartition->getHeapBase(heap)));
|
||||||
memoryAllocation->sizeToFree = allocationSize;
|
memoryAllocation->sizeToFree = allocationSize;
|
||||||
memoryAllocation->storageInfo = allocationData.storageInfo;
|
|
||||||
}
|
}
|
||||||
counter++;
|
counter++;
|
||||||
return memoryAllocation;
|
return memoryAllocation;
|
||||||
|
|
|
@ -328,6 +328,8 @@ const char *FileLogger<DebugLevel>::getAllocationTypeString(GraphicsAllocation c
|
||||||
return "DEBUG_CONTEXT_SAVE_AREA";
|
return "DEBUG_CONTEXT_SAVE_AREA";
|
||||||
case GraphicsAllocation::AllocationType::DEBUG_SBA_TRACKING_BUFFER:
|
case GraphicsAllocation::AllocationType::DEBUG_SBA_TRACKING_BUFFER:
|
||||||
return "DEBUG_SBA_TRACKING_BUFFER";
|
return "DEBUG_SBA_TRACKING_BUFFER";
|
||||||
|
case GraphicsAllocation::AllocationType::DEBUG_MODULE_AREA:
|
||||||
|
return "DEBUG_MODULE_AREA";
|
||||||
default:
|
default:
|
||||||
return "ILLEGAL_VALUE";
|
return "ILLEGAL_VALUE";
|
||||||
}
|
}
|
||||||
|
|
|
@ -3909,6 +3909,16 @@ TEST(DrmAllocationTest, givenResourceRegistrationEnabledWhenAllocationTypeShould
|
||||||
EXPECT_EQ(DrmMockResources::registerResourceReturnHandle, bo.bindExtHandles[0]);
|
EXPECT_EQ(DrmMockResources::registerResourceReturnHandle, bo.bindExtHandles[0]);
|
||||||
EXPECT_EQ(Drm::ResourceClass::Isa, drm.registeredClass);
|
EXPECT_EQ(Drm::ResourceClass::Isa, drm.registeredClass);
|
||||||
}
|
}
|
||||||
|
drm.registeredClass = Drm::ResourceClass::MaxSize;
|
||||||
|
|
||||||
|
{
|
||||||
|
MockBufferObject bo(&drm, 0, 0, 1);
|
||||||
|
MockDrmAllocation allocation(GraphicsAllocation::AllocationType::DEBUG_MODULE_AREA, MemoryPool::System4KBPages);
|
||||||
|
allocation.bufferObjects[0] = &bo;
|
||||||
|
allocation.registerBOBindExtHandle(&drm);
|
||||||
|
EXPECT_EQ(DrmMockResources::registerResourceReturnHandle, bo.bindExtHandles[0]);
|
||||||
|
EXPECT_EQ(Drm::ResourceClass::ModuleHeapDebugArea, drm.registeredClass);
|
||||||
|
}
|
||||||
|
|
||||||
drm.registeredClass = Drm::ResourceClass::MaxSize;
|
drm.registeredClass = Drm::ResourceClass::MaxSize;
|
||||||
|
|
||||||
|
|
|
@ -932,7 +932,8 @@ AllocationTypeTestCase allocationTypeValues[] = {
|
||||||
{GraphicsAllocation::AllocationType::UNKNOWN, "UNKNOWN"},
|
{GraphicsAllocation::AllocationType::UNKNOWN, "UNKNOWN"},
|
||||||
{GraphicsAllocation::AllocationType::WRITE_COMBINED, "WRITE_COMBINED"},
|
{GraphicsAllocation::AllocationType::WRITE_COMBINED, "WRITE_COMBINED"},
|
||||||
{GraphicsAllocation::AllocationType::DEBUG_CONTEXT_SAVE_AREA, "DEBUG_CONTEXT_SAVE_AREA"},
|
{GraphicsAllocation::AllocationType::DEBUG_CONTEXT_SAVE_AREA, "DEBUG_CONTEXT_SAVE_AREA"},
|
||||||
{GraphicsAllocation::AllocationType::DEBUG_SBA_TRACKING_BUFFER, "DEBUG_SBA_TRACKING_BUFFER"}};
|
{GraphicsAllocation::AllocationType::DEBUG_SBA_TRACKING_BUFFER, "DEBUG_SBA_TRACKING_BUFFER"},
|
||||||
|
{GraphicsAllocation::AllocationType::DEBUG_MODULE_AREA, "DEBUG_MODULE_AREA"}};
|
||||||
|
|
||||||
class AllocationTypeLogging : public ::testing::TestWithParam<AllocationTypeTestCase> {};
|
class AllocationTypeLogging : public ::testing::TestWithParam<AllocationTypeTestCase> {};
|
||||||
|
|
||||||
|
|
|
@ -93,7 +93,8 @@ class GraphicsAllocation : public IDNode<GraphicsAllocation> {
|
||||||
RING_BUFFER,
|
RING_BUFFER,
|
||||||
SEMAPHORE_BUFFER,
|
SEMAPHORE_BUFFER,
|
||||||
DEBUG_CONTEXT_SAVE_AREA,
|
DEBUG_CONTEXT_SAVE_AREA,
|
||||||
DEBUG_SBA_TRACKING_BUFFER
|
DEBUG_SBA_TRACKING_BUFFER,
|
||||||
|
DEBUG_MODULE_AREA
|
||||||
};
|
};
|
||||||
|
|
||||||
~GraphicsAllocation() override;
|
~GraphicsAllocation() override;
|
||||||
|
|
|
@ -364,6 +364,7 @@ bool MemoryManager::getAllocationData(AllocationData &allocationData, const Allo
|
||||||
case GraphicsAllocation::AllocationType::SHARED_RESOURCE_COPY:
|
case GraphicsAllocation::AllocationType::SHARED_RESOURCE_COPY:
|
||||||
case GraphicsAllocation::AllocationType::SURFACE_STATE_HEAP:
|
case GraphicsAllocation::AllocationType::SURFACE_STATE_HEAP:
|
||||||
case GraphicsAllocation::AllocationType::TIMESTAMP_PACKET_TAG_BUFFER:
|
case GraphicsAllocation::AllocationType::TIMESTAMP_PACKET_TAG_BUFFER:
|
||||||
|
case GraphicsAllocation::AllocationType::DEBUG_MODULE_AREA:
|
||||||
allocationData.flags.resource48Bit = true;
|
allocationData.flags.resource48Bit = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -82,6 +82,9 @@ void DrmAllocation::registerBOBindExtHandle(Drm *drm) {
|
||||||
case GraphicsAllocation::AllocationType::KERNEL_ISA:
|
case GraphicsAllocation::AllocationType::KERNEL_ISA:
|
||||||
resourceClass = Drm::ResourceClass::Isa;
|
resourceClass = Drm::ResourceClass::Isa;
|
||||||
break;
|
break;
|
||||||
|
case GraphicsAllocation::AllocationType::DEBUG_MODULE_AREA:
|
||||||
|
resourceClass = Drm::ResourceClass::ModuleHeapDebugArea;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue