[PATCH v2 0/1] initialize pages on demand during boot
From: Pavel Tatashin
Date: Thu Feb 08 2018 - 13:51:21 EST
Change log:
v1 - v2: Added Tested-by: Masayoshi Mizuma
Answering Andrew Morton's questions:
> Presumably this fixes some real-world problem which someone has observed?
Yes, linked below.
> Please describe that problem for us in lavish detail.
This change helps for three reasons:
1. Insufficient amount of reserved memory due to arguments provided by
user. User may request some buffers, increased hash tables sizes etc.
Currently, machine panics during boot if it can't allocate memory due
to insufficient amount of reserved memory. With this change, it will
be able to grow zone before deferred pages are initialized.
One observed example is described in the linked discussion [1] Mel
Gorman writes:
"
Yasuaki Ishimatsu reported a premature OOM when trace_buf_size=100m was
specified on a machine with many CPUs. The kernel tried to allocate 38.4GB
but only 16GB was available due to deferred memory initialisation.
"
The allocations in the above scenario happen per-cpu in smp_init(),
and before deferred pages are initialized. So, there is no way to
predict how much memory we should put aside to boot successfully with
deferred page initialization feature compiled in.
2. The second reason is future proof. The kernel memory requirements
may change, and we do not want to constantly update
reset_deferred_meminit() to satisfy the new requirements. In addition,
this function is currently in common code, but potentially would need
to be split into arch specific variants, as more arches will start
taking advantage of deferred page initialization feature.
3. On demand initialization of reserved pages guarantees that we will
initialize only as many pages early in boot using only one thread as
needed, the rest are going to be efficiently initialized in parallel.
[1] https://www.spinics.net/lists/linux-mm/msg139087.html
Pavel Tatashin (1):
mm: initialize pages on demand during boot
include/linux/memblock.h | 10 ---
mm/memblock.c | 23 -------
mm/page_alloc.c | 164 ++++++++++++++++++++++++++++++++++++-----------
3 files changed, 125 insertions(+), 72 deletions(-)
--
2.16.1