3
3
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4
4
5
5
#include " base.hpp"
6
- #include " numa_helpers.h "
6
+ #include " numa_helpers.hpp "
7
7
#include " test_helpers.h"
8
8
9
9
#include < algorithm>
@@ -120,7 +120,6 @@ struct testNuma : testing::Test {
120
120
};
121
121
122
122
struct testNumaOnEachNode : testNuma, testing::WithParamInterface<unsigned > {};
123
- struct testNumaOnEachCpu : testNuma, testing::WithParamInterface<int > {};
124
123
125
124
/*
126
125
- In case of the lack of support for NUMA on the system
@@ -143,9 +142,6 @@ GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(testNumaOnEachNode);
143
142
INSTANTIATE_TEST_SUITE_P (testNumaNodesAllocations, testNumaOnEachNode,
144
143
::testing::ValuesIn (get_available_numa_nodes()));
145
144
146
- INSTANTIATE_TEST_SUITE_P (testNumaNodesAllocationsAllCpus, testNumaOnEachCpu,
147
- ::testing::ValuesIn (get_available_cpus()));
148
-
149
145
// Test for allocations on numa nodes. It will be executed on each of
150
146
// the available numa nodes.
151
147
TEST_P (testNumaOnEachNode, checkNumaNodesAllocations) {
@@ -168,8 +164,7 @@ TEST_P(testNumaOnEachNode, checkNumaNodesAllocations) {
168
164
169
165
// 'ptr' must point to an initialized value before retrieving its numa node
170
166
memset (ptr, 0xFF , alloc_size);
171
- int retrieved_numa_node_number = getNumaNodeByPtr (ptr);
172
- EXPECT_EQ (retrieved_numa_node_number, numa_node_number);
167
+ EXPECT_NODE_EQ (ptr, numa_node_number);
173
168
}
174
169
175
170
// Test for allocations on numa nodes with mode preferred. It will be executed
@@ -193,8 +188,7 @@ TEST_P(testNumaOnEachNode, checkModePreferred) {
193
188
194
189
// 'ptr' must point to an initialized value before retrieving its numa node
195
190
memset (ptr, 0xFF , alloc_size);
196
- int retrieved_numa_node_number = getNumaNodeByPtr (ptr);
197
- EXPECT_EQ (retrieved_numa_node_number, numa_node_number);
191
+ EXPECT_NODE_EQ (ptr, numa_node_number);
198
192
}
199
193
200
194
// Test for allocation on numa node with default mode enabled.
@@ -218,8 +212,7 @@ TEST_P(testNumaOnEachNode, checkModeDefaultSetMempolicy) {
218
212
219
213
// 'ptr' must point to an initialized value before retrieving its numa node
220
214
memset (ptr, 0xFF , alloc_size);
221
- int retrieved_numa_node_number = getNumaNodeByPtr (ptr);
222
- EXPECT_EQ (retrieved_numa_node_number, numa_node_number);
215
+ EXPECT_NODE_EQ (ptr, numa_node_number);
223
216
}
224
217
225
218
// Test for allocations on a single numa node with interleave mode enabled.
@@ -245,10 +238,14 @@ TEST_P(testNumaOnEachNode, checkModeInterleaveSingleNode) {
245
238
246
239
// 'ptr' must point to an initialized value before retrieving its numa node
247
240
memset (ptr, 0xFF , pages_num * page_size);
248
- int retrieved_numa_node_number = getNumaNodeByPtr (ptr);
249
- EXPECT_EQ (retrieved_numa_node_number, numa_node_number);
241
+ EXPECT_NODE_EQ (ptr, numa_node_number);
250
242
}
251
243
244
+ struct testNumaOnEachCpu : testNuma, testing::WithParamInterface<int > {};
245
+
246
+ INSTANTIATE_TEST_SUITE_P (testNumaNodesAllocationsAllCpus, testNumaOnEachCpu,
247
+ ::testing::ValuesIn (get_available_cpus()));
248
+
252
249
// Test for allocation on numa node with mode preferred and an empty nodeset.
253
250
// For the empty nodeset the memory is allocated on the node of the CPU that
254
251
// triggered the allocation. It will be executed on each available CPU.
@@ -285,8 +282,7 @@ TEST_P(testNumaOnEachCpu, checkModePreferredEmptyNodeset) {
285
282
286
283
// 'ptr' must point to an initialized value before retrieving its numa node
287
284
memset (ptr, 0xFF , alloc_size);
288
- int retrieved_numa_node_number = getNumaNodeByPtr (ptr);
289
- EXPECT_EQ (retrieved_numa_node_number, numa_node_number);
285
+ EXPECT_NODE_EQ (ptr, numa_node_number);
290
286
}
291
287
292
288
// Test for allocation on numa node with local mode enabled. The memory is
@@ -323,8 +319,7 @@ TEST_P(testNumaOnEachCpu, checkModeLocal) {
323
319
324
320
// 'ptr' must point to an initialized value before retrieving its numa node
325
321
memset (ptr, 0xFF , alloc_size);
326
- int retrieved_numa_node_number = getNumaNodeByPtr (ptr);
327
- EXPECT_EQ (retrieved_numa_node_number, numa_node_number);
322
+ EXPECT_NODE_EQ (ptr, numa_node_number);
328
323
}
329
324
330
325
// Test for allocation on numa node with default mode enabled.
@@ -348,8 +343,7 @@ TEST_F(testNuma, checkModeDefault) {
348
343
349
344
// 'ptr' must point to an initialized value before retrieving its numa node
350
345
memset (ptr, 0xFF , alloc_size);
351
- int retrieved_numa_node_number = getNumaNodeByPtr (ptr);
352
- EXPECT_EQ (retrieved_numa_node_number, numa_node_number);
346
+ EXPECT_NODE_EQ (ptr, numa_node_number);
353
347
}
354
348
355
349
// Test for allocations on numa nodes with interleave mode enabled.
@@ -379,11 +373,11 @@ TEST_F(testNuma, checkModeInterleave) {
379
373
380
374
// Test where each page will be allocated.
381
375
// Get the first numa node for ptr; Each next page is expected to be on next nodes.
382
- size_t index = getNumaNodeByPtr ((char *)ptr);
376
+ int index = 0 ;
377
+ ASSERT_NO_FATAL_FAILURE (getNumaNodeByPtr (ptr, &index));
383
378
for (size_t i = 1 ; i < (size_t )pages_num; i++) {
384
379
index = (index + 1 ) % numa_nodes.size ();
385
- ASSERT_EQ (numa_nodes[index],
386
- getNumaNodeByPtr ((char *)ptr + page_size * i));
380
+ EXPECT_NODE_EQ ((char *)ptr + page_size * i, numa_nodes[index]);
387
381
}
388
382
389
383
bitmask *retrieved_nodemask = retrieve_nodemask (ptr);
@@ -423,13 +417,11 @@ TEST_F(testNuma, checkModeInterleaveCustomPartSize) {
423
417
memset (ptr, 0xFF , size);
424
418
// Test where each page will be allocated.
425
419
// Get the first numa node for ptr; Each next part is expected to be on next nodes.
426
- size_t index = getNumaNodeByPtr ((char *)ptr);
420
+ int index = 0 ;
421
+ ASSERT_NO_FATAL_FAILURE (getNumaNodeByPtr (ptr, &index));
427
422
for (size_t i = 0 ; i < (size_t )part_num; i++) {
428
423
for (size_t j = 0 ; j < part_size; j += page_size) {
429
- EXPECT_EQ (numa_nodes[index],
430
- getNumaNodeByPtr ((char *)ptr + part_size * i + j))
431
- << " for ptr " << ptr << " + " << part_size << " * " << i
432
- << " + " << j;
424
+ ASSERT_NODE_EQ ((char *)ptr + part_size * i + j, numa_nodes[index]);
433
425
}
434
426
index = (index + 1 ) % numa_nodes.size ();
435
427
}
@@ -441,7 +433,7 @@ TEST_F(testNuma, checkModeInterleaveCustomPartSize) {
441
433
ASSERT_EQ (umf_result, UMF_RESULT_SUCCESS);
442
434
ASSERT_NE (ptr, nullptr );
443
435
memset (ptr, 0xFF , size);
444
- EXPECT_EQ ( numa_nodes[index], getNumaNodeByPtr (ptr) );
436
+ EXPECT_NODE_EQ (ptr, numa_nodes[index]);
445
437
umfMemoryProviderFree (os_memory_provider, ptr, size);
446
438
}
447
439
@@ -643,7 +635,10 @@ TEST_F(testNuma, checkModeBindOnAllNodes) {
643
635
644
636
// 'ptr' must point to an initialized value before retrieving its numa node
645
637
memset (ptr, 0xFF , alloc_size);
646
- unsigned retrieved_numa_node_number = (unsigned )getNumaNodeByPtr (ptr);
638
+
639
+ int node;
640
+ ASSERT_NO_FATAL_FAILURE (getNumaNodeByPtr (ptr, &node));
641
+ unsigned retrieved_numa_node_number = (unsigned )node;
647
642
648
643
int read_cpu = sched_getcpu ();
649
644
int read_numa_node = numa_node_of_cpu (read_cpu);
0 commit comments