Re: [v5 0/6] optimize memory hotplug

2018-03-02 Thread Pavel Tatashin
Hi Michal,

Thank you for letting me know, its OK, the patches are in mm-tree, so
they are getting tested, and there is no rush.

Pavel


Re: [v5 0/6] optimize memory hotplug

2018-03-02 Thread Michal Hocko
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:
>   TRY1TRY2
> 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:
>   TRY1TRY2
> BEFORE: 848.74846.91
> AFTER:  783.07786.56
> 
> with-kvm:
>   TRY1TRY2
> BEFORE: 34.41 33.57
> AFTER:29.81   29.58
> 
> 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