From: Martin Schwidefsky <schwidefsky@de.ibm.com>
To: linux-mm@kvack.org
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Subject: [PATCH 0/2][RFC] mm callback for batched pte updates
Date: Tue, 5 Jul 2016 14:00:38 +0200 [thread overview]
Message-ID: <1467720040-4280-1-git-send-email-schwidefsky@de.ibm.com> (raw)
Hello,
there is another peculiarity on s390 I would like to exploit, the
range option of the IPTE instruction. This is an extension that allows
to set the invalid bit and clear the associated TLB entry for multiple
page table entries with a single instruction instead of doing an IPTE
for each pte. Each IPTE or IPTE-range is a quiescing operation, basically
an IPI to all other CPUs to coordinate the pte invalidation.
The IPTE-range is useful in mulit-threaded programs for a fork or a
mprotect/munmap/mremap affecting large memory areas where s390 may not
just do the pte update and clear the TLBs later.
In order to add the IPTE range optimization another mm callback is
needed in copy_page_range, unmap_page_range, move_page_tables, and
change_protection_range. The name is 'ptep_prepare_range', suggestions
for a better name are welcome.
With the two patches the update for the ptes inside a single page table
is done in two steps. First the prep_prepare_range invalidates all ptes,
this makes the address range inaccessible for all CPUs. The pages are
still marked as present and could be revalidated again if the page table
lock is released, but this does not happen with the current code.
The second step is the usual update loop over all single ptes.
Given a multi-threaded program a fork or a mprotect/munmap/mremap of a
large address range now needs fewer IPTEs / IPIs by a factor up to 256.
My mprotect stress test runs faster by an order of magnitude.
Martin Schwidefsky (2):
mm: add callback to prepare the update of multiple page table entries
s390/mm: use ipte range to invalidate multiple page table entries
arch/s390/include/asm/pgtable.h | 25 +++++++++++++++++++++++++
arch/s390/include/asm/setup.h | 2 ++
arch/s390/kernel/early.c | 2 ++
arch/s390/mm/pageattr.c | 2 +-
arch/s390/mm/pgtable.c | 17 +++++++++++++++++
include/asm-generic/pgtable.h | 4 ++++
mm/memory.c | 2 ++
mm/mprotect.c | 1 +
mm/mremap.c | 1 +
9 files changed, 55 insertions(+), 1 deletion(-)
--
2.6.6
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next reply other threads:[~2016-07-05 12:00 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-05 12:00 Martin Schwidefsky [this message]
2016-07-05 12:00 ` [PATCH 1/2] mm: add callback to prepare the update of multiple page table entries Martin Schwidefsky
2016-07-05 12:00 ` [PATCH 2/2] s390/mm: use ipte range to invalidate " Martin Schwidefsky
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=1467720040-4280-1-git-send-email-schwidefsky@de.ibm.com \
--to=schwidefsky@de.ibm.com \
--cc=linux-mm@kvack.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