Re: [v5 0/6] optimize memory hotplug
From: Michal Hocko
Date: Fri Mar 02 2018 - 08:05:51 EST
Hi,
I will not get to review this version before Mar 12 because I am moving
and will be without access to my email and I am pretty sure the time
will not work well for me either.
Sorry about that.
On Tue 27-02-18 22:03:02, Pavel Tatashin wrote:
> Changelog:
> v5 - v4
> - Addressed more comments from Ingo Molnar and Michal Hocko.
> - In the patch "optimize memory hotplug" we are now using
> struct memory_block to hold node id as suggested by Michal.
> - In the patch "don't read nid from struct page during hotplug"
> renamed register_new_memory() to hotplug_memory_register() as
> suggested by Ingo. Also, in this patch replaced the
> description with the one provided by Michal.
> - Fixed other spelling issues found by Ingo.
>
> v3 - v4
> Addressed comments from Ingo Molnar and from Michal Hocko
> Split 4th patch into three patches
> Instead of using section table to save node ids, saving node id in
> the first page of every section.
>
> v2 - v3
> Fixed two issues found during testing
> Addressed Kbuild warning reports
>
> v1 - v2
> Added struct page poisoning checking in order to verify that
> struct pages are never accessed until initialized during memory
> hotplug
>
> This patchset:
> - Improves hotplug performance by eliminating a number of
> struct page traverses during memory hotplug.
>
> - Fixes some issues with hotplugging, where boundaries
> were not properly checked. And on x86 block size was not properly aligned
> with end of memory
>
> - Also, potentially improves boot performance by eliminating condition from
> __init_single_page().
>
> - Adds robustness by verifying that that struct pages are correctly
> poisoned when flags are accessed.
>
> The following experiments were performed on Xeon(R)
> CPU E7-8895 v3 @ 2.60GHz with 1T RAM:
>
> booting in qemu with 960G of memory, time to initialize struct pages:
>
> no-kvm:
> TRY1 TRY2
> BEFORE: 39.433668 39.39705
> AFTER: 36.903781 36.989329
>
> with-kvm:
> BEFORE: 10.977447 11.103164
> AFTER: 10.929072 10.751885
>
> Hotplug 896G memory:
> no-kvm:
> TRY1 TRY2
> BEFORE: 848.740000 846.910000
> AFTER: 783.070000 786.560000
>
> with-kvm:
> TRY1 TRY2
> BEFORE: 34.410000 33.57
> AFTER: 29.810000 29.580000
>
> Pavel Tatashin (6):
> mm/memory_hotplug: enforce block size aligned range check
> x86/mm/memory_hotplug: determine block size based on the end of boot
> memory
> mm: add uninitialized struct page poisoning sanity checking
> mm/memory_hotplug: optimize probe routine
> mm/memory_hotplug: don't read nid from struct page during hotplug
> mm/memory_hotplug: optimize memory hotplug
>
> arch/x86/mm/init_64.c | 33 +++++++++++++++++++++++++++++----
> drivers/base/memory.c | 40 ++++++++++++++++++++++------------------
> drivers/base/node.c | 24 +++++++++++++++++-------
> include/linux/memory.h | 3 ++-
> include/linux/mm.h | 4 +++-
> include/linux/node.h | 4 ++--
> include/linux/page-flags.h | 22 +++++++++++++++++-----
> mm/memblock.c | 2 +-
> mm/memory_hotplug.c | 44 +++++++++++++++++---------------------------
> mm/page_alloc.c | 28 ++++++++++------------------
> mm/sparse.c | 8 +++++++-
> 11 files changed, 127 insertions(+), 85 deletions(-)
>
> --
> 2.16.2
>
--
Michal Hocko
SUSE Labs