From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
To: Dave Hansen <dave@sr71.net>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Andrea Arcangeli <aarcange@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Al Viro <viro@zeniv.linux.org.uk>,
Hugh Dickins <hughd@google.com>,
Wu Fengguang <fengguang.wu@intel.com>, Jan Kara <jack@suse.cz>,
Mel Gorman <mgorman@suse.de>,
linux-mm@kvack.org, Andi Kleen <ak@linux.intel.com>,
Matthew Wilcox <matthew.r.wilcox@intel.com>,
"Kirill A. Shutemov" <kirill@shutemov.name>,
Hillf Danton <dhillf@gmail.com>,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCHv4 09/39] thp, mm: introduce mapping_can_have_hugepages() predicate
Date: Wed, 22 May 2013 16:51:12 +0300 (EEST) [thread overview]
Message-ID: <20130522135112.32C3EE0090@blue.fi.intel.com> (raw)
In-Reply-To: <519BCACD.4020106@sr71.net>
Dave Hansen wrote:
> On 05/11/2013 06:23 PM, Kirill A. Shutemov wrote:
> > From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
> >
> > Returns true if mapping can have huge pages. Just check for __GFP_COMP
> > in gfp mask of the mapping for now.
> >
> > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> > ---
> > include/linux/pagemap.h | 12 ++++++++++++
> > 1 file changed, 12 insertions(+)
> >
> > diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
> > index e3dea75..28597ec 100644
> > --- a/include/linux/pagemap.h
> > +++ b/include/linux/pagemap.h
> > @@ -84,6 +84,18 @@ static inline void mapping_set_gfp_mask(struct address_space *m, gfp_t mask)
> > (__force unsigned long)mask;
> > }
> >
> > +static inline bool mapping_can_have_hugepages(struct address_space *m)
> > +{
> > + if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE_PAGECACHE)) {
> > + gfp_t gfp_mask = mapping_gfp_mask(m);
> > + /* __GFP_COMP is key part of GFP_TRANSHUGE */
> > + return !!(gfp_mask & __GFP_COMP) &&
> > + transparent_hugepage_pagecache();
> > + }
> > +
> > + return false;
> > +}
>
> transparent_hugepage_pagecache() already has the same IS_ENABLED()
> check, Is it really necessary to do it again here?
>
> IOW, can you do this?
>
> > +static inline bool mapping_can_have_hugepages(struct address_space
> > +{
> > + gfp_t gfp_mask = mapping_gfp_mask(m);
> if (!transparent_hugepage_pagecache())
> return false;
> > + /* __GFP_COMP is key part of GFP_TRANSHUGE */
> > + return !!(gfp_mask & __GFP_COMP);
> > +}
Yeah, it's better.
> I know we talked about this in the past, but I've forgotten already.
> Why is this checking for __GFP_COMP instead of GFP_TRANSHUGE?
It's up to filesystem what gfp mask to use. For example ramfs's pages are
not movable currently. So, we check only part which matters.
> Please flesh out the comment.
I'll make the comment in code a bit more descriptive.
> Also, what happens if "transparent_hugepage_flags &
> (1<<TRANSPARENT_HUGEPAGE_PAGECACHE)" becomes false at runtime and you
> have some already-instantiated huge page cache mappings around? Will
> things like mapping_align_mask() break?
We will not touch existing huge pages in existing VMAs. The userspace can
use them until they will be unmapped or split. It's consistent with anon
THP pages.
If anybody mmap() the file after disabling the feature, we will not
setup huge pages anymore: transparent_hugepage_enabled() check in
handle_mm_fault will fail and the page fill be split.
mapping_align_mask() is part of mmap() call path, so there's only chance
that we will get VMA aligned more strictly then needed. Nothing to worry
about.
--
Kirill A. Shutemov
--
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-05-22 13:48 UTC|newest]
Thread overview: 121+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-12 1:22 [PATCHv4 00/39] Transparent huge page cache Kirill A. Shutemov
2013-05-12 1:22 ` [PATCHv4 01/39] mm: drop actor argument of do_generic_file_read() Kirill A. Shutemov
2013-05-21 18:22 ` Dave Hansen
2013-05-12 1:22 ` [PATCHv4 02/39] block: implement add_bdi_stat() Kirill A. Shutemov
2013-05-21 18:25 ` Dave Hansen
2013-05-22 11:06 ` Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 03/39] mm: implement zero_huge_user_segment and friends Kirill A. Shutemov
2013-05-23 10:32 ` Hillf Danton
2013-05-23 11:32 ` Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 04/39] radix-tree: implement preload for multiple contiguous elements Kirill A. Shutemov
2013-05-21 18:58 ` Dave Hansen
2013-05-22 12:03 ` Kirill A. Shutemov
2013-05-22 14:20 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 05/39] memcg, thp: charge huge cache pages Kirill A. Shutemov
2013-05-21 19:04 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 06/39] thp, mm: avoid PageUnevictable on active/inactive lru lists Kirill A. Shutemov
2013-05-21 19:17 ` Dave Hansen
2013-05-22 12:34 ` Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 07/39] thp, mm: basic defines for transparent huge page cache Kirill A. Shutemov
2013-05-23 10:36 ` Hillf Danton
2013-05-23 15:49 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 08/39] thp: compile-time and sysfs knob for thp pagecache Kirill A. Shutemov
2013-05-22 11:19 ` Hillf Danton
2013-05-12 1:23 ` [PATCHv4 09/39] thp, mm: introduce mapping_can_have_hugepages() predicate Kirill A. Shutemov
2013-05-21 19:28 ` Dave Hansen
2013-05-22 13:51 ` Kirill A. Shutemov [this message]
2013-05-22 15:31 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 10/39] thp: account anon transparent huge pages into NR_ANON_PAGES Kirill A. Shutemov
2013-05-21 19:32 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 11/39] thp: represent file thp pages in meminfo and friends Kirill A. Shutemov
2013-05-21 19:34 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 12/39] thp, mm: rewrite add_to_page_cache_locked() to support huge pages Kirill A. Shutemov
2013-05-21 19:59 ` Dave Hansen
2013-05-23 14:36 ` Kirill A. Shutemov
2013-05-23 16:00 ` Dave Hansen
2013-05-28 11:59 ` Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 13/39] mm: trace filemap: dump page order Kirill A. Shutemov
2013-05-21 19:35 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 14/39] thp, mm: rewrite delete_from_page_cache() to support huge pages Kirill A. Shutemov
2013-05-21 20:14 ` Dave Hansen
2013-05-28 12:28 ` Kirill A. Shutemov
2013-06-07 15:10 ` Kirill A. Shutemov
2013-06-07 15:56 ` Dave Hansen
2013-06-10 17:41 ` Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 15/39] thp, mm: trigger bug in replace_page_cache_page() on THP Kirill A. Shutemov
2013-05-21 20:17 ` Dave Hansen
2013-05-28 12:53 ` Kirill A. Shutemov
2013-05-28 16:33 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 16/39] thp, mm: locking tail page is a bug Kirill A. Shutemov
2013-05-21 20:18 ` Dave Hansen
2013-05-22 14:12 ` Kirill A. Shutemov
2013-05-22 14:53 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 17/39] thp, mm: handle tail pages in page_cache_get_speculative() Kirill A. Shutemov
2013-05-21 20:49 ` Dave Hansen
2013-06-27 12:40 ` Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 18/39] thp, mm: add event counters for huge page alloc on write to a file Kirill A. Shutemov
2013-05-21 20:54 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 19/39] thp, mm: allocate huge pages in grab_cache_page_write_begin() Kirill A. Shutemov
2013-05-21 21:14 ` Dave Hansen
2013-05-30 13:20 ` Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 20/39] thp, mm: naive support of thp in generic read/write routines Kirill A. Shutemov
2013-05-21 21:28 ` Dave Hansen
2013-06-07 15:17 ` Kirill A. Shutemov
2013-06-07 15:29 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 21/39] thp, libfs: initial support of thp in simple_read/write_begin/write_end Kirill A. Shutemov
2013-05-21 21:49 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 22/39] thp: handle file pages in split_huge_page() Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 23/39] thp: wait_split_huge_page(): serialize over i_mmap_mutex too Kirill A. Shutemov
2013-05-21 22:05 ` Dave Hansen
2013-06-03 15:02 ` Kirill A. Shutemov
2013-06-03 15:53 ` Dave Hansen
2013-06-03 16:09 ` Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 24/39] thp, mm: truncate support for transparent huge page cache Kirill A. Shutemov
2013-05-21 22:39 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 25/39] thp, mm: split huge page on mmap file page Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 26/39] ramfs: enable transparent huge page cache Kirill A. Shutemov
2013-05-21 22:43 ` Dave Hansen
2013-05-22 14:22 ` Kirill A. Shutemov
2013-05-22 14:55 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 27/39] x86-64, mm: proper alignment mappings with hugepages Kirill A. Shutemov
2013-05-21 22:56 ` Dave Hansen
2013-06-25 14:56 ` Kirill A. Shutemov
2013-06-25 16:46 ` Dave Hansen
2013-05-21 23:20 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 28/39] thp: prepare zap_huge_pmd() to uncharge file pages Kirill A. Shutemov
2013-05-22 7:26 ` Hillf Danton
2013-05-12 1:23 ` [PATCHv4 29/39] thp: move maybe_pmd_mkwrite() out of mk_huge_pmd() Kirill A. Shutemov
2013-05-21 23:23 ` Dave Hansen
2013-05-22 14:37 ` Kirill A. Shutemov
2013-05-22 14:56 ` Dave Hansen
2013-05-21 23:23 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 30/39] thp: do_huge_pmd_anonymous_page() cleanup Kirill A. Shutemov
2013-05-22 11:45 ` Hillf Danton
2013-05-12 1:23 ` [PATCHv4 31/39] thp: consolidate code between handle_mm_fault() and do_huge_pmd_anonymous_page() Kirill A. Shutemov
2013-05-21 23:38 ` Dave Hansen
2013-05-22 6:51 ` Hillf Danton
2013-05-12 1:23 ` [PATCHv4 32/39] mm: cleanup __do_fault() implementation Kirill A. Shutemov
2013-05-21 23:57 ` Dave Hansen
2013-05-12 1:23 ` [PATCHv4 33/39] thp, mm: implement do_huge_linear_fault() Kirill A. Shutemov
2013-05-22 12:47 ` Hillf Danton
2013-05-22 15:13 ` Kirill A. Shutemov
2013-05-22 12:56 ` Hillf Danton
2013-05-22 15:14 ` Kirill A. Shutemov
2013-05-22 13:24 ` Hillf Danton
2013-05-22 15:26 ` Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 34/39] thp, mm: handle huge pages in filemap_fault() Kirill A. Shutemov
2013-05-22 11:37 ` Hillf Danton
2013-05-22 15:34 ` Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 35/39] mm: decomposite do_wp_page() and get rid of some 'goto' logic Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 36/39] mm: do_wp_page(): extract VM_WRITE|VM_SHARED case to separate function Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 37/39] thp: handle write-protect exception to file-backed huge pages Kirill A. Shutemov
2013-05-23 11:57 ` Hillf Danton
2013-05-23 12:08 ` Kirill A. Shutemov
2013-05-23 12:12 ` Hillf Danton
2013-05-23 12:33 ` Kirill A. Shutemov
2013-05-12 1:23 ` [PATCHv4 38/39] thp: vma_adjust_trans_huge(): adjust file-backed VMA too Kirill A. Shutemov
2013-05-23 11:01 ` Hillf Danton
2013-05-12 1:23 ` [PATCHv4 39/39] thp: map file-backed huge pages on fault Kirill A. Shutemov
2013-05-23 11:36 ` Hillf Danton
2013-05-23 11:48 ` Kirill A. Shutemov
2013-05-21 18:37 ` [PATCHv4 00/39] Transparent huge page cache Dave Hansen
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=20130522135112.32C3EE0090@blue.fi.intel.com \
--to=kirill.shutemov@linux.intel.com \
--cc=aarcange@redhat.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=dave@sr71.net \
--cc=dhillf@gmail.com \
--cc=fengguang.wu@intel.com \
--cc=hughd@google.com \
--cc=jack@suse.cz \
--cc=kirill@shutemov.name \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=matthew.r.wilcox@intel.com \
--cc=mgorman@suse.de \
--cc=viro@zeniv.linux.org.uk \
/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