From: Rebecca Mckeever <remckee0@gmail.com>
To: Mike Rapoport <rppt@kernel.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Cc: David Hildenbrand <david@redhat.com>,
Rebecca Mckeever <remckee0@gmail.com>
Subject: [PATCH v4 1/4] memblock tests: add simulation of physical memory with multiple NUMA nodes
Date: Sat, 3 Sep 2022 23:21:05 -0500 [thread overview]
Message-ID: <49b96ce88dece5b394d5dd4332c1572da917b30a.1662264560.git.remckee0@gmail.com> (raw)
In-Reply-To: <cover.1662264560.git.remckee0@gmail.com>
Add function setup_numa_memblock() for setting up a memory layout with
multiple NUMA nodes in a previously allocated dummy physical memory.
This function can be used in place of setup_memblock() in tests that need
to simulate a NUMA system.
setup_numa_memblock():
- allows for setting up a memory layout by specifying the fraction of
MEM_SIZE in each node
Set CONFIG_NODES_SHIFT to 4 when building with NUMA=1 to allow for up to
16 NUMA nodes.
Signed-off-by: Rebecca Mckeever <remckee0@gmail.com>
---
.../testing/memblock/scripts/Makefile.include | 2 +-
tools/testing/memblock/tests/common.c | 29 +++++++++++++++++++
tools/testing/memblock/tests/common.h | 4 ++-
3 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/tools/testing/memblock/scripts/Makefile.include b/tools/testing/memblock/scripts/Makefile.include
index aa6d82d56a23..998281723590 100644
--- a/tools/testing/memblock/scripts/Makefile.include
+++ b/tools/testing/memblock/scripts/Makefile.include
@@ -3,7 +3,7 @@
# Simulate CONFIG_NUMA=y
ifeq ($(NUMA), 1)
- CFLAGS += -D CONFIG_NUMA
+ CFLAGS += -D CONFIG_NUMA -D CONFIG_NODES_SHIFT=4
endif
# Use 32 bit physical addresses.
diff --git a/tools/testing/memblock/tests/common.c b/tools/testing/memblock/tests/common.c
index eec6901081af..b6110df21b2a 100644
--- a/tools/testing/memblock/tests/common.c
+++ b/tools/testing/memblock/tests/common.c
@@ -72,6 +72,35 @@ void setup_memblock(void)
fill_memblock();
}
+/**
+ * setup_numa_memblock:
+ * Set up a memory layout with multiple NUMA nodes in a previously allocated
+ * dummy physical memory.
+ * @nodes: an array containing the denominators of the fractions of MEM_SIZE
+ * contained in each node (e.g., if nodes[0] = SZ_8, node 0 will
+ * contain 1/8th of MEM_SIZE)
+ *
+ * The nids will be set to 0 through NUMA_NODES - 1.
+ */
+void setup_numa_memblock(const phys_addr_t nodes[])
+{
+ phys_addr_t base;
+ int flags;
+
+ reset_memblock_regions();
+ base = (phys_addr_t)memory_block.base;
+ flags = (movable_node_is_enabled()) ? MEMBLOCK_NONE : MEMBLOCK_HOTPLUG;
+
+ for (int i = 0; i < NUMA_NODES; i++) {
+ assert(nodes[i] <= MEM_SIZE && nodes[i] > 0);
+ phys_addr_t size = MEM_SIZE / nodes[i];
+
+ memblock_add_node(base, size, i, flags);
+ base += size;
+ }
+ fill_memblock();
+}
+
void dummy_physical_memory_init(void)
{
memory_block.base = malloc(MEM_SIZE);
diff --git a/tools/testing/memblock/tests/common.h b/tools/testing/memblock/tests/common.h
index 78128e109a95..caf01543a315 100644
--- a/tools/testing/memblock/tests/common.h
+++ b/tools/testing/memblock/tests/common.h
@@ -10,7 +10,8 @@
#include <linux/printk.h>
#include <../selftests/kselftest.h>
-#define MEM_SIZE SZ_16K
+#define MEM_SIZE SZ_16K
+#define NUMA_NODES 8
enum test_flags {
/* No special request. */
@@ -102,6 +103,7 @@ struct region {
void reset_memblock_regions(void);
void reset_memblock_attributes(void);
void setup_memblock(void);
+void setup_numa_memblock(const phys_addr_t nodes[]);
void dummy_physical_memory_init(void);
void dummy_physical_memory_cleanup(void);
void parse_args(int argc, char **argv);
--
2.25.1
next prev parent reply other threads:[~2022-09-04 4:21 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-04 4:21 [PATCH v4 0/4] memblock tests: add NUMA tests for memblock_alloc_try_nid* Rebecca Mckeever
2022-09-04 4:21 ` Rebecca Mckeever [this message]
2022-09-06 13:17 ` [PATCH v4 1/4] memblock tests: add simulation of physical memory with multiple NUMA nodes David Hildenbrand
2022-09-06 23:43 ` Rebecca Mckeever
2022-09-07 8:44 ` David Hildenbrand
2022-09-07 23:52 ` Rebecca Mckeever
2022-09-04 4:21 ` [PATCH v4 2/4] memblock tests: add top-down NUMA tests for memblock_alloc_try_nid* Rebecca Mckeever
2022-09-08 12:23 ` David Hildenbrand
2022-09-04 4:21 ` [PATCH v4 3/4] memblock tests: add bottom-up " Rebecca Mckeever
2022-09-08 12:26 ` David Hildenbrand
2022-09-04 4:21 ` [PATCH v4 4/4] memblock tests: add generic " Rebecca Mckeever
2022-09-08 12:26 ` David Hildenbrand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49b96ce88dece5b394d5dd4332c1572da917b30a.1662264560.git.remckee0@gmail.com \
--to=remckee0@gmail.com \
--cc=david@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=rppt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.