mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-08 22:12:59 +08:00
feature: Set shared system USM madvise preferred location as prefetch region
Resolves: NEO-16482 Signed-off-by: John Falkowski <john.falkowski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
0f5381456d
commit
6b63304673
@@ -372,7 +372,7 @@ bool DrmMemoryManager::prefetchSharedSystemAlloc(const void *ptr, const size_t s
|
||||
auto memoryClassDevice = ioctlHelper->getDrmParamValue(DrmParam::memoryClassDevice);
|
||||
auto region = static_cast<uint32_t>((memoryClassDevice << 16u) | subDeviceIds[0]);
|
||||
auto vmId = drm.getVirtualMemoryAddressSpace(subDeviceIds[0]);
|
||||
return ioctlHelper->setVmPrefetch(reinterpret_cast<uint64_t>(ptr), size, region, vmId);
|
||||
return ioctlHelper->setVmSharedSystemMemPrefetch(reinterpret_cast<uint64_t>(ptr), size, region, vmId);
|
||||
}
|
||||
|
||||
bool DrmMemoryManager::setMemPrefetch(GraphicsAllocation *gfxAllocation, SubDeviceIdsVec &subDeviceIds, uint32_t rootDeviceIndex) {
|
||||
|
||||
@@ -137,6 +137,7 @@ class IoctlHelper {
|
||||
virtual AtomicAccessMode getVmSharedSystemAtomicAttribute(uint64_t handle, const size_t size, const uint32_t vmId) { return AtomicAccessMode::none; }
|
||||
virtual bool setVmBoAdviseForChunking(int32_t handle, uint64_t start, uint64_t length, uint32_t attribute, void *region) = 0;
|
||||
virtual bool setVmPrefetch(uint64_t start, uint64_t length, uint32_t region, uint32_t vmId) = 0;
|
||||
virtual bool setVmSharedSystemMemPrefetch(uint64_t start, uint64_t length, uint32_t region, uint32_t vmId) { return true; }
|
||||
virtual bool setGemTiling(void *setTiling) = 0;
|
||||
virtual bool getGemTiling(void *setTiling) = 0;
|
||||
virtual uint32_t getDirectSubmissionFlag() = 0;
|
||||
|
||||
@@ -994,6 +994,47 @@ bool IoctlHelperXe::setVmPrefetch(uint64_t start, uint64_t length, uint32_t regi
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IoctlHelperXe::setVmSharedSystemMemPrefetch(uint64_t start, uint64_t length, uint32_t region, uint32_t vmId) {
|
||||
xeLog(" -> IoctlHelperXe::%s s=0x%llx l=0x%llx align_s=0x%llx align_l=0x%llx vmid=0x%x\n", __FUNCTION__, start, length, alignDown(start, MemoryConstants::pageSize), alignSizeWholePage(reinterpret_cast<void *>(start), length), vmId);
|
||||
drm_xe_vm_bind bind = {};
|
||||
bind.vm_id = vmId;
|
||||
bind.num_binds = 1;
|
||||
|
||||
bind.bind.range = alignSizeWholePage(reinterpret_cast<void *>(start), length);
|
||||
bind.bind.addr = alignDown(start, MemoryConstants::pageSize);
|
||||
bind.bind.op = DRM_XE_VM_BIND_OP_PREFETCH;
|
||||
|
||||
auto pHwInfo = this->drm.getRootDeviceEnvironment().getHardwareInfo();
|
||||
if (debugManager.flags.OverrideMadviseSharedSystemPrefetchRegion.get() != -1) {
|
||||
constexpr uint32_t subDeviceMaskSize = DeviceBitfield().size();
|
||||
constexpr uint32_t subDeviceMaskMax = (1u << subDeviceMaskSize) - 1u;
|
||||
uint32_t subDeviceId = region & subDeviceMaskMax;
|
||||
DeviceBitfield subDeviceMask = (debugManager.flags.OverrideMadviseSharedSystemPrefetchRegion.get() << subDeviceId);
|
||||
MemoryClassInstance regionInstanceClass = this->drm.getMemoryInfo()->getMemoryRegionClassAndInstance(subDeviceMask, *pHwInfo);
|
||||
bind.bind.prefetch_mem_region_instance = regionInstanceClass.memoryInstance;
|
||||
} else {
|
||||
bind.bind.prefetch_mem_region_instance = DRM_XE_CONSULT_MEM_ADVISE_PREF_LOC;
|
||||
}
|
||||
|
||||
int ret = IoctlHelper::ioctl(DrmIoctl::gemVmBind, &bind);
|
||||
|
||||
xeLog(" vm=%d addr=0x%lx range=0x%lx region=0x%x operation=%d(%s) ret=%d\n",
|
||||
bind.vm_id,
|
||||
bind.bind.addr,
|
||||
bind.bind.range,
|
||||
bind.bind.prefetch_mem_region_instance,
|
||||
bind.bind.op,
|
||||
xeGetBindOperationName(bind.bind.op),
|
||||
ret);
|
||||
|
||||
if (ret != 0) {
|
||||
xeLog("error: %s ret=%d\n", xeGetBindOperationName(bind.bind.op), ret);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t IoctlHelperXe::getDirectSubmissionFlag() {
|
||||
xeLog(" -> IoctlHelperXe::%s\n", __FUNCTION__);
|
||||
return 0;
|
||||
|
||||
@@ -64,6 +64,7 @@ class IoctlHelperXe : public IoctlHelper {
|
||||
AtomicAccessMode getVmSharedSystemAtomicAttribute(uint64_t handle, const size_t size, const uint32_t vmId) override;
|
||||
bool setVmBoAdviseForChunking(int32_t handle, uint64_t start, uint64_t length, uint32_t attribute, void *region) override;
|
||||
bool setVmPrefetch(uint64_t start, uint64_t length, uint32_t region, uint32_t vmId) override;
|
||||
bool setVmSharedSystemMemPrefetch(uint64_t start, uint64_t length, uint32_t region, uint32_t vmId) override;
|
||||
bool setGemTiling(void *setTiling) override;
|
||||
bool getGemTiling(void *setTiling) override;
|
||||
uint32_t getDirectSubmissionFlag() override;
|
||||
|
||||
Reference in New Issue
Block a user