From: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Christoph Lameter <cl@linux-foundation.org>,
kosaki.motohiro@jp.fujitsu.com, heiko.carstens@de.ibm.com,
npiggin@suse.de, linux-kernel@vger.kernel.org, hugh@veritas.com,
torvalds@linux-foundation.org, riel@redhat.com,
linux-mm@kvack.org
Subject: Re: [RFC][PATCH] lru_add_drain_all() don't use schedule_on_each_cpu()
Date: Tue, 28 Oct 2008 17:29:26 -0400 [thread overview]
Message-ID: <1225229366.6343.74.camel@lts-notebook> (raw)
In-Reply-To: <20081028134536.9a7a5351.akpm@linux-foundation.org>
On Tue, 2008-10-28 at 13:45 -0700, Andrew Morton wrote:
> On Tue, 28 Oct 2008 09:25:31 -0500 (CDT)
> Christoph Lameter <cl@linux-foundation.org> wrote:
>
> > On Mon, 27 Oct 2008, Andrew Morton wrote:
> >
> > > Can we fix that instead?
> >
> > How about this fix?
> >
> >
> >
> > Subject: Move migrate_prep out from under mmap_sem
> >
> > Move the migrate_prep outside the mmap_sem for the following system calls
> >
> > 1. sys_move_pages
> > 2. sys_migrate_pages
> > 3. sys_mbind()
> >
> > It really does not matter when we flush the lru. The system is free to add
> > pages onto the lru even during migration which will make the page
> > migration either skip the page (mbind, migrate_pages) or return a busy
> > state (move_pages).
> >
>
> That looks nicer, thanks. Hopefully it fixes the
> lockdep-warning/deadlock...
I believe that we still have the lru_drain_all() called from the fault
path [with mmap_sem held] in clear_page_mlock(). We call
clear_page_mlock() on COW of an mlocked page in a VM_LOCKED vma to
ensure that we don't end up with an mlocked page in some other task's
non-VM_LOCKED vma where we'd then fail to munlock it later. During
development testing, Rik encountered scenarios where a page would
encounter a COW fault while it was still making its way to the LRU via
the pagevecs. So, he added the 'drain_all() and that seemed to avoid
this scenario.
Now, in the current upstream version of the unevictable mlocked pages
patches, we just count any mlocked pages [vmstat] that make their way to
free*page() instead of BUGging out, as we were doing earlier during
development. So, maybe we can drop the lru_drain_add()s in the
unevictable mlocked pages work and live with the occasional freed
mlocked page, or mlocked page on the active/inactive lists to be dealt
with by vmscan.
Comments?
Lee
>
> I guess we should document our newly discovered schedule_on_each_cpu()
> problems before we forget about it and later rediscover it.
WARNING: multiple messages have this Message-ID (diff)
From: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Christoph Lameter <cl@linux-foundation.org>,
kosaki.motohiro@jp.fujitsu.com, heiko.carstens@de.ibm.com,
npiggin@suse.de, linux-kernel@vger.kernel.org, hugh@veritas.com,
torvalds@linux-foundation.org, riel@redhat.com,
linux-mm@kvack.org
Subject: Re: [RFC][PATCH] lru_add_drain_all() don't use schedule_on_each_cpu()
Date: Tue, 28 Oct 2008 17:29:26 -0400 [thread overview]
Message-ID: <1225229366.6343.74.camel@lts-notebook> (raw)
In-Reply-To: <20081028134536.9a7a5351.akpm@linux-foundation.org>
On Tue, 2008-10-28 at 13:45 -0700, Andrew Morton wrote:
> On Tue, 28 Oct 2008 09:25:31 -0500 (CDT)
> Christoph Lameter <cl@linux-foundation.org> wrote:
>
> > On Mon, 27 Oct 2008, Andrew Morton wrote:
> >
> > > Can we fix that instead?
> >
> > How about this fix?
> >
> >
> >
> > Subject: Move migrate_prep out from under mmap_sem
> >
> > Move the migrate_prep outside the mmap_sem for the following system calls
> >
> > 1. sys_move_pages
> > 2. sys_migrate_pages
> > 3. sys_mbind()
> >
> > It really does not matter when we flush the lru. The system is free to add
> > pages onto the lru even during migration which will make the page
> > migration either skip the page (mbind, migrate_pages) or return a busy
> > state (move_pages).
> >
>
> That looks nicer, thanks. Hopefully it fixes the
> lockdep-warning/deadlock...
I believe that we still have the lru_drain_all() called from the fault
path [with mmap_sem held] in clear_page_mlock(). We call
clear_page_mlock() on COW of an mlocked page in a VM_LOCKED vma to
ensure that we don't end up with an mlocked page in some other task's
non-VM_LOCKED vma where we'd then fail to munlock it later. During
development testing, Rik encountered scenarios where a page would
encounter a COW fault while it was still making its way to the LRU via
the pagevecs. So, he added the 'drain_all() and that seemed to avoid
this scenario.
Now, in the current upstream version of the unevictable mlocked pages
patches, we just count any mlocked pages [vmstat] that make their way to
free*page() instead of BUGging out, as we were doing earlier during
development. So, maybe we can drop the lru_drain_add()s in the
unevictable mlocked pages work and live with the occasional freed
mlocked page, or mlocked page on the active/inactive lists to be dealt
with by vmscan.
Comments?
Lee
>
> I guess we should document our newly discovered schedule_on_each_cpu()
> problems before we forget about it and later rediscover it.
--
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:[~2008-10-28 21:29 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200810201659.m9KGxtFC016280@hera.kernel.org>
2008-10-21 15:13 ` mlock: mlocked pages are unevictable Heiko Carstens
2008-10-21 15:13 ` Heiko Carstens
2008-10-21 15:51 ` KOSAKI Motohiro
2008-10-21 15:51 ` KOSAKI Motohiro
2008-10-21 17:18 ` KOSAKI Motohiro
2008-10-21 17:18 ` KOSAKI Motohiro
2008-10-21 20:30 ` Peter Zijlstra
2008-10-21 20:30 ` Peter Zijlstra
2008-10-21 20:48 ` Peter Zijlstra
2008-10-21 20:48 ` Peter Zijlstra
2008-10-23 15:00 ` [RFC][PATCH] lru_add_drain_all() don't use schedule_on_each_cpu() KOSAKI Motohiro
2008-10-23 15:00 ` KOSAKI Motohiro
2008-10-24 1:28 ` Nick Piggin
2008-10-24 1:28 ` Nick Piggin
2008-10-24 4:54 ` KOSAKI Motohiro
2008-10-24 4:54 ` KOSAKI Motohiro
2008-10-24 4:55 ` Nick Piggin
2008-10-24 4:55 ` Nick Piggin
2008-10-24 5:29 ` KOSAKI Motohiro
2008-10-24 5:29 ` KOSAKI Motohiro
2008-10-24 5:34 ` Nick Piggin
2008-10-24 5:34 ` Nick Piggin
2008-10-24 5:51 ` KOSAKI Motohiro
2008-10-24 5:51 ` KOSAKI Motohiro
2008-10-24 19:20 ` Heiko Carstens
2008-10-24 19:20 ` Heiko Carstens
2008-10-26 11:06 ` Peter Zijlstra
2008-10-26 11:06 ` Peter Zijlstra
2008-10-26 13:37 ` KOSAKI Motohiro
2008-10-26 13:37 ` KOSAKI Motohiro
2008-10-26 13:49 ` Peter Zijlstra
2008-10-26 13:49 ` Peter Zijlstra
2008-10-26 15:51 ` KOSAKI Motohiro
2008-10-26 15:51 ` KOSAKI Motohiro
2008-10-26 16:17 ` Peter Zijlstra
2008-10-26 16:17 ` Peter Zijlstra
2008-10-27 3:14 ` KOSAKI Motohiro
2008-10-27 3:14 ` KOSAKI Motohiro
2008-10-27 7:56 ` Peter Zijlstra
2008-10-27 7:56 ` Peter Zijlstra
2008-10-27 8:03 ` KOSAKI Motohiro
2008-10-27 8:03 ` KOSAKI Motohiro
2008-10-27 10:42 ` KOSAKI Motohiro
2008-10-27 10:42 ` KOSAKI Motohiro
2008-10-27 21:55 ` Andrew Morton
2008-10-27 21:55 ` Andrew Morton
2008-10-28 14:25 ` Christoph Lameter
2008-10-28 14:25 ` Christoph Lameter
2008-10-28 20:45 ` Andrew Morton
2008-10-28 20:45 ` Andrew Morton
2008-10-28 21:29 ` Lee Schermerhorn [this message]
2008-10-28 21:29 ` Lee Schermerhorn
2008-10-29 7:17 ` KOSAKI Motohiro
2008-10-29 7:17 ` KOSAKI Motohiro
2008-10-29 12:40 ` Lee Schermerhorn
2008-11-06 0:14 ` [PATCH] get rid of lru_add_drain_all() in munlock path KOSAKI Motohiro
2008-11-06 0:14 ` KOSAKI Motohiro
2008-11-06 16:33 ` Kamalesh Babulal
2008-11-06 16:33 ` Kamalesh Babulal
2008-10-29 7:20 ` [RFC][PATCH] lru_add_drain_all() don't use schedule_on_each_cpu() KOSAKI Motohiro
2008-10-29 7:20 ` KOSAKI Motohiro
2008-10-29 8:21 ` KAMEZAWA Hiroyuki
2008-10-29 8:21 ` KAMEZAWA Hiroyuki
2008-11-05 9:51 ` Peter Zijlstra
2008-11-05 9:51 ` Peter Zijlstra
2008-11-05 9:55 ` KOSAKI Motohiro
2008-11-05 9:55 ` KOSAKI Motohiro
2008-10-22 15:28 ` mlock: mlocked pages are unevictable Lee Schermerhorn
2008-10-22 15:28 ` Lee Schermerhorn
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=1225229366.6343.74.camel@lts-notebook \
--to=lee.schermerhorn@hp.com \
--cc=akpm@linux-foundation.org \
--cc=cl@linux-foundation.org \
--cc=heiko.carstens@de.ibm.com \
--cc=hugh@veritas.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=npiggin@suse.de \
--cc=riel@redhat.com \
--cc=torvalds@linux-foundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.