Skip to content

Commit 6d0ec0c

Browse files
Merge pull request #664 from lplewa/numa_assert
refactor numanode assert in tests
2 parents 720c8a2 + d82a8a3 commit 6d0ec0c

File tree

5 files changed

+80
-66
lines changed

5 files changed

+80
-66
lines changed

test/common/numa_helpers.h

Lines changed: 0 additions & 34 deletions
This file was deleted.

test/common/numa_helpers.hpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Copyright (C) 2024 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+
#ifndef UMF_TEST_NUMA_HELPERS_HPP
6+
#define UMF_TEST_NUMA_HELPERS_HPP 1
7+
8+
#include <gtest/gtest.h>
9+
#include <numa.h>
10+
#include <numaif.h>
11+
#include <stdint.h>
12+
#include <stdio.h>
13+
14+
#include "test_helpers.h"
15+
16+
// returns the node where page starting at 'ptr' resides
17+
static inline void getNumaNodeByPtr(void *ptr, int *node) {
18+
int nodeId;
19+
int ret =
20+
get_mempolicy(&nodeId, nullptr, 0, ptr, MPOL_F_ADDR | MPOL_F_NODE);
21+
22+
ASSERT_EQ(ret, 0) << "get_mempolicy failed";
23+
ASSERT_GE(nodeId, 0)
24+
<< "get_mempolicy returned nodeId < 0 - should never happen";
25+
26+
*node = nodeId;
27+
}
28+
29+
static inline void _assertNode(void *ptr, int nodeId, bool fatal) {
30+
int node = -1;
31+
32+
getNumaNodeByPtr(ptr, &node);
33+
if (testing::Test::HasFatalFailure()) {
34+
return;
35+
}
36+
if (fatal) {
37+
ASSERT_EQ(nodeId, node);
38+
} else {
39+
EXPECT_EQ(nodeId, node);
40+
}
41+
}
42+
43+
//Asserts that given nodeId is equal to the node where given ptr resides
44+
#define ASSERT_NODE_EQ(ptr, nodeId) \
45+
ASSERT_NO_FATAL_FAILURE(_assertNode(ptr, nodeId, true))
46+
47+
#define EXPECT_NODE_EQ(ptr, nodeId) \
48+
ASSERT_NO_FATAL_FAILURE(_assertNode(ptr, nodeId, false))
49+
50+
#endif /* UMF_TEST_NUMA_HELPERS_HPP */

test/memspaces/memspace_highest_capacity.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include "memspace_helpers.hpp"
77
#include "memspace_internal.h"
88
#include "memtarget_numa.h"
9-
#include "numa_helpers.h"
9+
#include "numa_helpers.hpp"
1010
#include "test_helpers.h"
1111

1212
#include <numa.h>
@@ -60,7 +60,10 @@ TEST_F(memspaceHighestCapacityProviderTest, highestCapacityVerify) {
6060
memset(ptr, 0, alloc_size);
6161
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
6262

63-
auto nodeId = getNumaNodeByPtr(ptr);
63+
int nodeId;
64+
65+
ASSERT_NO_FATAL_FAILURE(getNumaNodeByPtr(ptr, &nodeId));
66+
6467
ASSERT_TRUE(std::any_of(maxCapacityNodes.begin(), maxCapacityNodes.end(),
6568
[nodeId](int node) { return nodeId == node; }));
6669

test/memspaces/memspace_host_all.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#include "memspace_helpers.hpp"
1414
#include "memspace_internal.h"
1515
#include "memtarget_numa.h"
16-
#include "numa_helpers.h"
16+
#include "numa_helpers.hpp"
1717
#include "test_helpers.h"
1818
#include "utils_sanitizers.h"
1919

test/provider_os_memory_multiple_numa_nodes.cpp

Lines changed: 24 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
44

55
#include "base.hpp"
6-
#include "numa_helpers.h"
6+
#include "numa_helpers.hpp"
77
#include "test_helpers.h"
88

99
#include <algorithm>
@@ -120,7 +120,6 @@ struct testNuma : testing::Test {
120120
};
121121

122122
struct testNumaOnEachNode : testNuma, testing::WithParamInterface<unsigned> {};
123-
struct testNumaOnEachCpu : testNuma, testing::WithParamInterface<int> {};
124123

125124
/*
126125
- In case of the lack of support for NUMA on the system
@@ -143,9 +142,6 @@ GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(testNumaOnEachNode);
143142
INSTANTIATE_TEST_SUITE_P(testNumaNodesAllocations, testNumaOnEachNode,
144143
::testing::ValuesIn(get_available_numa_nodes()));
145144

146-
INSTANTIATE_TEST_SUITE_P(testNumaNodesAllocationsAllCpus, testNumaOnEachCpu,
147-
::testing::ValuesIn(get_available_cpus()));
148-
149145
// Test for allocations on numa nodes. It will be executed on each of
150146
// the available numa nodes.
151147
TEST_P(testNumaOnEachNode, checkNumaNodesAllocations) {
@@ -168,8 +164,7 @@ TEST_P(testNumaOnEachNode, checkNumaNodesAllocations) {
168164

169165
// 'ptr' must point to an initialized value before retrieving its numa node
170166
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);
173168
}
174169

175170
// Test for allocations on numa nodes with mode preferred. It will be executed
@@ -193,8 +188,7 @@ TEST_P(testNumaOnEachNode, checkModePreferred) {
193188

194189
// 'ptr' must point to an initialized value before retrieving its numa node
195190
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);
198192
}
199193

200194
// Test for allocation on numa node with default mode enabled.
@@ -218,8 +212,7 @@ TEST_P(testNumaOnEachNode, checkModeDefaultSetMempolicy) {
218212

219213
// 'ptr' must point to an initialized value before retrieving its numa node
220214
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);
223216
}
224217

225218
// Test for allocations on a single numa node with interleave mode enabled.
@@ -245,10 +238,14 @@ TEST_P(testNumaOnEachNode, checkModeInterleaveSingleNode) {
245238

246239
// 'ptr' must point to an initialized value before retrieving its numa node
247240
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);
250242
}
251243

244+
struct testNumaOnEachCpu : testNuma, testing::WithParamInterface<int> {};
245+
246+
INSTANTIATE_TEST_SUITE_P(testNumaNodesAllocationsAllCpus, testNumaOnEachCpu,
247+
::testing::ValuesIn(get_available_cpus()));
248+
252249
// Test for allocation on numa node with mode preferred and an empty nodeset.
253250
// For the empty nodeset the memory is allocated on the node of the CPU that
254251
// triggered the allocation. It will be executed on each available CPU.
@@ -285,8 +282,7 @@ TEST_P(testNumaOnEachCpu, checkModePreferredEmptyNodeset) {
285282

286283
// 'ptr' must point to an initialized value before retrieving its numa node
287284
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);
290286
}
291287

292288
// Test for allocation on numa node with local mode enabled. The memory is
@@ -323,8 +319,7 @@ TEST_P(testNumaOnEachCpu, checkModeLocal) {
323319

324320
// 'ptr' must point to an initialized value before retrieving its numa node
325321
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);
328323
}
329324

330325
// Test for allocation on numa node with default mode enabled.
@@ -348,8 +343,7 @@ TEST_F(testNuma, checkModeDefault) {
348343

349344
// 'ptr' must point to an initialized value before retrieving its numa node
350345
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);
353347
}
354348

355349
// Test for allocations on numa nodes with interleave mode enabled.
@@ -379,11 +373,11 @@ TEST_F(testNuma, checkModeInterleave) {
379373

380374
// Test where each page will be allocated.
381375
// 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));
383378
for (size_t i = 1; i < (size_t)pages_num; i++) {
384379
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]);
387381
}
388382

389383
bitmask *retrieved_nodemask = retrieve_nodemask(ptr);
@@ -423,13 +417,11 @@ TEST_F(testNuma, checkModeInterleaveCustomPartSize) {
423417
memset(ptr, 0xFF, size);
424418
// Test where each page will be allocated.
425419
// 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));
427422
for (size_t i = 0; i < (size_t)part_num; i++) {
428423
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]);
433425
}
434426
index = (index + 1) % numa_nodes.size();
435427
}
@@ -441,7 +433,7 @@ TEST_F(testNuma, checkModeInterleaveCustomPartSize) {
441433
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
442434
ASSERT_NE(ptr, nullptr);
443435
memset(ptr, 0xFF, size);
444-
EXPECT_EQ(numa_nodes[index], getNumaNodeByPtr(ptr));
436+
EXPECT_NODE_EQ(ptr, numa_nodes[index]);
445437
umfMemoryProviderFree(os_memory_provider, ptr, size);
446438
}
447439

@@ -643,7 +635,10 @@ TEST_F(testNuma, checkModeBindOnAllNodes) {
643635

644636
// 'ptr' must point to an initialized value before retrieving its numa node
645637
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;
647642

648643
int read_cpu = sched_getcpu();
649644
int read_numa_node = numa_node_of_cpu(read_cpu);

0 commit comments

Comments
 (0)