linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [v3 0/4] mm: hugetlb: Skip initialization of gigantic tail struct pages if freed by HVO
@ 2023-08-25 11:18 Usama Arif
  2023-08-25 11:18 ` [v3 1/4] mm: hugetlb_vmemmap: Use nid of the head page to reallocate it Usama Arif
                   ` (3 more replies)
  0 siblings, 4 replies; 25+ messages in thread
From: Usama Arif @ 2023-08-25 11:18 UTC (permalink / raw)
  To: linux-mm, muchun.song, mike.kravetz, rppt
  Cc: linux-kernel, songmuchun, fam.zheng, liangma, punit.agrawal, Usama Arif

This series moves the boot time initialization of tail struct pages of a
gigantic page to after HVO is attempted. If HVO is successful, only
HUGETLB_VMEMMAP_RESERVE_SIZE / sizeof(struct page) struct pages need to
be initialized. For a 1G hugepage, this series avoid initialization of
262144 - 63 = 262081 struct pages per hugepage.

When tested on a 512G system (which can allocate max 500 1G hugepages), the
kexec-boot time with HVO and DEFERRED_STRUCT_PAGE_INIT enabled without this
patchseries to running init is 3.9 seconds. With this patch it is 1.2 seconds.
This represents an approximately 70% reduction in boot time and will
significantly reduce server downtime when using a large number of
gigantic pages.

Thanks,
Usama

[v2->v3]:
- (Muchun Song) skip prep of struct pages backing gigantic hugepages
at boot time only.
- (Muchun Song) move initialization of tail struct pages to after
HVO is attempted. This also means that the hugetlb command line parsing
does not need to be changed.

[v1->v2]:
- (Mike Rapoport) Code quality improvements (function names, arguments,
comments).

[RFC->v1]:
- (Mike Rapoport) Change from passing hugepage_size in
memblock_alloc_try_nid_raw for skipping struct page initialization to
using MEMBLOCK_RSRV_NOINIT flag

Usama Arif (4):
  mm: hugetlb_vmemmap: Use nid of the head page to reallocate it
  memblock: pass memblock_type to memblock_setclr_flag
  memblock: introduce MEMBLOCK_RSRV_NOINIT_VMEMMAP flag
  mm: hugetlb: Skip initialization of gigantic tail struct pages if
    freed by HVO

 include/linux/memblock.h | 10 ++++++++
 mm/hugetlb.c             | 52 ++++++++++++++++++++++++++++++++--------
 mm/hugetlb_vmemmap.c     |  2 +-
 mm/hugetlb_vmemmap.h     |  8 +++----
 mm/internal.h            |  3 +++
 mm/memblock.c            | 47 ++++++++++++++++++++++++++----------
 mm/mm_init.c             |  2 +-
 7 files changed, 95 insertions(+), 29 deletions(-)

-- 
2.25.1



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

end of thread, other threads:[~2023-08-31 10:28 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-25 11:18 [v3 0/4] mm: hugetlb: Skip initialization of gigantic tail struct pages if freed by HVO Usama Arif
2023-08-25 11:18 ` [v3 1/4] mm: hugetlb_vmemmap: Use nid of the head page to reallocate it Usama Arif
2023-08-28  7:15   ` Muchun Song
2023-08-28 18:25     ` Mike Kravetz
2023-08-25 11:18 ` [v3 2/4] memblock: pass memblock_type to memblock_setclr_flag Usama Arif
2023-08-28  7:16   ` Muchun Song
2023-08-28  7:37   ` Mike Rapoport
2023-08-28 18:39   ` Mike Kravetz
2023-08-25 11:18 ` [v3 3/4] memblock: introduce MEMBLOCK_RSRV_NOINIT_VMEMMAP flag Usama Arif
2023-08-28  7:26   ` Muchun Song
2023-08-28  7:47   ` Mike Rapoport
2023-08-28  8:52     ` Muchun Song
2023-08-28  9:09       ` Mike Rapoport
2023-08-28  9:18         ` Muchun Song
2023-08-25 11:18 ` [v3 4/4] mm: hugetlb: Skip initialization of gigantic tail struct pages if freed by HVO Usama Arif
2023-08-28 11:33   ` Muchun Song
2023-08-28 21:04     ` Mike Kravetz
2023-08-29  3:33       ` Muchun Song
2023-08-29  3:47         ` Mike Kravetz
2023-08-30 10:27     ` [External] " Usama Arif
2023-08-31  6:21       ` [External] " Muchun Song
2023-08-31  9:58         ` Mel Gorman
2023-08-31 10:01           ` Muchun Song
2023-08-31 10:28             ` Mel Gorman
2023-08-31  7:33       ` [External] " Mike Rapoport

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox