Skip to content

Commit 564194c

Browse files
author
Damian Duy
committed
Add test for multiple NUMA nodes
1 parent b853a92 commit 564194c

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

test/provider_os_memory.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include "cpp_helpers.hpp"
88
#include "provider_os_memory_internal.h"
99
#include "umf/providers/provider_os_memory.h"
10+
#include <numa.h>
11+
#include <numaif.h>
1012
#include <umf/memory_provider.h>
1113

1214
using umf_test::test;
@@ -295,3 +297,46 @@ TEST_P(umfProviderTest, purge_force_INVALID_POINTER) {
295297
verify_last_native_error(provider.get(),
296298
UMF_OS_RESULT_ERROR_PURGE_FORCE_FAILED);
297299
}
300+
301+
// Tests for allocations on numa nodes
302+
TEST_F(test, checkNUMAnodesAllocation) {
303+
if (numa_available() == -1 || numa_num_task_nodes() <= 1) {
304+
GTEST_SKIP();
305+
}
306+
307+
umf_memory_provider_handle_t os_memory_provider = nullptr;
308+
umf_os_memory_provider_params_t os_memory_provider_params =
309+
UMF_OS_MEMORY_PROVIDER_PARAMS_TEST;
310+
311+
bitmask * nodemask = numa_parse_nodestring("1");
312+
ASSERT_NE(nodemask, nullptr);
313+
long unsigned int * nodemask_ptr = nodemask->maskp;
314+
315+
os_memory_provider_params.maxnode = numa_max_node() + 1;
316+
os_memory_provider_params.nodemask = nodemask_ptr;
317+
os_memory_provider_params.numa_mode = UMF_NUMA_MODE_BIND;
318+
319+
umf_result_t umf_result;
320+
umf_result = umfMemoryProviderCreate(&UMF_OS_MEMORY_PROVIDER_OPS,
321+
&os_memory_provider_params,
322+
&os_memory_provider);
323+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
324+
ASSERT_NE(os_memory_provider, nullptr);
325+
326+
size_t size;
327+
umf_result = umfMemoryProviderGetMinPageSize(os_memory_provider, NULL, &size);
328+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
329+
330+
void *ptr = nullptr;
331+
umf_result = umfMemoryProviderAlloc(os_memory_provider, size, 0, &ptr);
332+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
333+
ASSERT_NE(ptr, nullptr);
334+
335+
int numa_node;
336+
get_mempolicy(&numa_node, NULL, numa_max_node() + 1, (void*)ptr, MPOL_F_NODE | MPOL_F_ADDR);
337+
ASSERT_EQ(numa_node, 1);
338+
339+
memset(ptr, 0xFF, size);
340+
umf_result = umfMemoryProviderFree(os_memory_provider, ptr, size);
341+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
342+
}

0 commit comments

Comments
 (0)