All of lore.kernel.org
 help / color / mirror / Atom feed
* [RESEND PATCH v10 0/6] optimize memblock_next_valid_pfn and early_pfn_valid on arm and arm64
@ 2018-07-06  9:01 ` Jia He
  0 siblings, 0 replies; 57+ messages in thread
From: Jia He @ 2018-07-06  9:01 UTC (permalink / raw)
  To: Russell King, Catalin Marinas, Will Deacon, Mark Rutland,
	Ard Biesheuvel, Andrew Morton, Michal Hocko
  Cc: Wei Yang, Kees Cook, Laura Abbott, Vladimir Murzin,
	Philip Derrin, AKASHI Takahiro, James Morse, Steve Capper,
	Pavel Tatashin, Gioh Kim, Vlastimil Babka, Mel Gorman,
	Johannes Weiner, Kemi Wang, Petr Tesarik, YASUAKI ISHIMATSU,
	Andrey Ryabinin, Nikolay Borisov, Daniel Jordan, Daniel Vacek,
	Eugeniu Rosca, linux-arm-kernel, linux-kernel, linux-mm, Jia He

Commit b92df1de5d28 ("mm: page_alloc: skip over regions of invalid pfns
where possible") optimized the loop in memmap_init_zone(). But it causes
possible panic bug. So Daniel Vacek reverted it later.

But as suggested by Daniel Vacek, it is fine to using memblock to skip
gaps and finding next valid frame with CONFIG_HAVE_ARCH_PFN_VALID.

More from what Daniel said:
"On arm and arm64, memblock is used by default. But generic version of
pfn_valid() is based on mem sections and memblock_next_valid_pfn() does
not always return the next valid one but skips more resulting in some
valid frames to be skipped (as if they were invalid). And that's why
kernel was eventually crashing on some !arm machines."

About the performance consideration:
As said by James in b92df1de5,
"I have tested this patch on a virtual model of a Samurai CPU with a
sparse memory map.  The kernel boot time drops from 109 to 62 seconds."
Thus it would be better if we remain memblock_next_valid_pfn on arm/arm64.

Besides we can remain memblock_next_valid_pfn, there is still some room
for improvement. After this set, I can see the time overhead of memmap_init
is reduced from 27956us to 13537us in my armv8a server(QDF2400 with 96G
memory, pagesize 64k). I believe arm server will benefit more if memory is
larger than TBs

Patch 1 introduces new config to make codes more generic
Patch 2 remains the memblock_next_valid_pfn on arm and arm64,this patch is
        originated from b92df1de5
Patch 3 optimizes the memblock_next_valid_pfn()
Patch 4~6 optimizes the early_pfn_valid()

Changelog:
V10:- move codes to memblock.c, refine the performance consideration
V9: - rebase to mmotm master, refine the log description. No major changes
V8: - introduce new config and move generic code to early_pfn.h
    - optimize memblock_next_valid_pfn as suggested by Matthew Wilcox
V7: - fix i386 compilation error. refine the commit description
V6: - simplify the codes, move arm/arm64 common codes to one file.
    - refine patches as suggested by Danial Vacek and Ard Biesheuvel
V5: - further refining as suggested by Danial Vacek. Make codes
      arm/arm64 more arch specific
V4: - refine patches as suggested by Danial Vacek and Wei Yang
    - optimized on arm besides arm64
V3: - fix 2 issues reported by kbuild test robot
V2: - rebase to mmotm latest
    - remain memblock_next_valid_pfn on arm64
    - refine memblock_search_pfn_regions and pfn_valid_region

Jia He (6):
  arm: arm64: introduce CONFIG_HAVE_MEMBLOCK_PFN_VALID
  mm: page_alloc: remain memblock_next_valid_pfn() on arm/arm64
  mm: page_alloc: reduce unnecessary binary search in
    memblock_next_valid_pfn()
  mm/memblock: introduce memblock_search_pfn_regions()
  mm/memblock: introduce pfn_valid_region()
  mm: page_alloc: reduce unnecessary binary search in early_pfn_valid()

 arch/arm/Kconfig         |  4 +++
 arch/arm64/Kconfig       |  4 +++
 include/linux/memblock.h |  2 ++
 include/linux/mmzone.h   | 16 +++++++++
 mm/Kconfig               |  3 ++
 mm/memblock.c            | 84 ++++++++++++++++++++++++++++++++++++++++++++++++
 mm/page_alloc.c          |  5 ++-
 7 files changed, 117 insertions(+), 1 deletion(-)

-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 57+ messages in thread

end of thread, other threads:[~2018-08-22  1:39 UTC | newest]

Thread overview: 57+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-06  9:01 [RESEND PATCH v10 0/6] optimize memblock_next_valid_pfn and early_pfn_valid on arm and arm64 Jia He
2018-07-06  9:01 ` Jia He
2018-07-06  9:01 ` [RESEND PATCH v10 1/6] arm: arm64: introduce CONFIG_HAVE_MEMBLOCK_PFN_VALID Jia He
2018-07-06  9:01   ` Jia He
2018-08-17 14:50   ` Catalin Marinas
2018-08-17 14:50     ` Catalin Marinas
2018-08-20  6:27     ` Jia He
2018-08-20  6:27       ` Jia He
2018-07-06  9:01 ` [RESEND PATCH v10 2/6] mm: page_alloc: remain memblock_next_valid_pfn() on arm/arm64 Jia He
2018-07-06  9:01   ` Jia He
2018-07-06 22:37   ` Andrew Morton
2018-07-06 22:37     ` Andrew Morton
2018-07-09  3:30     ` Jia He
2018-07-09  3:30       ` Jia He
2018-07-09  3:30       ` Jia He
2018-08-16 22:54   ` Pasha Tatashin
2018-08-16 22:54     ` Pasha Tatashin
2018-08-16 22:54     ` Pasha Tatashin
2018-07-06  9:01 ` [RESEND PATCH v10 3/6] mm: page_alloc: reduce unnecessary binary search in memblock_next_valid_pfn() Jia He
2018-07-06  9:01   ` Jia He
2018-08-17  1:08   ` Pasha Tatashin
2018-08-17  1:08     ` Pasha Tatashin
2018-08-17  1:08     ` Pasha Tatashin
2018-08-17  1:22     ` Pasha Tatashin
2018-08-17  1:22       ` Pasha Tatashin
2018-08-17  1:22       ` Pasha Tatashin
2018-08-21  6:14     ` Jia He
2018-08-21  6:14       ` Jia He
2018-08-21  6:14       ` Jia He
2018-08-21 21:08       ` Andrew Morton
2018-08-21 21:08         ` Andrew Morton
2018-08-21 21:08         ` Andrew Morton
2018-08-22  1:38         ` Jia He
2018-08-22  1:38           ` Jia He
2018-08-22  1:38           ` Jia He
2018-07-06  9:01 ` [RESEND PATCH v10 4/6] mm/memblock: introduce memblock_search_pfn_regions() Jia He
2018-07-06  9:01   ` Jia He
2018-07-06  9:01 ` [RESEND PATCH v10 5/6] mm/memblock: introduce pfn_valid_region() Jia He
2018-07-06  9:01   ` Jia He
2018-07-06  9:01 ` [RESEND PATCH v10 6/6] mm: page_alloc: reduce unnecessary binary search in early_pfn_valid() Jia He
2018-07-06  9:01   ` Jia He
2018-08-17  1:35   ` Pasha Tatashin
2018-08-17  1:35     ` Pasha Tatashin
2018-08-17  1:35     ` Pasha Tatashin
2018-08-17  1:38     ` Pavel Tatashin
2018-08-17  1:38       ` Pavel Tatashin
2018-08-17  1:38       ` Pavel Tatashin
2018-08-17  5:38     ` Jia He
2018-08-17  5:38       ` Jia He
2018-08-17  5:38       ` Jia He
2018-07-06 22:41 ` [RESEND PATCH v10 0/6] optimize memblock_next_valid_pfn and early_pfn_valid on arm and arm64 Andrew Morton
2018-07-06 22:41   ` Andrew Morton
2018-08-15 22:34 ` Andrew Morton
2018-08-15 22:34   ` Andrew Morton
2018-08-16 19:02   ` Pasha Tatashin
2018-08-16 19:02     ` Pasha Tatashin
2018-08-16 19:02     ` Pasha Tatashin

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.