From db15e04f5f45d7b1bf238d920771f2be7ddba7a0 Mon Sep 17 00:00:00 2001 From: Slawomir Milczarek Date: Fri, 3 Jul 2020 16:02:45 +0200 Subject: [PATCH] Add DG1 unit tests for memory info Related-To: NEO-4744 Change-Id: Ib10719797f52e262ac7f77744f7407890cd23eca Signed-off-by: Slawomir Milczarek --- .../os_interface/linux/CMakeLists.txt | 10 +- .../linux/drm_memory_info_tests_dg1.cpp | 122 ++++++++++++++++++ 2 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 opencl/test/unit_test/os_interface/linux/drm_memory_info_tests_dg1.cpp diff --git a/opencl/test/unit_test/os_interface/linux/CMakeLists.txt b/opencl/test/unit_test/os_interface/linux/CMakeLists.txt index b5ebb4195f..7bf6b6f8b2 100644 --- a/opencl/test/unit_test/os_interface/linux/CMakeLists.txt +++ b/opencl/test/unit_test/os_interface/linux/CMakeLists.txt @@ -19,7 +19,6 @@ set(IGDRCL_SRCS_tests_os_interface_linux ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_engine_info_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drm_gem_close_worker_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_mapper_tests.cpp - ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_memory_info_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drm_memory_manager_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drm_memory_manager_tests.h ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_memory_manager_allocate_in_device_pool_tests.cpp @@ -39,6 +38,15 @@ set(IGDRCL_SRCS_tests_os_interface_linux ${CMAKE_CURRENT_SOURCE_DIR}/performance_counters_linux_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/self_lib_lin.cpp ) +if(SUPPORT_DG1 AND "${BRANCH_TYPE}" STREQUAL "") +list(APPEND IGDRCL_SRCS_tests_os_interface_linux + ${CMAKE_CURRENT_SOURCE_DIR}/drm_memory_info_tests.cpp +) +else() +list(APPEND IGDRCL_SRCS_tests_os_interface_linux + ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/drm_memory_info_tests.cpp +) +endif() if(UNIX) target_sources(igdrcl_tests PRIVATE ${IGDRCL_SRCS_tests_os_interface_linux}) endif() diff --git a/opencl/test/unit_test/os_interface/linux/drm_memory_info_tests_dg1.cpp b/opencl/test/unit_test/os_interface/linux/drm_memory_info_tests_dg1.cpp new file mode 100644 index 0000000000..2c74992964 --- /dev/null +++ b/opencl/test/unit_test/os_interface/linux/drm_memory_info_tests_dg1.cpp @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2020 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/os_interface/linux/memory_info_impl.h" + +#include "opencl/source/memory_manager/memory_banks.h" +#include "opencl/test/unit_test/os_interface/linux/drm_mock_dg1.h" + +#include "gtest/gtest.h" + +using namespace NEO; + +TEST(MemoryInfo, whenQueryingEngineInfoThenEngineInfoIsNotCreatedAndNoIoctlsAreCalled) { + std::unique_ptr drm = std::make_unique(); + EXPECT_NE(nullptr, drm); + + EXPECT_TRUE(drm->queryEngineInfo()); + + EXPECT_EQ(nullptr, drm->engineInfo.get()); + EXPECT_EQ(0u, drm->ioctlCallsCount); +} + +TEST(MemoryInfo, givenMemoryRegionQuerySupportedWhenQueryingMemoryInfoThenMemoryInfoIsCreatedWithRegions) { + auto drm = std::make_unique(); + ASSERT_NE(nullptr, drm); + + drm->queryMemoryInfo(); + EXPECT_EQ(2u, drm->ioctlCallsCount); + + auto memoryInfo = static_cast(drm->getMemoryInfo()); + + ASSERT_NE(nullptr, memoryInfo); + EXPECT_EQ(2u, memoryInfo->regions.size()); +} + +TEST(MemoryInfo, givenMemoryRegionQueryNotSupportedWhenQueryingMemoryInfoThenMemoryInfoIsNotCreated) { + auto drm = std::make_unique(); + ASSERT_NE(nullptr, drm); + + drm->i915QuerySuccessCount = 0; + drm->queryMemoryInfo(); + + EXPECT_EQ(nullptr, drm->getMemoryInfo()); + EXPECT_EQ(1u, drm->ioctlCallsCount); +} + +TEST(MemoryInfo, givenMemoryRegionQueryWhenQueryingFailsThenMemoryInfoIsNotCreated) { + auto drm = std::make_unique(); + ASSERT_NE(nullptr, drm); + + drm->queryMemoryRegionInfoSuccessCount = 0; + drm->queryMemoryInfo(); + EXPECT_EQ(nullptr, drm->getMemoryInfo()); + EXPECT_EQ(1u, drm->ioctlCallsCount); + + drm = std::make_unique(); + ASSERT_NE(nullptr, drm); + drm->i915QuerySuccessCount = 1; + drm->queryMemoryInfo(); + EXPECT_EQ(nullptr, drm->getMemoryInfo()); + EXPECT_EQ(2u, drm->ioctlCallsCount); + + drm = std::make_unique(); + ASSERT_NE(nullptr, drm); + drm->queryMemoryRegionInfoSuccessCount = 1; + drm->queryMemoryInfo(); + EXPECT_EQ(nullptr, drm->getMemoryInfo()); + EXPECT_EQ(2u, drm->ioctlCallsCount); +} + +TEST(MemoryInfo, givenMemoryInfoWithRegionsWhenGettingMemoryRegionClassAndInstanceThenReturnCorrectValues) { + drm_i915_memory_region_info regionInfo[2] = {}; + regionInfo[0].region = {I915_MEMORY_CLASS_SYSTEM, 0}; + regionInfo[0].probed_size = 8 * GB; + regionInfo[1].region = {I915_MEMORY_CLASS_DEVICE, 0}; + regionInfo[1].probed_size = 16 * GB; + + auto memoryInfo = std::make_unique(regionInfo, 2); + ASSERT_NE(nullptr, memoryInfo); + + auto regionClassAndInstance = memoryInfo->getMemoryRegionClassAndInstance(MemoryBanks::MainBank); + EXPECT_EQ(regionInfo[0].region.memory_class, regionClassAndInstance.memory_class); + EXPECT_EQ(regionInfo[0].region.memory_instance, regionClassAndInstance.memory_instance); + auto regionSize = memoryInfo->getMemoryRegionSize(MemoryBanks::MainBank); + EXPECT_EQ(8 * GB, regionSize); + + regionClassAndInstance = memoryInfo->getMemoryRegionClassAndInstance(MemoryBanks::Bank0); + EXPECT_EQ(regionInfo[1].region.memory_class, regionClassAndInstance.memory_class); + EXPECT_EQ(regionInfo[1].region.memory_instance, regionClassAndInstance.memory_instance); + regionSize = memoryInfo->getMemoryRegionSize(MemoryBanks::Bank0); + EXPECT_EQ(16 * GB, regionSize); +} + +TEST(MemoryInfo, givenMemoryInfoWithoutRegionsWhenGettingMemoryRegionClassAndInstanceThenReturnInvalidMemoryRegion) { + drm_i915_memory_region_info regionInfo = {}; + + auto memoryInfo = std::make_unique(®ionInfo, 0); + ASSERT_NE(nullptr, memoryInfo); + + auto regionClassAndInstance = memoryInfo->getMemoryRegionClassAndInstance(MemoryBanks::MainBank); + EXPECT_EQ(MemoryInfoImpl::invalidMemoryRegion(), regionClassAndInstance.memory_class); + EXPECT_EQ(MemoryInfoImpl::invalidMemoryRegion(), regionClassAndInstance.memory_instance); + auto regionSize = memoryInfo->getMemoryRegionSize(MemoryBanks::MainBank); + EXPECT_EQ(0 * GB, regionSize); +} + +TEST(MemoryInfo, givenMemoryRegionIdWhenGetMemoryTypeFromRegionAndGetInstanceFromRegionAreCalledThenMemoryTypeAndInstanceAreReturned) { + std::unique_ptr drm = std::make_unique(); + EXPECT_NE(nullptr, drm); + + auto regionSmem = drm->createMemoryRegionId(0, 0); + EXPECT_EQ(0u, drm->getMemoryTypeFromRegion(regionSmem)); + EXPECT_EQ(0u, drm->getMemoryInstanceFromRegion(regionSmem)); + + auto regionLmem = drm->createMemoryRegionId(1, 0); + EXPECT_EQ(1u, drm->getMemoryTypeFromRegion(regionLmem)); + EXPECT_EQ(0u, drm->getMemoryInstanceFromRegion(regionLmem)); +}