From: Nick Piggin <npiggin@suse.de>
To: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Cc: Wu Fengguang <fengguang.wu@intel.com>,
Andrew Morton <akpm@linux-foundation.org>,
Andi Kleen <andi@firstfloor.org>,
linux-mm@kvack.org, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [RFC][PATCH] HWPOISON: remove the unsafe __set_page_locked()
Date: Sat, 26 Sep 2009 21:06:45 +0200 [thread overview]
Message-ID: <20090926190645.GB14368@wotan.suse.de> (raw)
In-Reply-To: <Pine.LNX.4.64.0909261115530.12927@sister.anvils>
On Sat, Sep 26, 2009 at 12:09:21PM +0100, Hugh Dickins wrote:
> On Sat, 26 Sep 2009, Wu Fengguang wrote:
>
> > The swap cache and page cache code assume that they 'own' the newly
> > allocated page and therefore can disregard the locking rules. However
> > now hwpoison can hit any time on any page.
> >
> > So use the safer lock_page()/trylock_page(). The main intention is not
> > to close such a small time window of memory corruption. But to avoid
> > kernel oops that may result from such races, and also avoid raising
> > false alerts in hwpoison stress tests.
> >
> > This in theory will slightly increase page cache/swap cache overheads,
> > however it seems to be too small to be measurable in benchmark.
>
> No.
>
> But I'd most certainly defer to Nick if he disagrees with me.
>
> I don't think anyone would want to quarrel very long over the swap
> and migration mods alone, but add_to_page_cache() is of a higher
> order of magnitude.
>
> I can't see any reason to surrender add_to_page_cache() optimizations
> to the remote possibility of hwpoison (infinitely remote for most of
> us); though I wouldn't myself want to run the benchmark to defend them.
Thanks Hugh, I definitely agree with you. And I agree the page lock
is a strange thing: it's only really well defined for some types of
pages (eg. pagecache pages), so it's not clear what it even really
means to take the page lock on non-pagecache or soon to be pagecache
pages.
We don't need to run benchmarks: it's unquestionably slower if we
have to go back to full atomic ops here. What we need to focus on
throughout the kernel is reducing atomic ops and unpredictable
branches rather than adding them, because our fastpaths are getting
monotonically slower *anyway*.
I would much prefer that hwpoison code first ensures it has a valid
pagecache page and is pinning it before it ever tries to do a
lock_page.
This is a bit tricky to do right now; you have a chicken and egg
problem between locking the page and pinning the inode mapping.
Possibly you could get the page ref, then check mapping != NULL,
and in that case lock the page. You'd just have to check ordering
on the other side... and if you do something crazy like that,
then please add comments in the core code saying that hwpoison
has added a particular dependency.
> I suspect if memory_failure() did something like:
> if (page->mapping)
> lock_page_nosync(p);
> then you'd be okay, perhaps with a few additional _inexpensive_
> tweaks here and there. With the "necessary" memory barriers?
> no, we probably wouldn't want to be adding any in hot paths.
Ah, you came to the same idea. Yes memory barriers in the fastpath
are no good, but you can effectively have a memory barrier on
all other CPUs by doing a synchronize_rcu() with no cost to the
fastpaths.
--
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 prev parent reply other threads:[~2009-09-26 19:06 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-26 3:15 Wu Fengguang
2009-09-26 3:49 ` Andi Kleen
2009-09-26 10:52 ` Wu Fengguang
2009-09-26 11:31 ` Wu Fengguang
2009-09-27 10:47 ` Wu Fengguang
2009-09-27 19:20 ` Nick Piggin
2009-09-28 8:44 ` Wu Fengguang
2009-09-29 5:16 ` Wu Fengguang
2009-10-01 2:02 ` Nick Piggin
2009-10-02 10:54 ` Wu Fengguang
2009-09-26 11:09 ` Hugh Dickins
2009-09-26 11:48 ` Wu Fengguang
2009-09-26 11:58 ` Hugh Dickins
2009-09-26 15:05 ` Andi Kleen
2009-09-26 19:12 ` Nick Piggin
2009-09-26 19:14 ` Nick Piggin
2009-09-26 19:06 ` Nick Piggin [this message]
2009-09-26 21:32 ` Andi Kleen
2009-09-27 16:26 ` Hugh Dickins
2009-09-27 19:22 ` Nick Piggin
2009-09-27 21:57 ` Hugh Dickins
2009-09-27 23:01 ` Nick Piggin
2009-09-28 1:19 ` Andi Kleen
2009-09-28 1:52 ` Wu Fengguang
2009-09-28 2:57 ` Nick Piggin
2009-09-28 4:11 ` Andi Kleen
2009-09-28 4:29 ` Nick Piggin
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=20090926190645.GB14368@wotan.suse.de \
--to=npiggin@suse.de \
--cc=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=fengguang.wu@intel.com \
--cc=hugh.dickins@tiscali.co.uk \
--cc=linux-kernel@vger.kernel.org \
--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