Skip to content

Commit 28c008e

Browse files
performance: set 1ms timeout for ulls controller since xe2
Related-To: NEO-13843 Signed-off-by: Szymon Morek <[email protected]>
1 parent b0e3d86 commit 28c008e

File tree

10 files changed

+51
-269
lines changed

10 files changed

+51
-269
lines changed

shared/source/debug_settings/debug_variables_base.inl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,6 @@ DECLARE_DEBUG_VARIABLE(int32_t, EnableDirectSubmissionController, -1, "Enable di
446446
DECLARE_DEBUG_VARIABLE(int32_t, DirectSubmissionControllerTimeout, -1, "Set direct submission controller timeout, -1: default 5000 us, >=0: timeout in us")
447447
DECLARE_DEBUG_VARIABLE(int32_t, DirectSubmissionControllerBcsTimeoutDivisor, -1, "If >=1, divide controller timeout to stop BCS only engines faster than others")
448448
DECLARE_DEBUG_VARIABLE(int32_t, DirectSubmissionControllerMaxTimeout, -1, "Set direct submission controller max timeout - timeout will increase up to given value, -1: default 5000 us, >=0: max timeout in us")
449-
DECLARE_DEBUG_VARIABLE(int32_t, DirectSubmissionControllerDivisor, -1, "Set direct submission controller timeout divider, -1: default 1, >0: divider value")
450449
DECLARE_DEBUG_VARIABLE(int32_t, DirectSubmissionControllerAdjustOnThrottleAndAcLineStatus, -1, "Adjust controller timeout settings based on queue throttle and ac line status, -1: default, 0: disabled, 1: enabled")
451450
DECLARE_DEBUG_VARIABLE(int32_t, DirectSubmissionForceLocalMemoryStorageMode, -1, "Force local memory storage for command/ring/semaphore buffer, -1: default - for all engines, 0: disabled, 1: for multiOsContextCapable engine, 2: for all engines")
452451
DECLARE_DEBUG_VARIABLE(int32_t, EnableRingSwitchTagUpdateWa, -1, "-1: default, 0 - disable, 1 - enable. If enabled, completionFences wont be updated if ring is not running.")

shared/source/direct_submission/direct_submission_controller.cpp

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "shared/source/command_stream/command_stream_receiver.h"
1111
#include "shared/source/debug_settings/debug_settings_manager.h"
1212
#include "shared/source/execution_environment/root_device_environment.h"
13+
#include "shared/source/helpers/gfx_core_helper.h"
1314
#include "shared/source/helpers/sleep.h"
1415
#include "shared/source/os_interface/os_context.h"
1516
#include "shared/source/os_interface/os_thread.h"
@@ -25,9 +26,6 @@ DirectSubmissionController::DirectSubmissionController() {
2526
if (debugManager.flags.DirectSubmissionControllerTimeout.get() != -1) {
2627
timeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerTimeout.get()};
2728
}
28-
if (debugManager.flags.DirectSubmissionControllerDivisor.get() != -1) {
29-
timeoutDivisor = debugManager.flags.DirectSubmissionControllerDivisor.get();
30-
}
3129
if (debugManager.flags.DirectSubmissionControllerBcsTimeoutDivisor.get() != -1) {
3230
bcsTimeoutDivisor = debugManager.flags.DirectSubmissionControllerBcsTimeoutDivisor.get();
3331
}
@@ -48,7 +46,7 @@ DirectSubmissionController::~DirectSubmissionController() {
4846
void DirectSubmissionController::registerDirectSubmission(CommandStreamReceiver *csr) {
4947
std::lock_guard<std::mutex> lock(directSubmissionsMutex);
5048
directSubmissions.insert(std::make_pair(csr, DirectSubmissionState()));
51-
this->adjustTimeout(csr);
49+
csr->getGfxCoreHelper().overrideDirectSubmissionTimeouts(this->timeout, this->maxTimeout);
5250
}
5351

5452
void DirectSubmissionController::setTimeoutParamsForPlatform(const ProductHelper &helper) {
@@ -217,21 +215,6 @@ SteadyClock::time_point DirectSubmissionController::getCpuTimestamp() {
217215
return SteadyClock::now();
218216
}
219217

220-
void DirectSubmissionController::adjustTimeout(CommandStreamReceiver *csr) {
221-
if (EngineHelpers::isCcs(csr->getOsContext().getEngineType())) {
222-
for (size_t subDeviceIndex = 0u; subDeviceIndex < csr->getOsContext().getDeviceBitfield().size(); ++subDeviceIndex) {
223-
if (csr->getOsContext().getDeviceBitfield().test(subDeviceIndex)) {
224-
++this->ccsCount[subDeviceIndex];
225-
}
226-
}
227-
auto curentMaxCcsCount = std::max_element(this->ccsCount.begin(), this->ccsCount.end());
228-
if (*curentMaxCcsCount > this->maxCcsCount) {
229-
this->maxCcsCount = *curentMaxCcsCount;
230-
this->timeout /= this->timeoutDivisor;
231-
}
232-
}
233-
}
234-
235218
void DirectSubmissionController::recalculateTimeout() {
236219
const auto now = this->getCpuTimestamp();
237220
const auto timeSinceLastTerminate = std::chrono::duration_cast<std::chrono::microseconds>(now - this->lastTerminateCpuTimestamp);

shared/source/direct_submission/direct_submission_controller.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ class DirectSubmissionController {
9898
MOCKABLE_VIRTUAL bool sleep(std::unique_lock<std::mutex> &lock);
9999
MOCKABLE_VIRTUAL SteadyClock::time_point getCpuTimestamp();
100100

101-
void adjustTimeout(CommandStreamReceiver *csr);
102101
void recalculateTimeout();
103102
void applyTimeoutForAcLineStatusAndThrottle(bool acLineConnected);
104103
void updateLastSubmittedThrottle(QueueThrottle throttle);

shared/source/helpers/gfx_core_helper.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "aubstream/aubstream.h"
1717
#include "igfxfmid.h"
1818

19+
#include <chrono>
1920
#include <cstdint>
2021
#include <memory>
2122
#include <string>
@@ -198,6 +199,8 @@ class GfxCoreHelper {
198199
virtual uint32_t getDeviceTimestampWidth() const = 0;
199200
virtual void alignThreadGroupCountToDssSize(uint32_t &threadCount, uint32_t dssCount, uint32_t threadsPerDss, uint32_t threadGroupSize) const = 0;
200201

202+
virtual void overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const = 0;
203+
201204
virtual ~GfxCoreHelper() = default;
202205

203206
protected:
@@ -436,6 +439,8 @@ class GfxCoreHelperHw : public GfxCoreHelper {
436439

437440
uint32_t getDeviceTimestampWidth() const override;
438441

442+
void overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const override;
443+
439444
~GfxCoreHelperHw() override = default;
440445

441446
protected:

shared/source/helpers/gfx_core_helper_base.inl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -833,4 +833,8 @@ uint32_t GfxCoreHelperHw<Family>::getInternalCopyEngineIndex(const HardwareInfo
833833
return std::min(defaultInternalCopyEngineIndex, highestAvailableIndex);
834834
}
835835

836+
template <typename Family>
837+
void GfxCoreHelperHw<Family>::overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const {
838+
}
839+
836840
} // namespace NEO

shared/source/helpers/gfx_core_helper_xe2_and_later.inl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2024 Intel Corporation
2+
* Copyright (C) 2024-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -82,4 +82,16 @@ void MemorySynchronizationCommands<Family>::encodeAdditionalTimestampOffsets(Lin
8282
EncodeStoreMMIO<Family>::encode(commandStream, RegisterOffsets::globalTimestampUn, globalAddress + sizeof(uint32_t), false, nullptr, isBcs);
8383
}
8484

85+
template <>
86+
void GfxCoreHelperHw<Family>::overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const {
87+
timeout = std::chrono::microseconds{1'000};
88+
maxTimeout = std::chrono::microseconds{1'000};
89+
if (debugManager.flags.DirectSubmissionControllerTimeout.get() != -1) {
90+
timeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerTimeout.get()};
91+
}
92+
if (debugManager.flags.DirectSubmissionControllerMaxTimeout.get() != -1) {
93+
maxTimeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerMaxTimeout.get()};
94+
}
95+
}
96+
8597
} // namespace NEO

shared/source/xe2_hpg_core/lnl/os_agnostic_product_helper_lnl.inl

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,6 @@ bool ProductHelperHw<gfxProduct>::isCachingOnCpuAvailable() const {
4545
return false;
4646
}
4747

48-
template <>
49-
bool ProductHelperHw<gfxProduct>::isAdjustDirectSubmissionTimeoutOnThrottleAndAcLineStatusEnabled() const {
50-
return true;
51-
}
52-
5348
template <>
5449
TimeoutParams ProductHelperHw<gfxProduct>::getDirectSubmissionControllerTimeoutParams(bool acLineConnected, QueueThrottle queueThrottle) const {
5550
TimeoutParams params{};

shared/test/common/test_files/igdrcl.config

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@ DirectSubmissionMaxRingBuffers = -1
125125
USMEvictAfterMigration = 0
126126
EnableDirectSubmissionController = -1
127127
DirectSubmissionControllerTimeout = -1
128-
DirectSubmissionControllerDivisor = -1
129128
DirectSubmissionMonitorFenceInputPolicy = -1
130129
UseVmBind = -1
131130
EnableNullHardware = 0

0 commit comments

Comments
 (0)