From: Mike Rapoport <rppt@kernel.org>
To: "Kirill A. Shutemov" <kirill@shutemov.name>
Cc: linux-kernel@vger.kernel.org, Alan Cox <alan@linux.intel.com>,
Andrew Morton <akpm@linux-foundation.org>,
Andy Lutomirski <luto@kernel.org>,
Christopher Lameter <cl@linux.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
Idan Yaniv <idan.yaniv@ibm.com>,
James Bottomley <jejb@linux.ibm.com>,
Matthew Wilcox <willy@infradead.org>,
Peter Zijlstra <peterz@infradead.org>,
"Reshetova, Elena" <elena.reshetova@intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Tycho Andersen <tycho@tycho.ws>,
linux-api@vger.kernel.org, linux-mm@kvack.org,
Mike Rapoport <rppt@linux.ibm.com>
Subject: Re: [RFC PATCH v2 4/5] mm: secretmem: use PMD-size pages to amortize direct map fragmentation
Date: Mon, 13 Jul 2020 18:32:34 +0300 [thread overview]
Message-ID: <20200713153234.GC707159@kernel.org> (raw)
In-Reply-To: <20200713110505.mesvinqjbj7imsdz@box>
On Mon, Jul 13, 2020 at 02:05:05PM +0300, Kirill A. Shutemov wrote:
> On Mon, Jul 06, 2020 at 08:20:50PM +0300, Mike Rapoport wrote:
> > From: Mike Rapoport <rppt@linux.ibm.com>
> >
> > Removing a PAGE_SIZE page from the direct map every time such page is
> > allocated for a secret memory mapping will cause severe fragmentation of
> > the direct map. This fragmentation can be reduced by using PMD-size pages
> > as a pool for small pages for secret memory mappings.
> >
> > Add a gen_pool per secretmem inode and lazily populate this pool with
> > PMD-size pages.
> >
> > Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> > ---
> > mm/secretmem.c | 107 ++++++++++++++++++++++++++++++++++++++++---------
> > 1 file changed, 88 insertions(+), 19 deletions(-)
> >
> > diff --git a/mm/secretmem.c b/mm/secretmem.c
> > index df8f8c958cc2..c6fcf6d76951 100644
> > --- a/mm/secretmem.c
> > +++ b/mm/secretmem.c
> > @@ -5,6 +5,7 @@
> > #include <linux/memfd.h>
> > #include <linux/printk.h>
> > #include <linux/pagemap.h>
> > +#include <linux/genalloc.h>
> > #include <linux/pseudo_fs.h>
> > #include <linux/set_memory.h>
> > #include <linux/sched/signal.h>
> > @@ -23,24 +24,66 @@
> > #define SECRETMEM_UNCACHED 0x2
> >
> > struct secretmem_ctx {
> > + struct gen_pool *pool;
> > unsigned int mode;
> > };
> >
> > -static struct page *secretmem_alloc_page(gfp_t gfp)
> > +static int secretmem_pool_increase(struct secretmem_ctx *ctx, gfp_t gfp)
> > {
> > - /*
> > - * FIXME: use a cache of large pages to reduce the direct map
> > - * fragmentation
> > - */
> > - return alloc_page(gfp);
> > + unsigned long nr_pages = (1 << HPAGE_PMD_ORDER);
> > + struct gen_pool *pool = ctx->pool;
> > + unsigned long addr;
> > + struct page *page;
> > + int err;
> > +
> > + page = alloc_pages(gfp, HPAGE_PMD_ORDER);
> > + if (!page)
> > + return -ENOMEM;
> > +
> > + addr = (unsigned long)page_address(page);
> > + split_page(page, HPAGE_PMD_ORDER);
> > +
> > + err = gen_pool_add(pool, addr, HPAGE_PMD_SIZE, NUMA_NO_NODE);
> > + if (err) {
> > + __free_pages(page, HPAGE_PMD_ORDER);
> > + return err;
> > + }
> > +
> > + __kernel_map_pages(page, nr_pages, 0);
>
> It's worth nothing that unlike flush_tlb_kernel_range(),
> __kernel_map_pages() only flushed local TLB, so other CPU may still have
> access to the page. It's shouldn't be a blocker, but deserve a comment.
Sure.
> > +
> > + return 0;
> > +}
> > +
--
Sincerely yours,
Mike.
next prev parent reply other threads:[~2020-07-13 15:32 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-06 17:20 [RFC PATCH v2 0/5] mm: extend memfd with ability to create "secret" memory areas Mike Rapoport
2020-07-06 17:20 ` [RFC PATCH v2 1/5] mm: make HPAGE_PxD_{SHIFT,MASK,SIZE} always available Mike Rapoport
2020-07-07 5:07 ` Hugh Dickins
2020-07-07 6:47 ` Mike Rapoport
2020-07-10 16:40 ` Andrea Arcangeli
2020-07-10 16:57 ` Matthew Wilcox
2020-07-10 17:08 ` Andrea Arcangeli
2020-07-10 17:12 ` Mike Rapoport
2020-07-06 17:20 ` [RFC PATCH v2 2/5] mmap: make mlock_future_check() global Mike Rapoport
2020-07-06 17:20 ` [RFC PATCH v2 3/5] mm: extend memfd with ability to create "secret" memory areas Mike Rapoport
2020-07-13 10:58 ` Kirill A. Shutemov
2020-07-13 15:31 ` Mike Rapoport
2020-07-06 17:20 ` [RFC PATCH v2 4/5] mm: secretmem: use PMD-size pages to amortize direct map fragmentation Mike Rapoport
2020-07-13 11:05 ` Kirill A. Shutemov
2020-07-13 15:32 ` Mike Rapoport [this message]
2020-07-06 17:20 ` [RFC PATCH v2 5/5] mm: secretmem: add ability to reserve memory at boot Mike Rapoport
2020-07-17 8:36 ` [RFC PATCH v2 0/5] mm: extend memfd with ability to create "secret" memory areas Pavel Machek
2020-07-17 14:43 ` James Bottomley
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=20200713153234.GC707159@kernel.org \
--to=rppt@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=alan@linux.intel.com \
--cc=cl@linux.com \
--cc=dave.hansen@linux.intel.com \
--cc=elena.reshetova@intel.com \
--cc=idan.yaniv@ibm.com \
--cc=jejb@linux.ibm.com \
--cc=kirill@shutemov.name \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=luto@kernel.org \
--cc=peterz@infradead.org \
--cc=rppt@linux.ibm.com \
--cc=tglx@linutronix.de \
--cc=tycho@tycho.ws \
--cc=willy@infradead.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.