From: William Lee Irwin III <wli@holomorphy.com>
To: Hugh Dickins <hugh@veritas.com>
Cc: Christoph Lameter <clameter@sgi.com>,
"David S. Miller" <davem@redhat.com>,
raybry@sgi.com, ak@muc.de, benh@kernel.crashing.org,
manfred@colorfullife.com, linux-ia64@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: page fault fastpath patch v2: fix race conditions, stats for 8,32 and 512 cpu SMP
Date: Wed, 18 Aug 2004 13:20:18 -0700 [thread overview]
Message-ID: <20040818202018.GC11200@holomorphy.com> (raw)
In-Reply-To: <Pine.LNX.4.44.0408181807500.15027-100000@localhost.localdomain>
On Wed, Aug 18, 2004 at 06:55:07PM +0100, Hugh Dickins wrote:
> It is interesting. I don't like it at all in its current state,
> #ifdef'ed special casing for one particular path through the code,
> but it does seem worth taking further.
> Just handling that one anonymous case is not worth it, when we know
> that the next day someone else from SGI will post a similar test
> which shows the same on file pages ;)
> Your ptep lock bit avoids collision with pte bits, but does it not
> also need to avoid collision with pte swap entry bits? And the
> pte_file bit too, at least once it's extended to nopage areas.
> I'm very suspicious of the way you just return VM_FAULT_MINOR when
> you find the lock bit already set. Yes, you can do that, but the
> lock bit is held right across the alloc_page_vma, so other threads
> trying to fault the same pte will be spinning back out to user and
> refaulting back into kernel while they wait: we'd usually use a
> waitqueue and wakeup with that kind of lock; or not hold it across,
> and make it a bitspin lock.
> It's a realistic case, which I guess your test program won't be trying.
> Feels livelocky to me, but I may be overreacting against: it's not as
> if you're changing the page_table_lock to be treated that way.
Both points are valid; it should retry in-kernel for the pte lock bit
and arrange to use a bit not used for swap (there are at least
PAGE_SHIFT of these on all 64-bit arches).
On Tue, 17 Aug 2004, Christoph Lameter wrote:
>> Introducing the page_table_lock even for a short time makes performance
>> drop to the level before the patch.
On Wed, Aug 18, 2004 at 06:55:07PM +0100, Hugh Dickins wrote:
> That's interesting, and disappointing.
> The main lesson I took from your patch (I think wli was hinting at
> the same) is that we ought now to question page_table_lock usage,
> should be possible to cut it a lot.
> I recall from exchanges with Dave McCracken 18 months ago that the
> page_table_lock is _almost_ unnecessary in rmap.c, should be possible
> to get avoid it there and in some other places.
> We take page_table_lock when making absent present and when making
> present absent: I like your observation that those are exclusive cases.
> But you've found that narrowing the width of the page_table_lock
> in a particular path does not help. You sound surprised, me too.
> Did you find out why that was?
It also protects against vma tree modifications in mainline, but rmap.c
shouldn't need it for vmas anymore, as the vma is rooted to the spot by
mapping->i_shared_lock for file pages and anon_vma->lock for anonymous.
On Tue, 17 Aug 2004, Christoph Lameter wrote:
>> - One could avoid pte locking by introducing a pte_cmpxchg. cmpxchg
>> seems to be supported by all ia64 and i386 cpus except the original 80386.
On Wed, Aug 18, 2004 at 06:55:07PM +0100, Hugh Dickins wrote:
> I do think this will be a more fruitful direction than pte locking:
> just looking through the arches for spare bits puts me off pte locking.
Fortunately, spare bits aren't strictly necessary, and neither is
cmpxchg. A single invalid value can serve in place of a bitflag. When
using such an invalid value, just xchg()'ing it and looping when the
invalid value is seen should suffice. This holds more generally for all
radix trees, not just pagetables, and happily xchg() or emulation
thereof is required by core code for all arches.
-- wli
next prev parent reply other threads:[~2004-08-18 20:21 UTC|newest]
Thread overview: 115+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-08-15 13:50 page fault fastpath: Increasing SMP scalability by introducing pte locks? Christoph Lameter
2004-08-15 20:09 ` David S. Miller
2004-08-15 22:58 ` Christoph Lameter
2004-08-15 23:58 ` David S. Miller
2004-08-16 0:11 ` Christoph Lameter
2004-08-16 1:56 ` David S. Miller
2004-08-16 3:29 ` Christoph Lameter
2004-08-16 7:00 ` Ray Bryant
2004-08-16 15:18 ` Christoph Lameter
2004-08-16 16:18 ` William Lee Irwin III
2004-08-16 14:39 ` William Lee Irwin III
2004-08-17 15:28 ` page fault fastpath patch v2: fix race conditions, stats for 8,32 and 512 cpu SMP Christoph Lameter
2004-08-17 15:37 ` Christoph Hellwig
2004-08-17 15:51 ` William Lee Irwin III
2004-08-18 17:55 ` Hugh Dickins
2004-08-18 20:20 ` William Lee Irwin III [this message]
2004-08-19 1:19 ` Christoph Lameter
[not found] ` <B6E8046E1E28D34EB815A11AC8CA3129027B679F@mtv-atc-605e--n.corp.sgi.com>
2004-08-24 4:43 ` page fault scalability patch v3: use cmpxchg, make rss atomic Christoph Lameter
2004-08-24 5:49 ` Christoph Lameter
2004-08-24 12:34 ` Matthew Wilcox
2004-08-24 14:47 ` Christoph Lameter
[not found] ` <B6E8046E1E28D34EB815A11AC8CA3129027B67A9@mtv-atc-605e--n.corp.sgi.com>
2004-08-26 15:20 ` page fault scalability patch v4: reduce page_table_lock use, atomic pmd,pgd handlin Christoph Lameter
[not found] ` <B6E8046E1E28D34EB815A11AC8CA3129027B67B4@mtv-atc-605e--n.corp.sgi.com>
2004-08-27 23:20 ` page fault scalability patch final : i386 tested, x86_64 support added Christoph Lameter
2004-08-27 23:36 ` Andi Kleen
2004-08-27 23:43 ` David S. Miller
2004-08-28 0:19 ` Christoph Lameter
2004-08-28 0:23 ` David S. Miller
2004-08-28 0:36 ` Andrew Morton
2004-08-28 0:40 ` David S. Miller
2004-08-28 1:05 ` Andi Kleen
2004-08-28 1:11 ` David S. Miller
2004-08-28 1:17 ` Andi Kleen
2004-08-28 1:02 ` Andi Kleen
2004-08-28 1:39 ` Andrew Morton
2004-08-28 2:08 ` Paul Mackerras
2004-08-28 3:32 ` Christoph Lameter
2004-08-28 3:42 ` Andrew Morton
2004-08-28 4:24 ` Christoph Lameter
2004-08-28 5:39 ` Andrew Morton
2004-08-28 5:58 ` Christoph Lameter
2004-08-28 6:03 ` William Lee Irwin III
2004-08-28 6:06 ` Andrew Morton
2004-08-30 17:02 ` Herbert Poetzl
2004-08-30 17:05 ` Andi Kleen
2004-08-28 13:19 ` Andi Kleen
2004-08-28 15:48 ` Matt Mackall
2004-09-01 4:13 ` Benjamin Herrenschmidt
2004-09-02 21:26 ` Andi Kleen
2004-09-02 21:55 ` David S. Miller
2004-09-01 18:03 ` Matthew Wilcox
2004-09-01 18:19 ` Andrew Morton
2004-09-01 19:06 ` William Lee Irwin III
2004-08-28 21:41 ` Daniel Phillips
2004-09-01 4:24 ` Benjamin Herrenschmidt
2004-09-01 5:22 ` David S. Miller
2004-09-01 16:43 ` Christoph Lameter
2004-09-01 23:09 ` Benjamin Herrenschmidt
[not found] ` <Pine.LNX.4.58.0409012140440.23186@schroedinger.engr.sgi.com>
[not found] ` <20040901215741.3538bbf4.davem@davemloft.net>
2004-09-02 5:18 ` William Lee Irwin III
2004-09-09 15:38 ` page fault scalability patch: V7 (+fallback for atomic page table ops) Christoph Lameter
2004-09-02 16:24 ` page fault scalability patch final : i386 tested, x86_64 support added Christoph Lameter
2004-09-02 20:10 ` David S. Miller
2004-09-02 21:02 ` Christoph Lameter
2004-09-02 21:07 ` David S. Miller
2004-09-18 23:23 ` page fault scalability patch V8: [0/7] Description Christoph Lameter
[not found] ` <B6E8046E1E28D34EB815A11AC8CA312902CD3243@mtv-atc-605e--n.corp.sgi.com>
2004-09-18 23:24 ` page fault scalability patch V8: [1/7] make mm->rss atomic Christoph Lameter
2004-09-18 23:26 ` page fault scalability patch V8: [2/7] avoid page_table_lock in handle_mm_fault Christoph Lameter
2004-09-19 9:04 ` Christoph Hellwig
2004-09-18 23:27 ` page fault scalability patch V8: [3/7] atomic pte operations for ia64 Christoph Lameter
2004-09-18 23:28 ` page fault scalability patch V8: [4/7] universally available cmpxchg on i386 Christoph Lameter
[not found] ` <200409191430.37444.vda@port.imtp.ilyichevsk.odessa.ua>
2004-09-19 12:11 ` Andi Kleen
2004-09-20 15:45 ` Christoph Lameter
[not found] ` <200409202043.00580.vda@port.imtp.ilyichevsk.odessa.ua>
2004-09-20 20:49 ` Christoph Lameter
2004-09-20 20:57 ` Andi Kleen
[not found] ` <200409211841.25507.vda@port.imtp.ilyichevsk.odessa.ua>
2004-09-21 15:45 ` Andi Kleen
[not found] ` <200409212306.38800.vda@port.imtp.ilyichevsk.odessa.ua>
2004-09-21 20:14 ` Andi Kleen
2004-09-23 7:17 ` Andy Lutomirski
2004-09-23 9:03 ` Andi Kleen
2004-09-27 19:06 ` page fault scalability patch V9: [0/7] overview Christoph Lameter
2004-10-15 19:02 ` page fault scalability patch V10: " Christoph Lameter
2004-10-15 19:03 ` page fault scalability patch V10: [1/7] make rss atomic Christoph Lameter
2004-10-15 19:04 ` page fault scalability patch V10: [2/7] defer/omit taking page_table_lock Christoph Lameter
2004-10-15 20:00 ` Marcelo Tosatti
2004-10-18 15:59 ` Christoph Lameter
2004-10-19 5:25 ` [revised] " Christoph Lameter
2004-10-15 19:05 ` page fault scalability patch V10: [3/7] IA64 atomic pte operations Christoph Lameter
2004-10-15 19:06 ` page fault scalability patch V10: [4/7] cmpxchg for 386 and 486 Christoph Lameter
2004-10-15 19:06 ` page fault scalability patch V10: [5/7] i386 atomic pte operations Christoph Lameter
2004-10-15 19:07 ` page fault scalability patch V10: [6/7] x86_64 " Christoph Lameter
2004-10-15 19:08 ` page fault scalability patch V10: [7/7] s/390 " Christoph Lameter
[not found] ` <B6E8046E1E28D34EB815A11AC8CA312902CD3282@mtv-atc-605e--n.corp.sgi.com>
2004-09-27 19:07 ` page fault scalability patch V9: [1/7] make mm->rss atomic Christoph Lameter
2004-09-27 19:08 ` page fault scalability patch V9: [2/7] defer/remove page_table_lock Christoph Lameter
2004-09-27 19:10 ` page fault scalability patch V9: [3/7] atomic pte operatios for ia64 Christoph Lameter
2004-09-27 19:10 ` page fault scalability patch V9: [4/7] generally available cmpxchg on i386 Christoph Lameter
2004-09-27 19:11 ` page fault scalability patch V9: [5/7] atomic pte operations for i386 Christoph Lameter
2004-09-27 19:12 ` page fault scalability patch V9: [6/7] atomic pte operations for x86_64 Christoph Lameter
2004-09-27 19:13 ` page fault scalability patch V9: [7/7] atomic pte operatiosn for s390 Christoph Lameter
2004-09-18 23:29 ` page fault scalability patch V8: [5/7] atomic pte operations for i386 Christoph Lameter
2004-09-18 23:30 ` page fault scalability patch V8: [6/7] atomic pte operations for x86_64 Christoph Lameter
2004-09-18 23:31 ` page fault scalability patch V8: [7/7] atomic pte operations for s390 Christoph Lameter
[not found] ` <200409191435.09445.vda@port.imtp.ilyichevsk.odessa.ua>
2004-09-20 15:44 ` Christoph Lameter
2004-08-15 22:38 ` page fault fastpath: Increasing SMP scalability by introducing pte locks? Benjamin Herrenschmidt
2004-08-16 17:28 ` Christoph Lameter
2004-08-17 8:01 ` Benjamin Herrenschmidt
[not found] <fa.ofiojek.hkeujs@ifi.uio.no>
[not found] ` <fa.o1kt2ua.1bm6n0c@ifi.uio.no>
2004-08-18 20:13 ` page fault fastpath patch v2: fix race conditions, stats for 8,32 and 512 cpu SMP Ray Bryant
2004-08-18 20:48 ` William Lee Irwin III
[not found] <2uexw-1Nn-1@gated-at.bofh.it>
[not found] ` <2uCTq-2wa-55@gated-at.bofh.it>
2004-08-18 23:50 ` Rajesh Venkatasubramanian
2004-08-19 0:01 ` William Lee Irwin III
2004-08-19 0:07 ` Rajesh Venkatasubramanian
2004-08-19 0:20 ` William Lee Irwin III
2004-08-19 3:19 ` Rajesh Venkatasubramanian
2004-08-19 3:31 ` William Lee Irwin III
2004-08-19 3:41 ` William Lee Irwin III
2004-08-23 22:00 ` Christoph Lameter
2004-08-23 23:25 ` Rajesh Venkatasubramanian
2004-08-23 23:35 ` Christoph Lameter
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=20040818202018.GC11200@holomorphy.com \
--to=wli@holomorphy.com \
--cc=ak@muc.de \
--cc=benh@kernel.crashing.org \
--cc=clameter@sgi.com \
--cc=davem@redhat.com \
--cc=hugh@veritas.com \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=manfred@colorfullife.com \
--cc=raybry@sgi.com \
/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