From: Minchan Kim <minchan@kernel.org>
To: John Stultz <john.stultz@linaro.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Android Kernel Team <kernel-team@android.com>,
Robert Love <rlove@google.com>, Mel Gorman <mel@csn.ul.ie>,
Hugh Dickins <hughd@google.com>,
Dave Hansen <dave@linux.vnet.ibm.com>,
Rik van Riel <riel@redhat.com>,
Dmitry Adamushko <dmitry.adamushko@gmail.com>,
Dave Chinner <david@fromorbit.com>, Neil Brown <neilb@suse.de>,
Andrea Righi <andrea@betterlinux.com>,
Andrea Arcangeli <aarcange@redhat.com>,
"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>,
Mike Hommey <mh@glandium.org>, Taras Glek <tglek@mozilla.com>,
Dhaval Giani <dgiani@mozilla.com>, Jan Kara <jack@suse.cz>,
KOSAKI Motohiro <kosaki.motohiro@gmail.com>,
Michel Lespinasse <walken@google.com>,
"linux-mm@kvack.org" <linux-mm@kvack.org>
Subject: Re: [PATCH 4/8] vrange: Clear volatility on new mmaps
Date: Fri, 14 Jun 2013 09:21:32 +0900 [thread overview]
Message-ID: <20130614002132.GC4533@bbox> (raw)
In-Reply-To: <51BA593E.9000102@linaro.org>
Hello John,
On Thu, Jun 13, 2013 at 04:43:58PM -0700, John Stultz wrote:
> On 06/12/2013 11:28 PM, Minchan Kim wrote:
> >Hey John,
> >
> >On Tue, Jun 11, 2013 at 09:22:47PM -0700, John Stultz wrote:
> >>At lsf-mm, the issue was brought up that there is a precedence with
> >>interfaces like mlock, such that new mappings in a pre-existing range
> >>do no inherit the mlock state.
> >>
> >>This is mostly because mlock only modifies the existing vmas, and so
> >>any new mmaps create new vmas, which won't be mlocked.
> >>
> >>Since volatility is not stored in the vma (for good cause, specfically
> >>as we'd have to have manage file volatility differently from anonymous
> >>and we're likely to manage volatility on small chunks of memory, which
> >>would cause lots of vma splitting and churn), this patch clears volatilty
> >>on new mappings, to ensure that we don't inherit volatility if memory in
> >>an existing volatile range is unmapped and then re-mapped with something
> >>else.
> >>
> >>Thus, this patch forces any volatility to be cleared on mmap.
> >If we have lots of node on vroot but it doesn't include newly mmmaping
> >vma range, it's purely unnecessary cost and that's never what we want.
> >
> >>XXX: We expect this patch to be not well loved by mm folks, and are open
> >>to alternative methods here. Its more of a place holder to address
> >>the issue from lsf-mm and hopefully will spur some further discussion.
> >Another idea is we can add "bool is_vrange" in struct vm_area_struct.
> >It is protected by vrange_lock. The scenario is following as,
> >
> >When do_vrange is called with VRANGE_VOLATILE, it iterates vmas
> >and mark the vma->is_vrange to true. So, we can avoid tree traversal
> >if the is_vrange is false when munmap is called and newly mmaped vma
> >doesn't need to clear any volatility.
>
> We could look further into this approach if folks think its the best
> way to go. Though it has the downside of having the split the vmas
> when we're dealing with a large number of smallish objects. Also
We don't need to split vma, which I don't really want.
I meant followig as
1)
0x100000 0x10000000
| VMA : isvrange = false |
2) vrange(0x200000, 0x100000, VRANGE_VOLATILE)
0x100000 0x10000000
| VMA : isvrange = true |
vroot
/
node 1
2) vrange(0x400000, 0x100000, VRANGE_VOLATILE)
0x100000 0x10000000
| VMA : isvrange = true |
vroot
/ \
node 1 node 2
3) unmap(0x400000, 0x100000, VRANGE_NOVOLATILE)
sys_munmap:
if (vma->is_vrange) {
vrange_clear(0x400000, 0x400000 + 0x100000 -1);
if (vma_vrange_all_clear(vma)
vma->isvrange = false;
}
0x100000 0x10000000
| VMA : isvrange = true |
vroot
/
node 1
3) unmap(0x200000, 0x100000, VRANGE_NOVOLATILE)
sys_munmap:
if (vma->is_vrange) {
vrange_clear(0x200000, 0x200000 + 0x100000 -1);
if (vma_vrange_all_clear(vma)
vma->isvrange = false;
}
0x100000 0x10000000
| VMA : isvrange = false |
vroot
/ \
4) purging path
bool really_vrange_page(page *page)
{
return __vrange_address(vroot, startofpage, endofpage);
}
shrink_page_list
..
..
vma = rmap_from_page(page);
if (vma->is_vrange) {
/*
* vma's is_vrange could have false positive
* so that we should check it.
*/
if (really_vrange_page(page))
purge_page(page);
}
..
..
So we can reduce unnecessary vroot traverse without vma splitting.
> we'd be increasing the vma_struct size for everyone, even if no one
> is using volatile ranges, which may be a bigger concern.
I think vma is not a sensitive about size and historically, we have
been added a variable easily. Of course, another ideas which don't
need to increase vma size are welcome but IMHO, it'a good compromise
between performance and memoryfootprint.
>
> Also it means we'd be managing anonymous and file volatility with
> different structures (though that's not the end of the world).
volatility still is kept in vrange->purged.
Do I miss something?
>
> thanks
> -john
>
> --
> 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>
--
Kind regards,
Minchan Kim
--
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:[~2013-06-14 0:21 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-12 4:22 [PATCH 0/8] Volatile Ranges (v8?) John Stultz
2013-06-12 4:22 ` [PATCH 1/8] vrange: Add basic data structure and functions John Stultz
2013-06-12 4:22 ` [PATCH 2/8] vrange: Add vrange support for file address_spaces John Stultz
2013-06-12 4:22 ` [PATCH 3/8] vrange: Add vrange support to mm_structs John Stultz
2013-06-12 4:22 ` [PATCH 4/8] vrange: Clear volatility on new mmaps John Stultz
2013-06-13 6:28 ` Minchan Kim
2013-06-13 23:43 ` John Stultz
2013-06-14 0:21 ` Minchan Kim [this message]
2013-06-12 4:22 ` [PATCH 5/8] vrange: Add new vrange(2) system call John Stultz
2013-06-12 6:48 ` NeilBrown
2013-06-12 18:47 ` John Stultz
2013-06-20 21:05 ` Dhaval Giani
2013-06-12 4:22 ` [PATCH 6/8] vrange: Add GFP_NO_VRANGE allocation flag John Stultz
2013-06-12 4:22 ` [PATCH 7/8] vrange: Add method to purge volatile ranges John Stultz
2013-06-17 7:13 ` Minchan Kim
2013-06-17 7:24 ` Minchan Kim
2013-06-19 4:34 ` Minchan Kim
2013-10-01 14:00 ` Krzysztof Kozlowski
2013-10-02 1:32 ` Minchan Kim
2013-06-12 4:22 ` [PATCH 8/8] vrange: Send SIGBUS when user try to access purged page John Stultz
2013-06-19 4:36 ` Minchan Kim
2013-06-17 16:24 ` [PATCH 0/8] Volatile Ranges (v8?) Dhaval Giani
2013-06-18 4:11 ` Minchan Kim
2013-06-18 16:59 ` Dhaval Giani
2013-06-19 4:41 ` Minchan Kim
2013-06-19 18:36 ` Dhaval Giani
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=20130614002132.GC4533@bbox \
--to=minchan@kernel.org \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=andrea@betterlinux.com \
--cc=aneesh.kumar@linux.vnet.ibm.com \
--cc=dave@linux.vnet.ibm.com \
--cc=david@fromorbit.com \
--cc=dgiani@mozilla.com \
--cc=dmitry.adamushko@gmail.com \
--cc=hughd@google.com \
--cc=jack@suse.cz \
--cc=john.stultz@linaro.org \
--cc=kernel-team@android.com \
--cc=kosaki.motohiro@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mel@csn.ul.ie \
--cc=mh@glandium.org \
--cc=neilb@suse.de \
--cc=riel@redhat.com \
--cc=rlove@google.com \
--cc=tglek@mozilla.com \
--cc=walken@google.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;
as well as URLs for NNTP newsgroup(s).