linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/11] x86/mm: Implement lockless pgd_alloc()/pgd_free()
@ 2015-09-22  6:23 Ingo Molnar
  2015-09-22  6:23 ` [PATCH 01/11] x86/mm/pat: Don't free PGD entries on memory unmap Ingo Molnar
                   ` (10 more replies)
  0 siblings, 11 replies; 32+ messages in thread
From: Ingo Molnar @ 2015-09-22  6:23 UTC (permalink / raw)
  To: linux-kernel, linux-mm
  Cc: Andy Lutomirski, Andrew Morton, Denys Vlasenko, Brian Gerst,
	Peter Zijlstra, Borislav Petkov, H. Peter Anvin, Linus Torvalds,
	Oleg Nesterov, Waiman Long, Thomas Gleixner

So this is the somewhat belated latest iteration of the series.
I (think I) fixed all correctness bugs in the code pointed out by Oleg.

The task list walk is still 'dumb', using for_each_process(), as none of
the call sites are performance critical.

Oleg, can you see any problems with this code?

Background:

Waiman Long reported 'pgd_lock' contention on high CPU count systems and proposed
moving pgd_lock on a separate cacheline to eliminate false sharing and to reduce
some of the lock bouncing overhead.

I think we can do much better: this series eliminates the pgd_list and makes
pgd_alloc()/pgd_free() lockless.

Now the lockless initialization of the PGD has a few preconditions, which the
initial part of the series implements:

 - no PGD clearing is allowed, only additions. This makes sense as a single PGD
   entry covers 512 GB of RAM so the 4K overhead per 0.5TB of RAM mapped is
   miniscule.

The patches after that convert existing pgd_list users to walk the task list.

PGD locking is kept intact: coherency guarantees between the CPA, vmalloc,
hotplug, etc. code are unchanged.

The final patches eliminate the pgd_list and thus make pgd_alloc()/pgd_free()
lockless.

The patches have been boot tested on 64-bit and 32-bit x86 systems.

Architectures not making use of the new facility are unaffected.

Thanks,

	Ingo

===
Ingo Molnar (11):
  x86/mm/pat: Don't free PGD entries on memory unmap
  x86/mm/hotplug: Remove pgd_list use from the memory hotplug code
  x86/mm/hotplug: Don't remove PGD entries in remove_pagetable()
  x86/mm/hotplug: Simplify sync_global_pgds()
  mm: Introduce arch_pgd_init_late()
  x86/virt/guest/xen: Remove use of pgd_list from the Xen guest code
  x86/mm: Remove pgd_list use from vmalloc_sync_all()
  x86/mm/pat/32: Remove pgd_list use from the PAT code
  x86/mm: Make pgd_alloc()/pgd_free() lockless
  x86/mm: Remove pgd_list leftovers
  x86/mm: Simplify pgd_alloc()

 arch/Kconfig                      |   9 +++
 arch/x86/Kconfig                  |   1 +
 arch/x86/include/asm/pgtable.h    |   3 -
 arch/x86/include/asm/pgtable_64.h |   3 +-
 arch/x86/mm/fault.c               |  32 +++++++---
 arch/x86/mm/init_64.c             |  92 ++++++++++++--------------
 arch/x86/mm/pageattr.c            |  40 ++++++------
 arch/x86/mm/pgtable.c             | 131 +++++++++++++++++++-------------------
 arch/x86/xen/mmu.c                |  45 +++++++++++--
 fs/exec.c                         |   3 +
 include/linux/mm.h                |   6 ++
 kernel/fork.c                     |  16 +++++
 12 files changed, 227 insertions(+), 154 deletions(-)

--
2.1.4


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

end of thread, other threads:[~2016-03-11  1:52 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-22  6:23 [PATCH 00/11] x86/mm: Implement lockless pgd_alloc()/pgd_free() Ingo Molnar
2015-09-22  6:23 ` [PATCH 01/11] x86/mm/pat: Don't free PGD entries on memory unmap Ingo Molnar
2015-09-22 17:41   ` Linus Torvalds
2015-09-22 18:03     ` Andy Lutomirski
2015-09-22  6:23 ` [PATCH 02/11] x86/mm/hotplug: Remove pgd_list use from the memory hotplug code Ingo Molnar
2015-09-22 17:48   ` Linus Torvalds
2015-09-23 11:44     ` Oleg Nesterov
2015-09-29  8:42       ` Ingo Molnar
2015-09-29 16:51         ` Oleg Nesterov
2015-09-22  6:23 ` [PATCH 03/11] x86/mm/hotplug: Don't remove PGD entries in remove_pagetable() Ingo Molnar
2015-10-06  3:35   ` Kamezawa Hiroyuki
2016-02-12 19:04   ` Andy Lutomirski
2016-03-10  6:45     ` Andy Lutomirski
2016-03-10  9:56       ` Ingo Molnar
2016-03-11  1:52         ` Andy Lutomirski
2015-09-22  6:23 ` [PATCH 04/11] x86/mm/hotplug: Simplify sync_global_pgds() Ingo Molnar
2015-09-22  6:23 ` [PATCH 05/11] mm: Introduce arch_pgd_init_late() Ingo Molnar
2015-09-22 17:55   ` Linus Torvalds
2015-09-22 18:00     ` Andy Lutomirski
2015-09-22 18:26       ` Linus Torvalds
2015-09-22 18:37         ` Andy Lutomirski
2015-09-22 18:44           ` Linus Torvalds
2015-09-22 18:52             ` Andy Lutomirski
2015-09-22  6:23 ` [PATCH 06/11] x86/virt/guest/xen: Remove use of pgd_list from the Xen guest code Ingo Molnar
2015-09-22 17:58   ` Linus Torvalds
2015-09-29  8:44     ` Ingo Molnar
2015-09-22  6:23 ` [PATCH 07/11] x86/mm: Remove pgd_list use from vmalloc_sync_all() Ingo Molnar
2015-09-22 17:59   ` Linus Torvalds
2015-09-22  6:23 ` [PATCH 08/11] x86/mm/pat/32: Remove pgd_list use from the PAT code Ingo Molnar
2015-09-22  6:23 ` [PATCH 09/11] x86/mm: Make pgd_alloc()/pgd_free() lockless Ingo Molnar
2015-09-22  6:23 ` [PATCH 10/11] x86/mm: Remove pgd_list leftovers Ingo Molnar
2015-09-22  6:23 ` [PATCH 11/11] x86/mm: Simplify pgd_alloc() Ingo Molnar

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).