linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Pavel Tatashin <pasha.tatashin@oracle.com>
To: steven.sistare@oracle.com, daniel.m.jordan@oracle.com,
	akpm@linux-foundation.org, mgorman@techsingularity.net,
	mhocko@suse.com, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org,
	vbabka@suse.cz, bharata@linux.vnet.ibm.com, tglx@linutronix.de,
	mingo@redhat.com, hpa@zytor.com, x86@kernel.org,
	dan.j.williams@intel.com, kirill.shutemov@linux.intel.com,
	bhe@redhat.com, alexander.levin@microsoft.com
Subject: [v6 0/6] optimize memory hotplug
Date: Tue,  3 Apr 2018 14:16:37 -0400	[thread overview]
Message-ID: <20180403181643.28127-1-pasha.tatashin@oracle.com> (raw)

Changelog:
	v6 - v5
	- Improved "mm: add uninitialized struct page poisoning sanity
	  checking". Fixed __dump_page() to detect that page is poisoned.
	  This should fix a panic printing issue reported by Sasha Levin.

	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/debug.c                 | 14 +++++++++++---
 mm/memblock.c              |  2 +-
 mm/memory_hotplug.c        | 44 +++++++++++++++++---------------------------
 mm/page_alloc.c            | 28 ++++++++++------------------
 mm/sparse.c                |  8 +++++++-
 12 files changed, 138 insertions(+), 88 deletions(-)

-- 
2.16.3

             reply	other threads:[~2018-04-03 18:16 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-03 18:16 Pavel Tatashin [this message]
2018-04-03 18:16 ` [v6 1/6] mm/memory_hotplug: enforce block size aligned range check Pavel Tatashin
2018-04-03 18:16 ` [v6 2/6] x86/mm/memory_hotplug: determine block size based on the end of boot memory Pavel Tatashin
2018-04-03 18:16 ` [v6 3/6] mm: add uninitialized struct page poisoning sanity checking Pavel Tatashin
2018-04-03 18:16 ` [v6 4/6] mm/memory_hotplug: optimize probe routine Pavel Tatashin
2018-04-03 18:16 ` [v6 5/6] mm/memory_hotplug: don't read nid from struct page during hotplug Pavel Tatashin
2018-04-03 18:16 ` [v6 6/6] mm/memory_hotplug: optimize memory hotplug Pavel Tatashin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180403181643.28127-1-pasha.tatashin@oracle.com \
    --to=pasha.tatashin@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=alexander.levin@microsoft.com \
    --cc=bharata@linux.vnet.ibm.com \
    --cc=bhe@redhat.com \
    --cc=dan.j.williams@intel.com \
    --cc=daniel.m.jordan@oracle.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hpa@zytor.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@techsingularity.net \
    --cc=mhocko@suse.com \
    --cc=mingo@redhat.com \
    --cc=steven.sistare@oracle.com \
    --cc=tglx@linutronix.de \
    --cc=vbabka@suse.cz \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).