performance: reduce ULLS controller timeout to 1ms

Currently scope limited to Windows only

Signed-off-by: Szymon Morek <szymon.morek@intel.com>
This commit is contained in:
Szymon Morek
2025-01-28 13:18:46 +00:00
committed by Compute-Runtime-Automation
parent 80dc4fb43a
commit 0db7128503
8 changed files with 67 additions and 49 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2019-2024 Intel Corporation
* Copyright (C) 2019-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -22,6 +22,8 @@
namespace NEO {
DirectSubmissionController::DirectSubmissionController() {
timeout = DirectSubmissionController::getDefaultTimeout();
maxTimeout = DirectSubmissionController::getDefaultTimeout();
if (debugManager.flags.DirectSubmissionControllerTimeout.get() != -1) {
timeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerTimeout.get()};
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2019-2024 Intel Corporation
* Copyright (C) 2019-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -49,7 +49,6 @@ enum class TimeoutElapsedMode {
class DirectSubmissionController {
public:
static constexpr size_t defaultTimeout = 5'000;
static constexpr size_t timeToPollTagUpdateNS = 20'000;
DirectSubmissionController();
virtual ~DirectSubmissionController();
@@ -63,6 +62,7 @@ class DirectSubmissionController {
void stopThread();
static bool isSupported();
static std::chrono::microseconds getDefaultTimeout();
void enqueueWaitForPagingFence(CommandStreamReceiver *csr, uint64_t pagingFenceValue);
void drainPagingFenceQueue();
@@ -97,7 +97,6 @@ class DirectSubmissionController {
bool isDirectSubmissionIdle(CommandStreamReceiver *csr, std::unique_lock<std::recursive_mutex> &csrLock);
MOCKABLE_VIRTUAL bool sleep(std::unique_lock<std::mutex> &lock);
MOCKABLE_VIRTUAL SteadyClock::time_point getCpuTimestamp();
void adjustTimeout(CommandStreamReceiver *csr);
void recalculateTimeout();
void applyTimeoutForAcLineStatusAndThrottle(bool acLineConnected);
@@ -120,8 +119,8 @@ class DirectSubmissionController {
SteadyClock::time_point timeSinceLastCheck{};
SteadyClock::time_point lastTerminateCpuTimestamp{};
HighResolutionClock::time_point lastHangCheckTime{};
std::chrono::microseconds maxTimeout{defaultTimeout};
std::chrono::microseconds timeout{defaultTimeout};
std::chrono::microseconds maxTimeout;
std::chrono::microseconds timeout;
int32_t timeoutDivisor = 1;
int32_t bcsTimeoutDivisor = 1;
std::unordered_map<size_t, TimeoutParams> timeoutParamsMap;

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2024 Intel Corporation
* Copyright (C) 2024-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -13,4 +13,9 @@ namespace NEO {
bool DirectSubmissionController::sleep(std::unique_lock<std::mutex> &lock) {
return NEO::waitOnConditionWithPredicate(condVar, lock, getSleepValue(), [&] { return !pagingFenceRequests.empty(); });
}
std::chrono::microseconds DirectSubmissionController::getDefaultTimeout() {
return std::chrono::microseconds{5'000};
}
} // namespace NEO

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2024 Intel Corporation
* Copyright (C) 2024-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -17,4 +17,9 @@ bool DirectSubmissionController::sleep(std::unique_lock<std::mutex> &lock) {
SysCalls::timeEndPeriod(1u);
return returnValue;
}
std::chrono::microseconds DirectSubmissionController::getDefaultTimeout() {
return std::chrono::microseconds{1'000};
}
} // namespace NEO