Skip to content

Commit b81f25d

Browse files
kswiecickiigchor
authored andcommitted
Add numa memspace tests
1 parent d693fee commit b81f25d

File tree

2 files changed

+139
-0
lines changed

2 files changed

+139
-0
lines changed

test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,5 @@ add_umf_test(NAME c_api_disjoint_pool SRCS c_api/disjoint_pool.c)
6262

6363
if(LINUX) # OS-specific functions are implemented only for Linux now
6464
add_umf_test(NAME provider_os_memory SRCS provider_os_memory.cpp LIBS numa)
65+
add_umf_test(NAME memspace_numa SRCS memspace_numa.cpp LIBS numa)
6566
endif()

test/memspace_numa.cpp

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
// Copyright (C) 2023 Intel Corporation
2+
// Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
3+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4+
5+
#include "base.hpp"
6+
7+
#include <umf/memspace.h>
8+
#include <umf/memspaces/memspace_numa.h>
9+
#include <umf/providers/provider_os_memory.h>
10+
11+
#include <numa.h>
12+
13+
#define SIZE_4K (4096)
14+
15+
struct numa_nodes_test : ::umf_test::test {
16+
void SetUp() override {
17+
::umf_test::test::SetUp();
18+
19+
if (numa_available() == -1) {
20+
GTEST_SKIP() << "Failed to initialize libnuma";
21+
}
22+
23+
int numNodes = numa_max_node();
24+
if (numNodes < 0) {
25+
GTEST_SKIP() << "No available numa nodes";
26+
}
27+
28+
for (int i = 0; i <= numNodes; i++) {
29+
nodeIds.emplace_back(i);
30+
}
31+
}
32+
33+
std::vector<size_t> nodeIds;
34+
};
35+
36+
struct numa_memspace_test : ::numa_nodes_test {
37+
void SetUp() override {
38+
::numa_nodes_test::SetUp();
39+
40+
enum umf_result_t ret = umfMemspaceCreateFromNumaArray(
41+
nodeIds.data(), nodeIds.size(), &memspace);
42+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
43+
ASSERT_NE(memspace, nullptr);
44+
}
45+
46+
void TearDown() override {
47+
::numa_nodes_test::TearDown();
48+
49+
umfMemspaceDestroy(memspace);
50+
}
51+
52+
umf_memspace_handle_t memspace = nullptr;
53+
};
54+
55+
struct numa_memspace_provider_test : ::numa_memspace_test {
56+
void SetUp() override {
57+
::numa_memspace_test::SetUp();
58+
59+
umf_result_t ret =
60+
umfMemoryProviderCreateFromMemspace(memspace, nullptr, &provider);
61+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
62+
ASSERT_NE(provider, nullptr);
63+
}
64+
65+
void TearDown() override {
66+
::numa_memspace_test::TearDown();
67+
68+
umfMemoryProviderDestroy(provider);
69+
}
70+
71+
umf_memory_provider_handle_t provider = nullptr;
72+
};
73+
74+
TEST_F(numa_nodes_test, create_destroy) {
75+
umf_memspace_handle_t hMemspace = nullptr;
76+
enum umf_result_t ret = umfMemspaceCreateFromNumaArray(
77+
nodeIds.data(), nodeIds.size(), &hMemspace);
78+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
79+
ASSERT_NE(hMemspace, nullptr);
80+
81+
umfMemspaceDestroy(hMemspace);
82+
}
83+
84+
TEST_F(numa_nodes_test, create_null_array) {
85+
umf_memspace_handle_t hMemspace = nullptr;
86+
enum umf_result_t ret = umfMemspaceCreateFromNumaArray(NULL, 0, &hMemspace);
87+
ASSERT_EQ(ret, UMF_RESULT_ERROR_INVALID_ARGUMENT);
88+
ASSERT_EQ(hMemspace, nullptr);
89+
}
90+
91+
TEST_F(numa_nodes_test, create_zero_size) {
92+
umf_memspace_handle_t hMemspace = nullptr;
93+
enum umf_result_t ret =
94+
umfMemspaceCreateFromNumaArray(nodeIds.data(), 0, &hMemspace);
95+
ASSERT_EQ(ret, UMF_RESULT_ERROR_INVALID_ARGUMENT);
96+
ASSERT_EQ(hMemspace, nullptr);
97+
}
98+
99+
TEST_F(numa_nodes_test, create_null_handle) {
100+
enum umf_result_t ret =
101+
umfMemspaceCreateFromNumaArray(nodeIds.data(), nodeIds.size(), nullptr);
102+
ASSERT_EQ(ret, UMF_RESULT_ERROR_INVALID_ARGUMENT);
103+
}
104+
105+
TEST_F(numa_memspace_test, provider_from_numa_memspace) {
106+
umf_memory_provider_handle_t provider = nullptr;
107+
enum umf_result_t ret =
108+
umfMemoryProviderCreateFromMemspace(memspace, nullptr, &provider);
109+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
110+
ASSERT_NE(provider, nullptr);
111+
112+
umfMemoryProviderDestroy(provider);
113+
}
114+
115+
TEST_F(numa_memspace_test, pool_from_numa_memspace) {
116+
umf_memory_pool_handle_t pool = nullptr;
117+
enum umf_result_t ret = umfPoolCreateFromMemspace(memspace, nullptr, &pool);
118+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
119+
ASSERT_NE(pool, nullptr);
120+
121+
umfPoolDestroy(pool);
122+
}
123+
124+
TEST_F(numa_memspace_provider_test, alloc_free) {
125+
void *ptr = nullptr;
126+
size_t size = SIZE_4K;
127+
size_t alignment = 0;
128+
129+
enum umf_result_t ret =
130+
umfMemoryProviderAlloc(provider, size, alignment, &ptr);
131+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
132+
ASSERT_NE(ptr, nullptr);
133+
134+
memset(ptr, 0xFF, size);
135+
136+
ret = umfMemoryProviderFree(provider, ptr, size);
137+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
138+
}

0 commit comments

Comments
 (0)