From: Linus Torvalds <torvalds@linux-foundation.org>
To: Rik van Riel <riel@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Mel Gorman <mel@csn.ul.ie>,
Andrea Arcangeli <aarcange@redhat.com>,
Minchan Kim <minchan.kim@gmail.com>,
Linux-MM <linux-mm@kvack.org>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 4/5] always lock the root (oldest) anon_vma
Date: Wed, 12 May 2010 14:55:33 -0700 (PDT) [thread overview]
Message-ID: <alpine.LFD.2.00.1005121441350.3711@i5.linux-foundation.org> (raw)
In-Reply-To: <20100512134029.36c286c4@annuminas.surriel.com>
On Wed, 12 May 2010, Rik van Riel wrote:
>
> Always (and only) lock the root (oldest) anon_vma whenever we do
> something in an anon_vma. The recently introduced anon_vma scalability
> is due to the rmap code scanning only the VMAs that need to be scanned.
> Many common operations still took the anon_vma lock on the root
> anon_vma, so always taking that lock is not expected to introduce any
> scalability issues.
Ack for this (and the whole series, for that matter - looks fine to me).
Somebody should run the performance numbers with AIM7 or whatever, just to
check that the lock isn't a problem, but this approach certainly gets rid
of all my objections about crazy locking.
That patch #5 is pretty ugly, though. And I think this part (in
drop_anon_vma) is approaching being wrong:
+ if (atomic_dec_and_lock(&anon_vma->ksm_refcount, &anon_vma->root->lock)) {
because I do _not_ believe that you need to decrement that ksm_refcount
under the lock, do you? It's just a refcount, isn't it?
Wouldn't it be sufficient to do
if (atomic_dec_and_test(&anon_vma->ksm_refcount)) {
anon_vma_lock(anon_vma);
instead? The "atomic_dec_and_lock()" semantics are _much_ stricter than a
regular "decrement and test and then lock", and that strictness means that
it's way more complicated and expensive. So if you don't need the
semantics, you shouldn't use them.
But maybe we do need those "lock before decrementing to zero" semantics.
The old ksm.c code had it too, although I suspect it's just being
confused.
Linus
--
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:[~2010-05-12 21:58 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-12 17:38 [PATCH 0/5] always lock the root anon_vma Rik van Riel
2010-05-12 17:39 ` [PATCH 1/5] rename anon_vma_lock to vma_lock_anon_vma Rik van Riel
2010-05-12 20:57 ` Mel Gorman
2010-05-13 0:30 ` KAMEZAWA Hiroyuki
2010-05-12 17:39 ` [PATCH 3/5] track the root (oldest) anon_vma Rik van Riel
2010-05-12 20:59 ` Mel Gorman
2010-05-12 21:01 ` Rik van Riel
2010-05-13 0:38 ` KAMEZAWA Hiroyuki
2010-05-13 2:25 ` Rik van Riel
2010-05-14 0:04 ` KAMEZAWA Hiroyuki
2010-05-12 17:40 ` [PATCH 4/5] always lock " Rik van Riel
2010-05-12 21:02 ` Mel Gorman
2010-05-12 21:08 ` Rik van Riel
2010-05-13 9:54 ` Mel Gorman
2010-05-13 14:33 ` [PATCH -v2 " Rik van Riel
2010-05-13 21:09 ` Andrew Morton
2010-05-13 22:50 ` Rik van Riel
2010-05-14 9:33 ` Mel Gorman
2010-05-26 4:00 ` Rik van Riel
2010-05-26 4:15 ` Andrew Morton
2010-05-26 5:46 ` james toy
2010-06-01 0:57 ` james toy
2010-05-26 15:24 ` [PATCH -v2 0/5] always lock the root anon_vma Rik van Riel
2010-05-26 15:25 ` [PATCH 1/5] rename anon_vma_lock to vma_lock_anon_vma Rik van Riel
2010-05-26 17:25 ` Linus Torvalds
2010-05-26 19:01 ` Rik van Riel
2010-05-26 19:25 ` Linus Torvalds
2010-05-26 19:35 ` Rik van Riel
2010-05-26 15:25 ` [PATCH 2/5] change direct call of spin_lock(anon_vma->lock) to inline function Rik van Riel
2010-05-26 15:26 ` [PATCH 3/5] track the root (oldest) anon_vma Rik van Riel
2010-05-26 15:27 ` [PATCH 4/5] always lock " Rik van Riel
2010-05-26 15:27 ` [PATCH 5/5] extend KSM refcounts to the anon_vma root Rik van Riel
2010-05-12 21:55 ` Linus Torvalds [this message]
2010-05-12 22:18 ` [PATCH 4/5] always lock the root (oldest) anon_vma Rik van Riel
2010-05-12 22:26 ` Linus Torvalds
2010-05-12 17:41 ` [PATCH 5/5] extend KSM refcounts to the anon_vma root Rik van Riel
2010-05-12 21:07 ` Mel Gorman
2010-05-12 21:09 ` Rik van Riel
2010-05-13 11:26 ` Mel Gorman
2010-05-13 13:11 ` Rik van Riel
2010-05-13 13:24 ` Mel Gorman
2010-05-13 14:34 ` [PATCH -v2 " Rik van Riel
2010-05-19 1:05 ` Andrea Arcangeli
2010-05-12 17:41 ` [PATCH 2/5] change direct call of spin_lock(anon_vma->lock) to inline function Rik van Riel
2010-05-12 20:58 ` Mel Gorman
2010-05-13 0:32 ` KAMEZAWA Hiroyuki
2010-05-20 22:42 ` [PATCH 6/5] adjust mm_take_all_locks to anon-vma-root locking Andrea Arcangeli
2010-05-20 23:07 ` Rik van Riel
2010-05-26 19:38 [PATCH -v3 0/5] always lock the root anon_vma Rik van Riel
2010-05-26 19:40 ` [PATCH 4/5] always lock the root (oldest) anon_vma Rik van Riel
2010-05-26 20:36 ` Larry Woodman
2010-05-27 0:57 ` KAMEZAWA Hiroyuki
2010-05-27 13:55 ` Minchan Kim
2010-05-27 17:48 ` Mel Gorman
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=alpine.LFD.2.00.1005121441350.3711@i5.linux-foundation.org \
--to=torvalds@linux-foundation.org \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mel@csn.ul.ie \
--cc=minchan.kim@gmail.com \
--cc=riel@redhat.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