From 940b0b1a1a2ba8c64e5c7ccdfc5b526a40debe2d Mon Sep 17 00:00:00 2001 From: Szymon Morek Date: Thu, 9 Jan 2025 09:59:51 +0100 Subject: [PATCH 1/4] performance: add low latency hint for exec queues When workloads submit compute kernels, it's required to keep low submission latency. Impact of submission overhead is significant in a burst model, when application submits short-running kernels continuously. Signed-off-by: Szymon Morek --- shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp | 1 + third_party/uapi-eudebug/drm/xe_drm.h | 1 + third_party/uapi/drm-uapi-helper/xe/xe_drm.h | 1 + third_party/uapi/upstream/xe/xe_drm.h | 1 + 4 files changed, 4 insertions(+) diff --git a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp index 1b2d7321452fa..dc94de7fbffee 100644 --- a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp +++ b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp @@ -1304,6 +1304,7 @@ int IoctlHelperXe::createDrmContext(Drm &drm, OsContextLinux &osContext, uint32_ create.vm_id = drmVmId; create.instances = castToUint64(contextParamEngine.data()); create.extensions = (extPropertyIndex > 0U ? castToUint64(extProperties.data()) : 0UL); + create.flags = DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT; applyContextFlags(&create, allocateInterrupt); int ret = IoctlHelper::ioctl(DrmIoctl::gemContextCreateExt, &create); diff --git a/third_party/uapi-eudebug/drm/xe_drm.h b/third_party/uapi-eudebug/drm/xe_drm.h index ce20f8998ebdb..97b7674bd835f 100644 --- a/third_party/uapi-eudebug/drm/xe_drm.h +++ b/third_party/uapi-eudebug/drm/xe_drm.h @@ -1148,6 +1148,7 @@ struct drm_xe_exec_queue_create { /** @vm_id: VM to use for this exec queue */ __u32 vm_id; +#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT 1 /** @flags: MBZ */ __u32 flags; diff --git a/third_party/uapi/drm-uapi-helper/xe/xe_drm.h b/third_party/uapi/drm-uapi-helper/xe/xe_drm.h index 0642561f1d8c5..84ef9a13361f5 100644 --- a/third_party/uapi/drm-uapi-helper/xe/xe_drm.h +++ b/third_party/uapi/drm-uapi-helper/xe/xe_drm.h @@ -1121,6 +1121,7 @@ struct drm_xe_exec_queue_create { /** @vm_id: VM to use for this exec queue */ __u32 vm_id; +#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT 1 /** @flags: MBZ */ __u32 flags; diff --git a/third_party/uapi/upstream/xe/xe_drm.h b/third_party/uapi/upstream/xe/xe_drm.h index f0a450db957b5..504f090c69983 100644 --- a/third_party/uapi/upstream/xe/xe_drm.h +++ b/third_party/uapi/upstream/xe/xe_drm.h @@ -1121,6 +1121,7 @@ struct drm_xe_exec_queue_create { /** @vm_id: VM to use for this exec queue */ __u32 vm_id; +#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT 1 /** @flags: MBZ */ __u32 flags; From c4e7467c24ccc804b9d52820ced8b6d6fa8ac904 Mon Sep 17 00:00:00 2001 From: Szymon Morek Date: Thu, 9 Jan 2025 10:32:16 +0100 Subject: [PATCH 2/4] performance: add low latency hint for exec queues When workloads submit compute kernels, it's required to keep low submission latency. Impact of submission overhead is significant in a burst model, when application submits short-running kernels continuously. Signed-off-by: Szymon Morek --- .../linux/xe/ioctl_helper_xe_tests.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp index 69cc8084f2b88..7da2422737ce8 100644 --- a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp @@ -2590,3 +2590,20 @@ TEST_F(IoctlHelperXeTest, whenQueryDeviceIdAndRevisionThenProperValuesAreSet) { EXPECT_EQ(mockDeviceId, hwInfo->platform.usDeviceID); EXPECT_EQ(mockRevisionId, hwInfo->platform.usRevId); } + +TEST_F(IoctlHelperXeTest, givenXeIoctlHelperWhenCreateDrmContextThenLowLatencyFlagApplied) { + class MockLinuxOsContext : public OsContextLinux { + public: + using OsContextLinux::initializeContext; + using OsContextLinux::OsContextLinux; + }; + + auto executionEnvironment = std::make_unique(); + auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); + auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); + xeIoctlHelper->contextParamEngine.push_back(drm_xe_engine_class_instance{}); + MockLinuxOsContext osContext(*drm, 0, 5u, NEO::EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::regular})); + + osContext.initializeContext(false); + EXPECT_EQ(static_cast(DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT), drm->latestExecQueueCreate.flags); +} \ No newline at end of file From 29b986d65bf9f43916319b0a48a810eca31339c7 Mon Sep 17 00:00:00 2001 From: Szymon Morek Date: Thu, 9 Jan 2025 13:49:39 +0100 Subject: [PATCH 3/4] performance: add low latency hint for exec queues When workloads submit compute kernels, it's required to keep low submission latency. Impact of submission overhead is significant in a burst model, when application submits short-running kernels continuously. Signed-off-by: Szymon Morek --- third_party/uapi-eudebug/drm/xe_drm.h | 2 +- third_party/uapi/drm-uapi-helper/xe/xe_drm.h | 2 +- third_party/uapi/upstream/xe/xe_drm.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/third_party/uapi-eudebug/drm/xe_drm.h b/third_party/uapi-eudebug/drm/xe_drm.h index 97b7674bd835f..13d70020b2e4e 100644 --- a/third_party/uapi-eudebug/drm/xe_drm.h +++ b/third_party/uapi-eudebug/drm/xe_drm.h @@ -1148,7 +1148,7 @@ struct drm_xe_exec_queue_create { /** @vm_id: VM to use for this exec queue */ __u32 vm_id; -#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT 1 +#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT (0x1 << 1) /** @flags: MBZ */ __u32 flags; diff --git a/third_party/uapi/drm-uapi-helper/xe/xe_drm.h b/third_party/uapi/drm-uapi-helper/xe/xe_drm.h index 84ef9a13361f5..179239bdbcfde 100644 --- a/third_party/uapi/drm-uapi-helper/xe/xe_drm.h +++ b/third_party/uapi/drm-uapi-helper/xe/xe_drm.h @@ -1121,7 +1121,7 @@ struct drm_xe_exec_queue_create { /** @vm_id: VM to use for this exec queue */ __u32 vm_id; -#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT 1 +#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT (0x1 << 1) /** @flags: MBZ */ __u32 flags; diff --git a/third_party/uapi/upstream/xe/xe_drm.h b/third_party/uapi/upstream/xe/xe_drm.h index 504f090c69983..a89e48616b9f8 100644 --- a/third_party/uapi/upstream/xe/xe_drm.h +++ b/third_party/uapi/upstream/xe/xe_drm.h @@ -1121,7 +1121,7 @@ struct drm_xe_exec_queue_create { /** @vm_id: VM to use for this exec queue */ __u32 vm_id; -#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT 1 +#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT (0x1 << 1) /** @flags: MBZ */ __u32 flags; From ffaae8549417ef6c6c2d33df52489479fc227ac7 Mon Sep 17 00:00:00 2001 From: Szymon Morek Date: Fri, 24 Jan 2025 13:54:10 +0100 Subject: [PATCH 4/4] performance: add low latency hint for exec queues When workloads submit compute kernels, it's required to keep low submission latency. Impact of submission overhead is significant in a burst model, when application submits short-running kernels continuously. Signed-off-by: Szymon Morek --- third_party/uapi-eudebug/drm/xe_drm.h | 2 +- third_party/uapi/drm-uapi-helper/xe/xe_drm.h | 2 +- third_party/uapi/upstream/xe/xe_drm.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/third_party/uapi-eudebug/drm/xe_drm.h b/third_party/uapi-eudebug/drm/xe_drm.h index 13d70020b2e4e..c3dc13cc75c77 100644 --- a/third_party/uapi-eudebug/drm/xe_drm.h +++ b/third_party/uapi-eudebug/drm/xe_drm.h @@ -1148,7 +1148,7 @@ struct drm_xe_exec_queue_create { /** @vm_id: VM to use for this exec queue */ __u32 vm_id; -#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT (0x1 << 1) +#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT (1 << 0) /** @flags: MBZ */ __u32 flags; diff --git a/third_party/uapi/drm-uapi-helper/xe/xe_drm.h b/third_party/uapi/drm-uapi-helper/xe/xe_drm.h index 179239bdbcfde..fabdd76db67c2 100644 --- a/third_party/uapi/drm-uapi-helper/xe/xe_drm.h +++ b/third_party/uapi/drm-uapi-helper/xe/xe_drm.h @@ -1121,7 +1121,7 @@ struct drm_xe_exec_queue_create { /** @vm_id: VM to use for this exec queue */ __u32 vm_id; -#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT (0x1 << 1) +#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT (1 << 0) /** @flags: MBZ */ __u32 flags; diff --git a/third_party/uapi/upstream/xe/xe_drm.h b/third_party/uapi/upstream/xe/xe_drm.h index a89e48616b9f8..b056bf5f667b3 100644 --- a/third_party/uapi/upstream/xe/xe_drm.h +++ b/third_party/uapi/upstream/xe/xe_drm.h @@ -1121,7 +1121,7 @@ struct drm_xe_exec_queue_create { /** @vm_id: VM to use for this exec queue */ __u32 vm_id; -#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT (0x1 << 1) +#define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT (1 << 0) /** @flags: MBZ */ __u32 flags;