From: Oscar Salvador <osalvador@suse.de>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: David Hildenbrand <david@redhat.com>,
Michal Hocko <mhocko@kernel.org>,
VlastimilBabkavbabka@suse.cz, pasha.tatashin@soleen.com,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Anshuman Khandual <anshuman.khandual@arm.com>,
Oscar Salvador <osalvador@suse.de>
Subject: [PATCH v2 3/7] mm,memory_hotplug: Add kernel boot option to enable memmap_on_memory
Date: Tue, 9 Feb 2021 14:38:50 +0100 [thread overview]
Message-ID: <20210209133854.17399-4-osalvador@suse.de> (raw)
In-Reply-To: <20210209133854.17399-1-osalvador@suse.de>
Self stored memmap leads to a sparse memory situation which is unsuitable
for workloads that requires large contiguous memory chunks, so make this
an opt-in which needs to be explicitly enabled.
To control this, let memory_hotplug have its own memory space, as suggested
by David, so we can add memory_hotplug.memmap_on_memory parameter.
Signed-off-by: Oscar Salvador <osalvador@suse.de>
---
Documentation/admin-guide/kernel-parameters.txt | 14 +++++++++++++
mm/Makefile | 5 ++++-
mm/memory_hotplug.c | 26 ++++++++++++++++++++++++-
3 files changed, 43 insertions(+), 2 deletions(-)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 5adf1e57e932..696beb5f6c92 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -2811,6 +2811,20 @@
seconds. Use this parameter to check at some
other rate. 0 disables periodic checking.
+ memory_hotplug.memmap_on_memory
+ [KNL,X86,ARM] Boolean flag to enable this feature.
+ Format: {on | off (default)}
+ When enabled, memory to build the pages tables for the
+ memmap array describing the hot-added range will be taken
+ from the range itself, so the memmap page tables will be
+ self-hosted.
+ Since only single memory device ranges are supported at
+ the moment, this option is disabled by default because
+ it might have an impact on workloads that needs large
+ contiguous memory chunks.
+ The state of the flag can be read in
+ /sys/module/memory_hotplug/parameters/memmap_on_memory.
+
memtest= [KNL,X86,ARM,PPC] Enable memtest
Format: <integer>
default : 0 <disable>
diff --git a/mm/Makefile b/mm/Makefile
index b2a564eec27f..9e284dba50ef 100644
--- a/mm/Makefile
+++ b/mm/Makefile
@@ -58,9 +58,13 @@ obj-y := filemap.o mempool.o oom_kill.o fadvise.o \
page-alloc-y := page_alloc.o
page-alloc-$(CONFIG_SHUFFLE_PAGE_ALLOCATOR) += shuffle.o
+# Give 'memory_hotplug' its own module-parameter namespace
+memory-hotplug-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o
+
obj-y += page-alloc.o
obj-y += init-mm.o
obj-y += memblock.o
+obj-y += $(memory-hotplug-y)
ifdef CONFIG_MMU
obj-$(CONFIG_ADVISE_SYSCALLS) += madvise.o
@@ -83,7 +87,6 @@ obj-$(CONFIG_SLUB) += slub.o
obj-$(CONFIG_KASAN) += kasan/
obj-$(CONFIG_KFENCE) += kfence/
obj-$(CONFIG_FAILSLAB) += failslab.o
-obj-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o
obj-$(CONFIG_MEMTEST) += memtest.o
obj-$(CONFIG_MIGRATION) += migrate.o
obj-$(CONFIG_TRANSPARENT_HUGEPAGE) += huge_memory.o khugepaged.o
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index 9bcc460e8bfe..95695483a622 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -42,7 +42,31 @@
#include "internal.h"
#include "shuffle.h"
-static bool memmap_on_memory_enabled;
+/*
+ * memory_hotplug.memmap_on_memory parameter
+ */
+static bool memmap_on_memory_enabled __ro_after_init;
+
+static int memmap_on_memory_show(char *buffer, const struct kernel_param *kp)
+{
+ return sprintf(buffer, "%s\n",
+ memmap_on_memory_enabled ? "on" : "off");
+}
+
+static __meminit int memmap_on_memory_store(const char *val,
+ const struct kernel_param *kp)
+{
+ /*
+ * Fail silently in case we cannot enable it due to platform constraints.
+ * User can always check whether it is enabled or not via /sys/module.
+ */
+ if (!IS_ENABLED(CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE))
+ return 0;
+
+ return param_set_bool(val, kp);
+}
+module_param_call(memmap_on_memory, memmap_on_memory_store,
+ memmap_on_memory_show, &memmap_on_memory_enabled, 0400);
/*
* online_page_callback contains pointer to current page onlining function.
--
2.16.3
next prev parent reply other threads:[~2021-02-09 13:42 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-09 13:38 [PATCH v2 0/7] Allocate memmap from hotadded memory (per device) Oscar Salvador
2021-02-09 13:38 ` [PATCH v2 1/7] mm,memory_hotplug: Allocate memmap from the added memory range Oscar Salvador
2021-02-25 18:58 ` David Hildenbrand
2021-02-28 18:50 ` Oscar Salvador
2021-03-01 8:30 ` David Hildenbrand
2021-03-01 8:32 ` David Hildenbrand
2021-02-09 13:38 ` [PATCH v2 2/7] acpi,memhotplug: Enable MHP_MEMMAP_ON_MEMORY when supported Oscar Salvador
2021-02-09 13:38 ` Oscar Salvador [this message]
2021-02-25 18:25 ` [PATCH v2 3/7] mm,memory_hotplug: Add kernel boot option to enable memmap_on_memory David Hildenbrand
2021-02-26 12:14 ` Oscar Salvador
2021-03-01 8:27 ` David Hildenbrand
2021-02-09 13:38 ` [PATCH v2 4/7] mm,memory_hotplug: Enforce struct page size to be multiple of PMD Oscar Salvador
2021-02-25 18:26 ` David Hildenbrand
2021-02-26 12:06 ` Oscar Salvador
2021-03-01 10:06 ` Oscar Salvador
2021-03-01 10:24 ` David Hildenbrand
2021-02-09 13:38 ` [PATCH v2 5/7] mm,memory_hotplug: Enforce pageblock alignment when memmap_on_memory Oscar Salvador
2021-02-25 18:27 ` David Hildenbrand
2021-02-26 12:06 ` Oscar Salvador
2021-02-09 13:38 ` [PATCH v2 6/7] x86/Kconfig: Introduce ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE Oscar Salvador
2021-02-25 18:29 ` David Hildenbrand
2021-02-26 12:04 ` Oscar Salvador
2021-03-01 8:45 ` David Hildenbrand
2021-03-01 10:07 ` Oscar Salvador
2021-02-09 13:38 ` [PATCH v2 7/7] arm64/Kconfig: " Oscar Salvador
2021-02-25 18:29 ` David Hildenbrand
2021-02-26 12:10 ` Oscar Salvador
2021-02-17 10:18 ` [PATCH v2 0/7] Allocate memmap from hotadded memory (per device) Oscar Salvador
2021-02-22 11:15 ` Oscar Salvador
2021-02-22 11:28 ` David Hildenbrand
2021-02-23 7:48 ` Oscar Salvador
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=20210209133854.17399-4-osalvador@suse.de \
--to=osalvador@suse.de \
--cc=VlastimilBabkavbabka@suse.cz \
--cc=akpm@linux-foundation.org \
--cc=anshuman.khandual@arm.com \
--cc=david@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=pasha.tatashin@soleen.com \
/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.