From 03357b6089816fff35af59b30e8a816edd5933fb Mon Sep 17 00:00:00 2001 From: Szymon Morek Date: Fri, 5 Sep 2025 13:54:01 +0000 Subject: [PATCH] performance: adjust size threshold for staging on linux Related-To: NEO-15973 Signed-off-by: Szymon Morek --- shared/source/os_interface/linux/os_interface_linux.cpp | 7 ++----- shared/source/os_interface/os_interface.h | 2 +- shared/source/os_interface/windows/os_interface_win.cpp | 2 +- shared/source/utilities/staging_buffer_manager.cpp | 3 +-- .../os_interface/linux/os_interface_linux_tests.cpp | 4 ++-- .../os_interface/windows/os_interface_win_tests.cpp | 3 +-- .../unit_test/utilities/staging_buffer_manager_tests.cpp | 2 +- 7 files changed, 9 insertions(+), 14 deletions(-) diff --git a/shared/source/os_interface/linux/os_interface_linux.cpp b/shared/source/os_interface/linux/os_interface_linux.cpp index fcb1f22e45..124e057a39 100644 --- a/shared/source/os_interface/linux/os_interface_linux.cpp +++ b/shared/source/os_interface/linux/os_interface_linux.cpp @@ -58,11 +58,8 @@ bool initDrmOsInterface(std::unique_ptr &&hwDeviceId, uint32_t rootD return true; } -bool OSInterface::isSizeWithinThresholdForStaging(size_t size, bool isIGPU) const { - if (isIGPU) { - return size < 512 * MemoryConstants::megaByte; - } - return true; +bool OSInterface::isSizeWithinThresholdForStaging(size_t size) const { + return size < 64 * MemoryConstants::megaByte; } uint32_t OSInterface::getAggregatedProcessCount() const { diff --git a/shared/source/os_interface/os_interface.h b/shared/source/os_interface/os_interface.h index 3f45988565..4f3817b249 100644 --- a/shared/source/os_interface/os_interface.h +++ b/shared/source/os_interface/os_interface.h @@ -117,7 +117,7 @@ class OSInterface : public NonCopyableClass { MOCKABLE_VIRTUAL bool isDebugAttachAvailable() const; MOCKABLE_VIRTUAL bool isLockablePointer(bool isLockable) const; - MOCKABLE_VIRTUAL bool isSizeWithinThresholdForStaging(size_t size, bool isIGPU) const; + MOCKABLE_VIRTUAL bool isSizeWithinThresholdForStaging(size_t size) const; MOCKABLE_VIRTUAL uint32_t getAggregatedProcessCount() const; static bool osEnabled64kbPages; diff --git a/shared/source/os_interface/windows/os_interface_win.cpp b/shared/source/os_interface/windows/os_interface_win.cpp index f87c434855..950019160b 100644 --- a/shared/source/os_interface/windows/os_interface_win.cpp +++ b/shared/source/os_interface/windows/os_interface_win.cpp @@ -26,7 +26,7 @@ bool OSInterface::isLockablePointer(bool isLockable) const { return isLockable; } -bool OSInterface::isSizeWithinThresholdForStaging(size_t size, bool isIGPU) const { +bool OSInterface::isSizeWithinThresholdForStaging(size_t size) const { return true; } diff --git a/shared/source/utilities/staging_buffer_manager.cpp b/shared/source/utilities/staging_buffer_manager.cpp index 2bcfa74495..19a6373f41 100644 --- a/shared/source/utilities/staging_buffer_manager.cpp +++ b/shared/source/utilities/staging_buffer_manager.cpp @@ -407,9 +407,8 @@ bool StagingBufferManager::isValidForStaging(const Device &device, const void *p if (debugManager.flags.EnableCopyWithStagingBuffers.get() != -1) { stagingCopyEnabled = debugManager.flags.EnableCopyWithStagingBuffers.get(); } - auto isIntegrated = device.getRootDeviceEnvironment().getHardwareInfo()->capabilityTable.isIntegratedDevice; auto osInterface = device.getRootDeviceEnvironment().osInterface.get(); - bool sizeWithinThreshold = osInterface ? osInterface->isSizeWithinThresholdForStaging(size, isIntegrated) : true; + bool sizeWithinThreshold = osInterface ? osInterface->isSizeWithinThresholdForStaging(size) : true; auto detectedHostPtr = this->registerHostPtr(ptr); return stagingCopyEnabled && !hasDependencies && !detectedHostPtr && sizeWithinThreshold; } diff --git a/shared/test/unit_test/os_interface/linux/os_interface_linux_tests.cpp b/shared/test/unit_test/os_interface/linux/os_interface_linux_tests.cpp index 61b2d833af..c326b50aea 100644 --- a/shared/test/unit_test/os_interface/linux/os_interface_linux_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/os_interface_linux_tests.cpp @@ -101,8 +101,8 @@ TEST(OsInterfaceTest, GivenLinuxOsInterfaceWhenGetThresholdForStagingCalledThenR DrmMock *drm = new DrmMock(*executionEnvironment->rootDeviceEnvironments[0]); osInterface.setDriverModel(std::unique_ptr(drm)); - EXPECT_TRUE(osInterface.isSizeWithinThresholdForStaging(MemoryConstants::gigaByte, false)); - EXPECT_FALSE(osInterface.isSizeWithinThresholdForStaging(MemoryConstants::gigaByte, true)); + EXPECT_TRUE(osInterface.isSizeWithinThresholdForStaging(16 * MemoryConstants::megaByte)); + EXPECT_FALSE(osInterface.isSizeWithinThresholdForStaging(64 * MemoryConstants::megaByte)); } } // namespace NEO diff --git a/shared/test/unit_test/os_interface/windows/os_interface_win_tests.cpp b/shared/test/unit_test/os_interface/windows/os_interface_win_tests.cpp index 23c25fb0fc..66a76dae31 100644 --- a/shared/test/unit_test/os_interface/windows/os_interface_win_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/os_interface_win_tests.cpp @@ -161,6 +161,5 @@ TEST_F(OsInterfaceTest, whenGetThresholdForStagingCalledThenReturnNoThreshold) { EXPECT_EQ(nullptr, rootDeviceEnvironment.osInterface.get()); wddm->init(); EXPECT_NE(nullptr, rootDeviceEnvironment.osInterface.get()); - EXPECT_TRUE(rootDeviceEnvironment.osInterface->isSizeWithinThresholdForStaging(MemoryConstants::gigaByte, false)); - EXPECT_TRUE(rootDeviceEnvironment.osInterface->isSizeWithinThresholdForStaging(MemoryConstants::gigaByte, true)); + EXPECT_TRUE(rootDeviceEnvironment.osInterface->isSizeWithinThresholdForStaging(MemoryConstants::gigaByte)); } \ No newline at end of file diff --git a/shared/test/unit_test/utilities/staging_buffer_manager_tests.cpp b/shared/test/unit_test/utilities/staging_buffer_manager_tests.cpp index 7140c8d9c6..218e4ffa1f 100644 --- a/shared/test/unit_test/utilities/staging_buffer_manager_tests.cpp +++ b/shared/test/unit_test/utilities/staging_buffer_manager_tests.cpp @@ -21,7 +21,7 @@ using namespace NEO; struct MockOSIface : OSInterface { - bool isSizeWithinThresholdForStaging(size_t size, bool isIGPU) const override { + bool isSizeWithinThresholdForStaging(size_t size) const override { return isSizeWithinThresholdValue; } bool isSizeWithinThresholdValue = true;