From: Tang Chen <tangchen@cn.fujitsu.com>
To: rjw@sisk.pl, lenb@kernel.org, tglx@linutronix.de, mingo@elte.hu,
hpa@zytor.com, akpm@linux-foundation.org, tj@kernel.org,
trenn@suse.de, yinghai@kernel.org, jiang.liu@huawei.com,
wency@cn.fujitsu.com, laijs@cn.fujitsu.com,
isimatu.yasuaki@jp.fujitsu.com, izumi.taku@jp.fujitsu.com,
mgorman@suse.de, minchan@kernel.org, mina86@mina86.com,
gong.chen@linux.intel.com, vasilis.liaskovitis@profitbricks.com,
lwoodman@redhat.com, riel@redhat.com, jweiner@redhat.com,
prarit@redhat.com, zhangyanfei@cn.fujitsu.com
Cc: x86@kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
linux-acpi@vger.kernel.org
Subject: [PATCH 11/11] x86, mem_hotplug: Allocate memory near kernel image before SRAT is parsed.
Date: Tue, 27 Aug 2013 17:37:48 +0800 [thread overview]
Message-ID: <1377596268-31552-12-git-send-email-tangchen@cn.fujitsu.com> (raw)
In-Reply-To: <1377596268-31552-1-git-send-email-tangchen@cn.fujitsu.com>
After memblock is ready, before SRAT is parsed, we should allocate memory
near the kernel image. So this patch does the following:
1. After memblock is ready, make memblock allocate memory from low address
to high, and set the lowest limit to the end of kernel image.
2. After SRAT is parsed, make memblock behave as default, allocate memory
from high address to low, and reset the lowest limit to 0.
This behavior is controlled by movablenode boot option.
Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
Reviewed-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com>
---
arch/x86/kernel/setup.c | 37 +++++++++++++++++++++++++++++++++++++
1 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index fa7b5f0..0b35bbd 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -1087,6 +1087,31 @@ void __init setup_arch(char **cmdline_p)
trim_platform_memory_ranges();
trim_low_memory_range();
+#ifdef CONFIG_MOVABLE_NODE
+ if (movablenode_enable_srat) {
+ /*
+ * Memory used by the kernel cannot be hot-removed because Linux cannot
+ * migrate the kernel pages. When memory hotplug is enabled, we should
+ * prevent memblock from allocating memory for the kernel.
+ *
+ * ACPI SRAT records all hotpluggable memory ranges. But before SRAT is
+ * parsed, we don't know about it.
+ *
+ * The kernel image is loaded into memory at very early time. We cannot
+ * prevent this anyway. So on NUMA system, we set any node the kernel
+ * resides in as un-hotpluggable.
+ *
+ * Since on modern servers, one node could have double-digit gigabytes
+ * memory, we can assume the memory around the kernel image is also
+ * un-hotpluggable. So before SRAT is parsed, just allocate memory near
+ * the kernel image to try the best to keep the kernel away from
+ * hotpluggable memory.
+ */
+ memblock_set_current_order(MEMBLOCK_ORDER_LOW_TO_HIGH);
+ memblock_set_current_limit_low(__pa_symbol(_end));
+ }
+#endif /* CONFIG_MOVABLE_NODE */
+
init_mem_mapping();
early_trap_pf_init();
@@ -1127,6 +1152,18 @@ void __init setup_arch(char **cmdline_p)
early_acpi_boot_init();
initmem_init();
+
+#ifdef CONFIG_MOVABLE_NODE
+ if (movablenode_enable_srat) {
+ /*
+ * When ACPI SRAT is parsed, which is done in initmem_init(), set
+ * memblock back to the default behavior.
+ */
+ memblock_set_current_order(MEMBLOCK_ORDER_DEFAULT);
+ memblock_set_current_limit_low(0);
+ }
+#endif /* CONFIG_MOVABLE_NODE */
+
memblock_find_dma_reserve();
#ifdef CONFIG_KVM_GUEST
--
1.7.1
next prev parent reply other threads:[~2013-08-27 9:40 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-27 9:37 [PATCH 00/11] x86, memblock: Allocate memory near kernel image before SRAT parsed Tang Chen
2013-08-27 9:37 ` [PATCH 01/11] memblock: Rename current_limit to current_limit_high in memblock Tang Chen
2013-08-27 9:37 ` [PATCH 02/11] memblock: Rename memblock_set_current_limit() to memblock_set_current_limit_high() Tang Chen
2013-08-27 9:37 ` [PATCH 03/11] memblock: Introduce lowest limit in memblock Tang Chen
2013-08-27 9:37 ` [PATCH 04/11] memblock: Introduce memblock_set_current_limit_low() to set lower limit of memblock Tang Chen
2013-08-27 9:37 ` [PATCH 05/11] memblock: Introduce allocation order to memblock Tang Chen
[not found] ` <20130905091615.GB15294@hacker.(null)>
2013-09-05 9:21 ` Tang Chen
2013-08-27 9:37 ` [PATCH 06/11] memblock: Improve memblock to support allocation from lower address Tang Chen
2013-09-04 0:24 ` Toshi Kani
2013-09-04 1:00 ` Tang Chen
2013-08-27 9:37 ` [PATCH 07/11] x86, memblock: Set lowest limit for memblock_alloc_base_nid() Tang Chen
2013-09-04 0:37 ` Toshi Kani
2013-09-04 2:05 ` Tang Chen
2013-09-04 15:22 ` Toshi Kani
2013-08-27 9:37 ` [PATCH 08/11] x86, acpi, memblock: Use __memblock_alloc_base() in acpi_initrd_override() Tang Chen
2013-08-28 0:04 ` Rafael J. Wysocki
2013-08-27 9:37 ` [PATCH 09/11] mem-hotplug: Introduce movablenode boot option to {en|dis}able using SRAT Tang Chen
2013-08-27 9:37 ` [PATCH 10/11] x86, mem-hotplug: Support initialize page tables from low to high Tang Chen
[not found] ` <20130905133027.GA23038@hacker.(null)>
2013-09-06 1:34 ` Tang Chen
[not found] ` <20130906021653.GA1062@hacker.(null)>
2013-09-06 3:09 ` Tang Chen
2013-08-27 9:37 ` Tang Chen [this message]
2013-09-04 19:40 ` [PATCH 11/11] x86, mem_hotplug: Allocate memory near kernel image before SRAT is parsed Toshi Kani
[not found] ` <20130828080311.GA608@hacker.(null)>
2013-08-28 9:34 ` [PATCH 00/11] x86, memblock: Allocate memory near kernel image before SRAT parsed Tang Chen
2013-08-28 15:19 ` Tejun Heo
2013-08-29 1:30 ` Tang Chen
[not found] ` <20130829013657.GA22599@hacker.(null)>
2013-08-29 1:53 ` Tang Chen
2013-09-02 1:03 ` Tang Chen
2013-09-04 19:22 ` Tejun Heo
2013-09-05 9:01 ` Tang Chen
[not found] ` <52299935.0302450a.26c9.ffffb240SMTPIN_ADDED_BROKEN@mx.google.com>
2013-09-06 15:15 ` Tejun Heo
2013-09-06 15:47 ` H. Peter Anvin
[not found] ` <522db781.22ab440a.41b1.ffffd825SMTPIN_ADDED_BROKEN@mx.google.com>
2013-09-09 13:58 ` Tejun Heo
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=1377596268-31552-12-git-send-email-tangchen@cn.fujitsu.com \
--to=tangchen@cn.fujitsu.com \
--cc=akpm@linux-foundation.org \
--cc=gong.chen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=isimatu.yasuaki@jp.fujitsu.com \
--cc=izumi.taku@jp.fujitsu.com \
--cc=jiang.liu@huawei.com \
--cc=jweiner@redhat.com \
--cc=laijs@cn.fujitsu.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lwoodman@redhat.com \
--cc=mgorman@suse.de \
--cc=mina86@mina86.com \
--cc=minchan@kernel.org \
--cc=mingo@elte.hu \
--cc=prarit@redhat.com \
--cc=riel@redhat.com \
--cc=rjw@sisk.pl \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=trenn@suse.de \
--cc=vasilis.liaskovitis@profitbricks.com \
--cc=wency@cn.fujitsu.com \
--cc=x86@kernel.org \
--cc=yinghai@kernel.org \
--cc=zhangyanfei@cn.fujitsu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®