From 8ae49b17ae1f0a0caeebfca6ccf84cd948587f94 Mon Sep 17 00:00:00 2001 From: Szymon Morek Date: Thu, 18 Sep 2025 09:56:39 +0000 Subject: [PATCH] performance: set 1ms ulls timeout on linux Related-To: NEO-13843 Signed-off-by: Szymon Morek --- .../direct_submission_controller.cpp | 6 ++++- .../direct_submission_controller.h | 1 - .../direct_submission_controller_linux.cpp | 3 --- .../direct_submission_controller_windows.cpp | 9 -------- .../direct_submission_controller_tests.cpp | 22 +++++++++++++++++++ .../windows/wddm_direct_submission_tests.cpp | 13 ----------- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/shared/source/direct_submission/direct_submission_controller.cpp b/shared/source/direct_submission/direct_submission_controller.cpp index 7e4130ac84..57a658e219 100644 --- a/shared/source/direct_submission/direct_submission_controller.cpp +++ b/shared/source/direct_submission/direct_submission_controller.cpp @@ -49,7 +49,11 @@ DirectSubmissionController::~DirectSubmissionController() { void DirectSubmissionController::registerDirectSubmission(CommandStreamReceiver *csr) { std::lock_guard lock(directSubmissionsMutex); directSubmissions.insert(std::make_pair(csr, DirectSubmissionState())); - this->overrideDirectSubmissionTimeouts(csr->getProductHelper()); + uint64_t timeoutUs = this->timeout.count(); + uint64_t maxTimeoutUs = this->maxTimeout.count(); + csr->getProductHelper().overrideDirectSubmissionTimeouts(timeoutUs, maxTimeoutUs); + this->timeout = std::chrono::microseconds(timeoutUs); + this->maxTimeout = std::chrono::microseconds(maxTimeoutUs); } void DirectSubmissionController::unregisterDirectSubmission(CommandStreamReceiver *csr) { diff --git a/shared/source/direct_submission/direct_submission_controller.h b/shared/source/direct_submission/direct_submission_controller.h index 3448b5572c..58e733d1d6 100644 --- a/shared/source/direct_submission/direct_submission_controller.h +++ b/shared/source/direct_submission/direct_submission_controller.h @@ -100,7 +100,6 @@ class DirectSubmissionController { bool isCopyEngineOnDeviceIdle(uint32_t rootDeviceIndex, std::optional &bcsTaskCount); MOCKABLE_VIRTUAL bool sleep(std::unique_lock &lock); MOCKABLE_VIRTUAL SteadyClock::time_point getCpuTimestamp(); - MOCKABLE_VIRTUAL void overrideDirectSubmissionTimeouts(const ProductHelper &productHelper); void recalculateTimeout(); void applyTimeoutForAcLineStatusAndThrottle(bool acLineConnected); diff --git a/shared/source/direct_submission/linux/direct_submission_controller_linux.cpp b/shared/source/direct_submission/linux/direct_submission_controller_linux.cpp index 679b5d14a6..682af21cd6 100644 --- a/shared/source/direct_submission/linux/direct_submission_controller_linux.cpp +++ b/shared/source/direct_submission/linux/direct_submission_controller_linux.cpp @@ -14,7 +14,4 @@ bool DirectSubmissionController::sleep(std::unique_lock &lock) { return NEO::waitOnConditionWithPredicate(condVar, lock, getSleepValue(), [&] { return !pagingFenceRequests.empty(); }); } -void DirectSubmissionController::overrideDirectSubmissionTimeouts(const ProductHelper &productHelper) { -} - } // namespace NEO \ No newline at end of file diff --git a/shared/source/direct_submission/windows/direct_submission_controller_windows.cpp b/shared/source/direct_submission/windows/direct_submission_controller_windows.cpp index b6f675ebd0..121d6bef71 100644 --- a/shared/source/direct_submission/windows/direct_submission_controller_windows.cpp +++ b/shared/source/direct_submission/windows/direct_submission_controller_windows.cpp @@ -7,7 +7,6 @@ #include "shared/source/direct_submission/direct_submission_controller.h" #include "shared/source/helpers/sleep.h" -#include "shared/source/os_interface/product_helper.h" #include "shared/source/os_interface/windows/sys_calls_winmm.h" #include @@ -20,12 +19,4 @@ bool DirectSubmissionController::sleep(std::unique_lock &lock) { return returnValue; } -void DirectSubmissionController::overrideDirectSubmissionTimeouts(const ProductHelper &productHelper) { - uint64_t timeoutUs = this->timeout.count(); - uint64_t maxTimeoutUs = this->maxTimeout.count(); - productHelper.overrideDirectSubmissionTimeouts(timeoutUs, maxTimeoutUs); - this->timeout = std::chrono::microseconds(timeoutUs); - this->maxTimeout = std::chrono::microseconds(maxTimeoutUs); -} - } // namespace NEO \ No newline at end of file diff --git a/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp b/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp index 87d0feb160..772de4c881 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp @@ -574,6 +574,28 @@ TEST_F(DirectSubmissionCheckForCopyEngineIdleTests, givenCheckBcsForDirectSubmis EXPECT_EQ(1u, ccsCsr->stopDirectSubmissionCalledTimes); } +TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegisterCsrsThenTimeoutIsAdjusted) { + MockExecutionEnvironment executionEnvironment; + executionEnvironment.prepareRootDeviceEnvironments(1); + executionEnvironment.initializeMemoryManager(); + DeviceBitfield deviceBitfield(1); + + MockCommandStreamReceiver csr(executionEnvironment, 0, deviceBitfield); + std::unique_ptr osContext(OsContext::create(nullptr, 0, 0, + EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::regular}, + PreemptionMode::ThreadGroup, deviceBitfield))); + csr.setupContext(*osContext.get()); + + DirectSubmissionControllerMock controller; + uint64_t timeoutUs{5'000}; + EXPECT_EQ(static_cast(controller.timeout.count()), timeoutUs); + controller.registerDirectSubmission(&csr); + csr.getProductHelper().overrideDirectSubmissionTimeouts(timeoutUs, timeoutUs); + EXPECT_EQ(static_cast(controller.timeout.count()), timeoutUs); + + controller.unregisterDirectSubmission(&csr); +} + TEST(CommandStreamReceiverGetContextGroupIdTests, givenContextGroupWithPrimaryContextWhenGetContextGroupIdIsCalledThenReturnsPrimaryContextId) { MockExecutionEnvironment executionEnvironment; executionEnvironment.prepareRootDeviceEnvironments(1); diff --git a/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp b/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp index b20fb120be..80ff56567d 100644 --- a/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp +++ b/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp @@ -1066,17 +1066,4 @@ HWTEST2_F(WddmDirectSubmissionTest, givenRelaxedOrderingSchedulerRequiredWhenAsk EXPECT_EQ(expectedBaseEndSize, directSubmission.getSizeEnd(false)); } -HWTEST_F(WddmDirectSubmissionTest, givenDirectSubmissionControllerWhenRegisterCsrsThenTimeoutIsAdjusted) { - auto csr = device->getDefaultEngine().commandStreamReceiver; - - DirectSubmissionControllerMock controller; - uint64_t timeoutUs{5'000}; - EXPECT_EQ(static_cast(controller.timeout.count()), timeoutUs); - controller.registerDirectSubmission(csr); - csr->getProductHelper().overrideDirectSubmissionTimeouts(timeoutUs, timeoutUs); - EXPECT_EQ(static_cast(controller.timeout.count()), timeoutUs); - - controller.unregisterDirectSubmission(csr); -} - } // namespace NEO