feature: blocking makeResident for mapVirtualMem
Related-To: NEO-14547 Signed-off-by: Chandio, Bibrak Qamar <bibrak.qamar.chandio@intel.com>
This commit is contained in:
parent
9d592b59bd
commit
58d8c907cd
|
@ -1355,7 +1355,7 @@ ze_result_t ContextImp::mapVirtualMem(const void *ptr,
|
||||||
virtualMemoryReservation->mappedAllocations.insert(std::pair<void *, NEO::MemoryMappedRange *>(const_cast<void *>(ptr), mappedRange));
|
virtualMemoryReservation->mappedAllocations.insert(std::pair<void *, NEO::MemoryMappedRange *>(const_cast<void *>(ptr), mappedRange));
|
||||||
this->driverHandle->getSvmAllocsManager()->insertSVMAlloc(allocData);
|
this->driverHandle->getSvmAllocsManager()->insertSVMAlloc(allocData);
|
||||||
NEO::MemoryOperationsHandler *memoryOperationsIface = allocationNode->device->getRootDeviceEnvironment().memoryOperationsInterface.get();
|
NEO::MemoryOperationsHandler *memoryOperationsIface = allocationNode->device->getRootDeviceEnvironment().memoryOperationsInterface.get();
|
||||||
auto success = memoryOperationsIface->makeResident(allocationNode->device, ArrayRef<NEO::GraphicsAllocation *>(&allocationNode->allocation, 1), false, false);
|
auto success = memoryOperationsIface->makeResident(allocationNode->device, ArrayRef<NEO::GraphicsAllocation *>(&allocationNode->allocation, 1), false, true);
|
||||||
ze_result_t res = changeMemoryOperationStatusToL0ResultType(success);
|
ze_result_t res = changeMemoryOperationStatusToL0ResultType(success);
|
||||||
return res;
|
return res;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1308,6 +1308,64 @@ TEST_F(ContextTest, whenCallingMappingVirtualInterfacesOnPhysicalDeviceMemoryThe
|
||||||
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(ContextTest, whenCallingMappingVirtualInterfacesOnPhysicalDeviceMemoryThenMakeResidentIsCalledWithForcePagingFenceTrue) {
|
||||||
|
ze_context_handle_t hContext;
|
||||||
|
ze_context_desc_t desc = {ZE_STRUCTURE_TYPE_CONTEXT_DESC, nullptr, 0};
|
||||||
|
|
||||||
|
ze_result_t res = driverHandle->createContext(&desc, 0u, nullptr, &hContext);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||||
|
|
||||||
|
device->getNEODevice()->getExecutionEnvironment()->rootDeviceEnvironments[0]->memoryOperationsInterface =
|
||||||
|
std::make_unique<NEO::MockMemoryOperations>();
|
||||||
|
|
||||||
|
NEO::MockMemoryOperations *mockMemoryInterface = static_cast<NEO::MockMemoryOperations *>(
|
||||||
|
device->getNEODevice()->getExecutionEnvironment()->rootDeviceEnvironments[0]->memoryOperationsInterface.get());
|
||||||
|
|
||||||
|
ContextImp *contextImp = static_cast<ContextImp *>(L0::Context::fromHandle(hContext));
|
||||||
|
|
||||||
|
void *pStart = 0x0;
|
||||||
|
size_t size = 4096u;
|
||||||
|
void *ptr = nullptr;
|
||||||
|
size_t pagesize = 0u;
|
||||||
|
res = contextImp->queryVirtualMemPageSize(device, size, &pagesize);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||||
|
res = contextImp->reserveVirtualMem(pStart, pagesize, &ptr);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||||
|
EXPECT_GT(static_cast<int>(driverHandle->getMemoryManager()->getVirtualMemoryReservationMap().size()), 0);
|
||||||
|
|
||||||
|
ze_physical_mem_desc_t descMem = {ZE_STRUCTURE_TYPE_PHYSICAL_MEM_DESC, nullptr, ZE_PHYSICAL_MEM_FLAG_ALLOCATE_ON_DEVICE, pagesize};
|
||||||
|
ze_physical_mem_handle_t mem = {};
|
||||||
|
res = contextImp->createPhysicalMem(device, &descMem, &mem);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||||
|
|
||||||
|
size_t offset = 0;
|
||||||
|
|
||||||
|
std::vector<ze_memory_access_attribute_t> memoryAccessFlags = {
|
||||||
|
ZE_MEMORY_ACCESS_ATTRIBUTE_READWRITE, ZE_MEMORY_ACCESS_ATTRIBUTE_READONLY,
|
||||||
|
ZE_MEMORY_ACCESS_ATTRIBUTE_NONE};
|
||||||
|
|
||||||
|
for (auto accessFlags : memoryAccessFlags) {
|
||||||
|
EXPECT_FALSE(mockMemoryInterface->makeResidentForcePagingFenceValue);
|
||||||
|
res = contextImp->mapVirtualMem(ptr, pagesize, mem, offset, accessFlags);
|
||||||
|
EXPECT_TRUE(mockMemoryInterface->makeResidentForcePagingFenceValue);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||||
|
|
||||||
|
res = contextImp->unMapVirtualMem(ptr, pagesize);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||||
|
|
||||||
|
mockMemoryInterface->makeResidentForcePagingFenceValue = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = contextImp->destroyPhysicalMem(mem);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||||
|
|
||||||
|
res = contextImp->freeVirtualMem(ptr, pagesize);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||||
|
|
||||||
|
res = contextImp->destroy();
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(ContextTest, whenCallingMappingVirtualInterfacesOnPhysicalHostMemoryThenSuccessIsReturned) {
|
TEST_F(ContextTest, whenCallingMappingVirtualInterfacesOnPhysicalHostMemoryThenSuccessIsReturned) {
|
||||||
ze_context_handle_t hContext;
|
ze_context_handle_t hContext;
|
||||||
ze_context_desc_t desc = {ZE_STRUCTURE_TYPE_CONTEXT_DESC, nullptr, 0};
|
ze_context_desc_t desc = {ZE_STRUCTURE_TYPE_CONTEXT_DESC, nullptr, 0};
|
||||||
|
|
|
@ -45,6 +45,7 @@ class MockMemoryOperations : public MemoryOperationsHandler {
|
||||||
|
|
||||||
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded, const bool forcePagingFence) override {
|
MemoryOperationsStatus makeResident(Device *device, ArrayRef<GraphicsAllocation *> gfxAllocations, bool isDummyExecNeeded, const bool forcePagingFence) override {
|
||||||
makeResidentCalledCount++;
|
makeResidentCalledCount++;
|
||||||
|
makeResidentForcePagingFenceValue = forcePagingFence;
|
||||||
if (captureGfxAllocationsForMakeResident) {
|
if (captureGfxAllocationsForMakeResident) {
|
||||||
for (auto &gfxAllocation : gfxAllocations) {
|
for (auto &gfxAllocation : gfxAllocations) {
|
||||||
if (!gfxAllocation->getAubInfo().writeMemoryOnly) {
|
if (!gfxAllocation->getAubInfo().writeMemoryOnly) {
|
||||||
|
@ -117,6 +118,7 @@ class MockMemoryOperations : public MemoryOperationsHandler {
|
||||||
|
|
||||||
std::vector<GraphicsAllocation *> gfxAllocationsForMakeResident{};
|
std::vector<GraphicsAllocation *> gfxAllocationsForMakeResident{};
|
||||||
int makeResidentCalledCount = 0;
|
int makeResidentCalledCount = 0;
|
||||||
|
bool makeResidentForcePagingFenceValue = false;
|
||||||
int evictCalledCount = 0;
|
int evictCalledCount = 0;
|
||||||
int freeCalledCount = 0;
|
int freeCalledCount = 0;
|
||||||
uint32_t isResidentCalledCount = 0;
|
uint32_t isResidentCalledCount = 0;
|
||||||
|
|
Loading…
Reference in New Issue