From 850e6c02ebc671f02ab7ee4a79c2286ff4963c7e Mon Sep 17 00:00:00 2001 From: Mateusz Hoppe Date: Mon, 20 Jan 2025 14:17:41 +0000 Subject: [PATCH] test: allocate sip allocation for all contexts in initSipKernel - some tests initialize sip kernel but do not free it - this is causing memory leaks - as a solution mock sip listener is added that will release allocated sip kernel Related-To: NEO-13789 Signed-off-by: Mateusz Hoppe --- level_zero/core/test/aub_tests/CMakeLists.txt | 3 +- .../core/test/unit_tests/CMakeLists.txt | 3 +- .../sysman/test/unit_tests/CMakeLists.txt | 3 +- .../tools/test/unit_tests/CMakeLists.txt | 3 +- opencl/test/unit_test/libult/CMakeLists.txt | 3 +- shared/test/common/common_main.cpp | 2 ++ .../test/common/helpers/mock_sip_listener.cpp | 25 +++++++++++++++ .../test/common/helpers/mock_sip_listener.h | 31 +++++++++++++++++++ shared/test/common/helpers/sip_init.cpp | 7 +++++ shared/test/common/mocks/mock_sip.cpp | 17 +++++++++- shared/test/common/mocks/mock_sip.h | 4 ++- shared/test/unit_test/CMakeLists.txt | 3 +- 12 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 shared/test/common/helpers/mock_sip_listener.cpp create mode 100644 shared/test/common/helpers/mock_sip_listener.h diff --git a/level_zero/core/test/aub_tests/CMakeLists.txt b/level_zero/core/test/aub_tests/CMakeLists.txt index ee74fdc9be..eec7b23320 100644 --- a/level_zero/core/test/aub_tests/CMakeLists.txt +++ b/level_zero/core/test/aub_tests/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2021-2024 Intel Corporation +# Copyright (C) 2021-2025 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -14,6 +14,7 @@ if(NOT NEO_SKIP_AUB_TESTS AND DEFINED AUB_STREAM_PROJECT_NAME) ${CMAKE_CURRENT_SOURCE_DIR}/aub_hello_world_test.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/common_main.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/helpers/virtual_file_system_listener.cpp + ${NEO_SHARED_TEST_DIRECTORY}/common/helpers/mock_sip_listener.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/tests_configuration.h ) diff --git a/level_zero/core/test/unit_tests/CMakeLists.txt b/level_zero/core/test/unit_tests/CMakeLists.txt index d0eed1bcf9..250df5d336 100644 --- a/level_zero/core/test/unit_tests/CMakeLists.txt +++ b/level_zero/core/test/unit_tests/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2020-2024 Intel Corporation +# Copyright (C) 2020-2025 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -28,6 +28,7 @@ target_sources(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/mock.h ${CMAKE_CURRENT_SOURCE_DIR}/white_box.h ${NEO_SHARED_TEST_DIRECTORY}/common/common_main.cpp + ${NEO_SHARED_TEST_DIRECTORY}/common/helpers/mock_sip_listener.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/helpers/virtual_file_system_listener.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/tests_configuration.h ${NEO_SOURCE_DIR}/level_zero/core/test/common/test_modules/gen_kernel.cmake diff --git a/level_zero/sysman/test/unit_tests/CMakeLists.txt b/level_zero/sysman/test/unit_tests/CMakeLists.txt index 97e581da9a..b58d257a3d 100644 --- a/level_zero/sysman/test/unit_tests/CMakeLists.txt +++ b/level_zero/sysman/test/unit_tests/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2023-2024 Intel Corporation +# Copyright (C) 2023-2025 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -32,6 +32,7 @@ target_sources(${TARGET_NAME} PRIVATE ${NEO_SOURCE_DIR}/level_zero/core/source/dll/create_builtin_functions_lib.cpp ${NEO_SOURCE_DIR}/level_zero/tools/test/unit_tests/sources/debug/debug_session_helper.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/common_main.cpp + ${NEO_SHARED_TEST_DIRECTORY}/common/helpers/mock_sip_listener.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/helpers/virtual_file_system_listener.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/tests_configuration.h ) diff --git a/level_zero/tools/test/unit_tests/CMakeLists.txt b/level_zero/tools/test/unit_tests/CMakeLists.txt index ac3192be96..b79cdb9ea5 100644 --- a/level_zero/tools/test/unit_tests/CMakeLists.txt +++ b/level_zero/tools/test/unit_tests/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2020-2024 Intel Corporation +# Copyright (C) 2020-2025 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -32,6 +32,7 @@ target_sources(${TARGET_NAME} PRIVATE ${NEO_SOURCE_DIR}/level_zero/core/test/unit_tests/sources/builtin/create_ult_builtin_functions_lib.cpp ${NEO_SOURCE_DIR}/level_zero/tools/test/unit_tests/sources/debug/debug_session_helper.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/common_main.cpp + ${NEO_SHARED_TEST_DIRECTORY}/common/helpers/mock_sip_listener.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/helpers/virtual_file_system_listener.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/tests_configuration.h ) diff --git a/opencl/test/unit_test/libult/CMakeLists.txt b/opencl/test/unit_test/libult/CMakeLists.txt index 442de4c7b1..a5f1836d89 100644 --- a/opencl/test/unit_test/libult/CMakeLists.txt +++ b/opencl/test/unit_test/libult/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2018-2024 Intel Corporation +# Copyright (C) 2018-2025 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -37,6 +37,7 @@ set(IGDRCL_SRCS_LIB_ULT_ENV ${CMAKE_CURRENT_SOURCE_DIR}/command_queue_ult.cpp ${NEO_SOURCE_DIR}/shared/test/common/helpers/custom_event_listener.h ${NEO_SOURCE_DIR}/shared/test/common/common_main.cpp + ${NEO_SHARED_TEST_DIRECTORY}/common/helpers/mock_sip_listener.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/helpers/virtual_file_system_listener.cpp ${NEO_SOURCE_DIR}/opencl/test/unit_test/command_queue/command_queue_fixture.cpp ${NEO_SOURCE_DIR}/opencl/test/unit_test/command_queue/command_queue_fixture.h diff --git a/shared/test/common/common_main.cpp b/shared/test/common/common_main.cpp index a1908632f7..c28390caa4 100644 --- a/shared/test/common/common_main.cpp +++ b/shared/test/common/common_main.cpp @@ -16,6 +16,7 @@ #include "shared/test/common/helpers/default_hw_info.inl" #include "shared/test/common/helpers/kernel_binary_helper.h" #include "shared/test/common/helpers/memory_leak_listener.h" +#include "shared/test/common/helpers/mock_sip_listener.h" #include "shared/test/common/helpers/test_files.h" #include "shared/test/common/helpers/ult_hw_config.inl" #include "shared/test/common/helpers/virtual_file_system_listener.h" @@ -387,6 +388,7 @@ int main(int argc, char **argv) { listeners.Append(customEventListener); } + listeners.Append(new MockSipListener); listeners.Append(new MemoryLeakListener); listeners.Append(new NEO::VirtualFileSystemListener); diff --git a/shared/test/common/helpers/mock_sip_listener.cpp b/shared/test/common/helpers/mock_sip_listener.cpp new file mode 100644 index 0000000000..9ba21058bb --- /dev/null +++ b/shared/test/common/helpers/mock_sip_listener.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2025 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/test/common/helpers/mock_sip_listener.h" + +#include "shared/source/memory_manager/memory_allocation.h" + +#include "gtest/gtest.h" + +namespace NEO { + +void MockSipListener::OnTestEnd(const testing::TestInfo &) { + if (MockSipData::mockSipKernel) { + if (MockSipData::mockSipKernel->tempSipMemoryAllocation) { + printf("*** WARNING: test did not free sip kernels ***\n"); + MockSipData::mockSipKernel->tempSipMemoryAllocation.reset(nullptr); + } + } +} + +} // namespace NEO diff --git a/shared/test/common/helpers/mock_sip_listener.h b/shared/test/common/helpers/mock_sip_listener.h new file mode 100644 index 0000000000..4595e7ba2c --- /dev/null +++ b/shared/test/common/helpers/mock_sip_listener.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2025 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once +#include "shared/test/common/mocks/mock_sip.h" + +#include "gtest/gtest.h" + +namespace NEO { + +class MockSipListener : public ::testing::TestEventListener { + private: + void OnTestStart(const testing::TestInfo &) override{}; + void OnTestEnd(const testing::TestInfo &) override; + + void OnTestProgramStart(const testing::UnitTest &) override{}; + void OnTestIterationStart(const testing::UnitTest &, int) override{}; + void OnEnvironmentsSetUpStart(const testing::UnitTest &) override{}; + void OnEnvironmentsSetUpEnd(const testing::UnitTest &) override{}; + void OnTestPartResult(const testing::TestPartResult &) override{}; + void OnEnvironmentsTearDownStart(const testing::UnitTest &) override{}; + void OnEnvironmentsTearDownEnd(const testing::UnitTest &) override{}; + void OnTestIterationEnd(const testing::UnitTest &, int) override{}; + void OnTestProgramEnd(const testing::UnitTest &) override{}; +}; + +} // namespace NEO diff --git a/shared/test/common/helpers/sip_init.cpp b/shared/test/common/helpers/sip_init.cpp index 25ec3ee831..b7023d69cf 100644 --- a/shared/test/common/helpers/sip_init.cpp +++ b/shared/test/common/helpers/sip_init.cpp @@ -237,6 +237,8 @@ bool SipKernel::initSipKernel(SipKernelType type, Device &device) { MockSipData::called = true; MockSipData::mockSipKernel->mockSipMemoryAllocation->clearUsageInfo(); + MockSipData::mockSipKernel->createTempSipAllocation(MemoryManager::maxOsContextCount); + return MockSipData::returned; } else { return SipKernel::initSipKernelImpl(type, device, nullptr); @@ -244,6 +246,11 @@ bool SipKernel::initSipKernel(SipKernelType type, Device &device) { } void SipKernel::freeSipKernels(RootDeviceEnvironment *rootDeviceEnvironment, MemoryManager *memoryManager) { + + if (MockSipData::mockSipKernel) { + MockSipData::mockSipKernel->tempSipMemoryAllocation.reset(nullptr); + } + for (auto &sipKernel : rootDeviceEnvironment->sipKernels) { if (sipKernel.get()) { memoryManager->freeGraphicsMemory(sipKernel->getSipAllocation()); diff --git a/shared/test/common/mocks/mock_sip.cpp b/shared/test/common/mocks/mock_sip.cpp index 0acbd500ee..b3700a13b8 100644 --- a/shared/test/common/mocks/mock_sip.cpp +++ b/shared/test/common/mocks/mock_sip.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2024 Intel Corporation + * Copyright (C) 2018-2025 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -31,6 +31,9 @@ std::vector MockSipKernel::getDummyGenBinary() { } GraphicsAllocation *MockSipKernel::getSipAllocation() const { + if (tempSipMemoryAllocation) { + return tempSipMemoryAllocation.get(); + } return mockSipMemoryAllocation.get(); } @@ -50,5 +53,17 @@ void MockSipKernel::createMockSipAllocation() { MemoryPool::system4KBPages, 256u); } +void MockSipKernel::createTempSipAllocation(size_t osContextCount) { + this->tempSipMemoryAllocation = + std::make_unique(0u, + 1u /*num gmms*/, + AllocationType::kernelIsaInternal, + nullptr, + MemoryConstants::pageSize * 10u, + 0u, + MemoryConstants::pageSize, + MemoryPool::system4KBPages, + osContextCount); +} } // namespace NEO diff --git a/shared/test/common/mocks/mock_sip.h b/shared/test/common/mocks/mock_sip.h index a7a7908718..b3828086de 100644 --- a/shared/test/common/mocks/mock_sip.h +++ b/shared/test/common/mocks/mock_sip.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2024 Intel Corporation + * Copyright (C) 2018-2025 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -32,8 +32,10 @@ class MockSipKernel : public SipKernel { const std::vector &getStateSaveAreaHeader() const override; void createMockSipAllocation(); + void createTempSipAllocation(size_t osContextCount); std::unique_ptr mockSipMemoryAllocation; + std::unique_ptr tempSipMemoryAllocation; std::vector mockStateSaveAreaHeader = {'s', 's', 'a', 'h'}; MockExecutionEnvironment executionEnvironment; }; diff --git a/shared/test/unit_test/CMakeLists.txt b/shared/test/unit_test/CMakeLists.txt index db2d898be3..afabf9e5fa 100644 --- a/shared/test/unit_test/CMakeLists.txt +++ b/shared/test/unit_test/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2019-2024 Intel Corporation +# Copyright (C) 2019-2025 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -21,6 +21,7 @@ add_executable(neo_shared_tests ${CMAKE_CURRENT_SOURCE_DIR}/ult_specific_config.cpp ${NEO_SHARED_DIRECTORY}/helpers/allow_deferred_deleter.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/common_main.cpp + ${NEO_SHARED_TEST_DIRECTORY}/common/helpers/mock_sip_listener.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/helpers/virtual_file_system_listener.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/tests_configuration.h $