performance: set 1ms ULLS timeout on Windows since Xe2

Related-To: NEO-13843

Signed-off-by: Szymon Morek <szymon.morek@intel.com>
This commit is contained in:
Szymon Morek
2025-06-16 16:40:35 +00:00
committed by Compute-Runtime-Automation
parent 763fe6ff86
commit 558752288f
14 changed files with 72 additions and 52 deletions

View File

@@ -14,7 +14,6 @@
#include "shared/source/os_interface/os_context.h"
#include "shared/source/os_interface/os_thread.h"
#include "shared/source/os_interface/os_time.h"
#include "shared/source/os_interface/product_helper.h"
#include <chrono>
#include <thread>
@@ -45,7 +44,7 @@ DirectSubmissionController::~DirectSubmissionController() {
void DirectSubmissionController::registerDirectSubmission(CommandStreamReceiver *csr) {
std::lock_guard<std::mutex> lock(directSubmissionsMutex);
directSubmissions.insert(std::make_pair(csr, DirectSubmissionState()));
csr->getProductHelper().overrideDirectSubmissionTimeouts(this->timeout, this->maxTimeout);
this->overrideDirectSubmissionTimeouts(csr->getProductHelper());
}
void DirectSubmissionController::unregisterDirectSubmission(CommandStreamReceiver *csr) {

View File

@@ -89,6 +89,7 @@ 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();
MOCKABLE_VIRTUAL void overrideDirectSubmissionTimeouts(const ProductHelper &productHelper);
void recalculateTimeout();
void applyTimeoutForAcLineStatusAndThrottle(bool acLineConnected);
@@ -116,7 +117,6 @@ class DirectSubmissionController {
int32_t timeoutDivisor = 1;
int32_t bcsTimeoutDivisor = 1;
QueueThrottle lowestThrottleSubmitted = QueueThrottle::HIGH;
bool adjustTimeoutOnThrottleAndAcLineStatus = false;
bool isCsrIdleDetectionEnabled = false;
std::condition_variable condVar;

View File

@@ -13,4 +13,8 @@ namespace NEO {
bool DirectSubmissionController::sleep(std::unique_lock<std::mutex> &lock) {
return NEO::waitOnConditionWithPredicate(condVar, lock, getSleepValue(), [&] { return !pagingFenceRequests.empty(); });
}
void DirectSubmissionController::overrideDirectSubmissionTimeouts(const ProductHelper &productHelper) {
}
} // namespace NEO

View File

@@ -7,6 +7,7 @@
#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 <chrono>
@@ -17,4 +18,9 @@ bool DirectSubmissionController::sleep(std::unique_lock<std::mutex> &lock) {
SysCalls::timeEndPeriod(1u);
return returnValue;
}
void DirectSubmissionController::overrideDirectSubmissionTimeouts(const ProductHelper &productHelper) {
productHelper.overrideDirectSubmissionTimeouts(this->timeout, this->maxTimeout);
}
} // namespace NEO

View File

@@ -971,10 +971,6 @@ uint32_t ProductHelperHw<gfxProduct>::adjustMaxThreadsPerThreadGroup(uint32_t ma
return maxThreadsPerThreadGroup;
}
template <PRODUCT_FAMILY gfxProduct>
void ProductHelperHw<gfxProduct>::overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const {
}
template <PRODUCT_FAMILY gfxProduct>
bool ProductHelperHw<gfxProduct>::isMisalignedUserPtr2WayCoherent() const {
return false;

View File

@@ -66,4 +66,8 @@ bool ProductHelperHw<gfxProduct>::isPidFdOrSocketForIpcSupported() const {
return false;
}
template <PRODUCT_FAMILY gfxProduct>
void ProductHelperHw<gfxProduct>::overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const {
}
} // namespace NEO

View File

@@ -69,4 +69,16 @@ bool ProductHelperHw<gfxProduct>::isPidFdOrSocketForIpcSupported() const {
return false;
}
template <PRODUCT_FAMILY gfxProduct>
void ProductHelperHw<gfxProduct>::overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const {
timeout = std::chrono::microseconds{1'000};
maxTimeout = std::chrono::microseconds{1'000};
if (debugManager.flags.DirectSubmissionControllerTimeout.get() != -1) {
timeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerTimeout.get()};
}
if (debugManager.flags.DirectSubmissionControllerMaxTimeout.get() != -1) {
maxTimeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerMaxTimeout.get()};
}
}
} // namespace NEO

View File

@@ -21,17 +21,5 @@ bool ProductHelperHw<gfxProduct>::restartDirectSubmissionForHostptrFree() const
return true;
}
template <>
void ProductHelperHw<gfxProduct>::overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const {
timeout = std::chrono::microseconds{1'000};
maxTimeout = std::chrono::microseconds{1'000};
if (debugManager.flags.DirectSubmissionControllerTimeout.get() != -1) {
timeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerTimeout.get()};
}
if (debugManager.flags.DirectSubmissionControllerMaxTimeout.get() != -1) {
maxTimeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerMaxTimeout.get()};
}
}
template class ProductHelperHw<gfxProduct>;
} // namespace NEO

View File

@@ -16,18 +16,6 @@ constexpr static auto gfxProduct = IGFX_PTL;
namespace NEO {
template <>
void ProductHelperHw<gfxProduct>::overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const {
timeout = std::chrono::microseconds{1'000};
maxTimeout = std::chrono::microseconds{1'000};
if (debugManager.flags.DirectSubmissionControllerTimeout.get() != -1) {
timeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerTimeout.get()};
}
if (debugManager.flags.DirectSubmissionControllerMaxTimeout.get() != -1) {
maxTimeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerMaxTimeout.get()};
}
}
template class ProductHelperHw<gfxProduct>;
} // namespace NEO