feature: Don't terminate ULLS contexts if busy context exists (default)

Controlled with the knob DirectSubmissionControllerContextGroupIdleDetection
(note: the feature is enabled by default)

Related-To: NEO-13325

Signed-off-by: Slawomir Milczarek <slawomir.milczarek@intel.com>
This commit is contained in:
Slawomir Milczarek
2025-09-16 12:16:46 +00:00
committed by Compute-Runtime-Automation
parent b87f25753e
commit b169105da0
2 changed files with 24 additions and 3 deletions

View File

@@ -36,7 +36,7 @@ DirectSubmissionController::DirectSubmissionController() {
if (debugManager.flags.DirectSubmissionControllerIdleDetection.get() != -1) {
isCsrIdleDetectionEnabled = debugManager.flags.DirectSubmissionControllerIdleDetection.get();
}
isCsrsContextGroupIdleDetectionEnabled = false;
isCsrsContextGroupIdleDetectionEnabled = true;
if (debugManager.flags.DirectSubmissionControllerContextGroupIdleDetection.get() != -1) {
isCsrsContextGroupIdleDetectionEnabled = debugManager.flags.DirectSubmissionControllerContextGroupIdleDetection.get();
}

View File

@@ -614,6 +614,27 @@ TEST(CommandStreamReceiverGetContextGroupIdTests, givenContextGroupWithoutPrimar
EXPECT_EQ(55u, csr.getContextGroupId());
}
TEST(DirectSubmissionIdleDetectionWithContextGroupTest, givenDefaultConstructorWhenCreatingControllerThenContextGroupIdleDetectionIsEnabledByDefault) {
DirectSubmissionControllerMock controller;
EXPECT_TRUE(controller.isCsrsContextGroupIdleDetectionEnabled);
}
TEST(DirectSubmissionIdleDetectionWithContextGroupTest, givenDirectSubmissionControllerContextGroupIdleDetectionSetWhenCreatingControllerThenContextGroupIdleDetectionIsSetCorrectly) {
DebugManagerStateRestore restorer;
for (auto contextGroupIdleDetectionState : {-1, 0, 1}) {
debugManager.flags.DirectSubmissionControllerContextGroupIdleDetection.set(contextGroupIdleDetectionState);
DirectSubmissionControllerMock controller;
if (0 == contextGroupIdleDetectionState) {
EXPECT_FALSE(controller.isCsrsContextGroupIdleDetectionEnabled);
} else {
EXPECT_TRUE(controller.isCsrsContextGroupIdleDetectionEnabled);
}
}
}
class MockContextGroupIdleDetectionCsr : public MockCommandStreamReceiver {
public:
using MockCommandStreamReceiver::MockCommandStreamReceiver;
@@ -641,12 +662,12 @@ class MockContextGroupIdleDetectionCsr : public MockCommandStreamReceiver {
class DirectSubmissionIdleDetectionWithContextGroupTests : public ::testing::Test {
protected:
void SetUp() override {
debugManager.flags.DirectSubmissionControllerContextGroupIdleDetection.set(1);
executionEnvironment.prepareRootDeviceEnvironments(1);
executionEnvironment.initializeMemoryManager();
executionEnvironment.rootDeviceEnvironments[0]->osTime.reset(new MockOSTime{});
controller = std::make_unique<DirectSubmissionControllerMock>();
ASSERT_TRUE(controller->isCsrsContextGroupIdleDetectionEnabled);
}
void TearDown() override {
@@ -898,12 +919,12 @@ TEST_F(DirectSubmissionIdleDetectionWithContextGroupTests, whenContextGroupIdleD
class DirectSubmissionContextGroupCompositeKeyTests : public ::testing::Test {
protected:
void SetUp() override {
debugManager.flags.DirectSubmissionControllerContextGroupIdleDetection.set(1);
executionEnvironment.prepareRootDeviceEnvironments(2);
executionEnvironment.initializeMemoryManager();
executionEnvironment.rootDeviceEnvironments[0]->osTime.reset(new MockOSTime{});
executionEnvironment.rootDeviceEnvironments[1]->osTime.reset(new MockOSTime{});
controller = std::make_unique<DirectSubmissionControllerMock>();
ASSERT_TRUE(controller->isCsrsContextGroupIdleDetectionEnabled);
}
void TearDown() override {