Skip to content

Commit 6d091f8

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

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

test/provider_os_memory.cpp

Lines changed: 47 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,48 @@ 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 =
328+
umfMemoryProviderGetMinPageSize(os_memory_provider, NULL, &size);
329+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
330+
331+
void *ptr = nullptr;
332+
umf_result = umfMemoryProviderAlloc(os_memory_provider, size, 0, &ptr);
333+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
334+
ASSERT_NE(ptr, nullptr);
335+
336+
int numa_node;
337+
get_mempolicy(&numa_node, NULL, numa_max_node() + 1, (void *)ptr,
338+
MPOL_F_NODE | MPOL_F_ADDR);
339+
ASSERT_EQ(numa_node, 1);
340+
341+
memset(ptr, 0xFF, size);
342+
umf_result = umfMemoryProviderFree(os_memory_provider, ptr, size);
343+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
344+
}

0 commit comments

Comments
 (0)