All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zach O'Keefe <zokeefe@google.com>
To: Yang Shi <shy828301@gmail.com>
Cc: linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>,
	linux-api@vger.kernel.org,
	Axel Rasmussen <axelrasmussen@google.com>,
	James Houghton <jthoughton@google.com>,
	Hugh Dickins <hughd@google.com>,
	Miaohe Lin <linmiaohe@huawei.com>,
	David Hildenbrand <david@redhat.com>,
	David Rientjes <rientjes@google.com>,
	Matthew Wilcox <willy@infradead.org>,
	Pasha Tatashin <pasha.tatashin@soleen.com>,
	Peter Xu <peterx@redhat.com>,
	Rongwei Wang <rongwei.wang@linux.alibaba.com>,
	SeongJae Park <sj@kernel.org>, Song Liu <songliubraving@fb.com>,
	Vlastimil Babka <vbabka@suse.cz>,
	Chris Kennelly <ckennelly@google.com>,
	"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
	Minchan Kim <minchan@kernel.org>,
	Patrick Xia <patrickx@google.com>
Subject: Re: [PATCH mm-unstable v3 01/10] mm/shmem: add flag to enforce shmem THP in hugepage_vma_check()
Date: Fri, 16 Sep 2022 15:22:58 -0700	[thread overview]
Message-ID: <YyT3Qq7K8UZM6IrF@google.com> (raw)
In-Reply-To: <CAHbLzko3A5-TpS0BgBeKkx5cuOkWgLvWXQH=TdgW-baO4rPtdg@mail.gmail.com>

On Sep 16 10:46, Yang Shi wrote:
> On Wed, Sep 7, 2022 at 7:45 AM Zach O'Keefe <zokeefe@google.com> wrote:
> >
> > Extend 'mm/thp: add flag to enforce sysfs THP in
> > hugepage_vma_check()' to shmem, allowing callers to ignore
> > /sys/kernel/transparent_hugepage/shmem_enabled and tmpfs huge= mount.
> >
> > This is intended to be used by MADV_COLLAPSE, and the rationale is
> > analogous to the anon/file case: MADV_COLLAPSE is not coupled to
> > directives that advise the kernel's decisions on when THPs should be
> > considered eligible. shmem/tmpfs always claims large folio support,
> > regardless of sysfs or mount options.
> >
> > Signed-off-by: Zach O'Keefe <zokeefe@google.com>
> 
> Reviewed-by: Yang Shi <shy828301@gmail.com>
> 
> A nit below...
> 

Hey Yang,

Thanks for taking the time as always :)

> > ---
> >  include/linux/shmem_fs.h | 10 ++++++----
> >  mm/huge_memory.c         |  2 +-
> >  mm/shmem.c               | 18 +++++++++---------
> >  3 files changed, 16 insertions(+), 14 deletions(-)
> >
> > diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h
> > index f24071e3c826..d500ea967dc7 100644
> > --- a/include/linux/shmem_fs.h
> > +++ b/include/linux/shmem_fs.h
> > @@ -92,11 +92,13 @@ extern struct page *shmem_read_mapping_page_gfp(struct address_space *mapping,
> >  extern void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end);
> >  int shmem_unuse(unsigned int type);
> >
> > -extern bool shmem_is_huge(struct vm_area_struct *vma,
> > -                         struct inode *inode, pgoff_t index);
> > -static inline bool shmem_huge_enabled(struct vm_area_struct *vma)
> > +extern bool shmem_is_huge(struct vm_area_struct *vma, struct inode *inode,
> > +                         pgoff_t index, bool shmem_huge_force);
> > +static inline bool shmem_huge_enabled(struct vm_area_struct *vma,
> > +                                     bool shmem_huge_force)
> >  {
> > -       return shmem_is_huge(vma, file_inode(vma->vm_file), vma->vm_pgoff);
> > +       return shmem_is_huge(vma, file_inode(vma->vm_file), vma->vm_pgoff,
> > +                            shmem_huge_force);
> >  }
> >  extern unsigned long shmem_swap_usage(struct vm_area_struct *vma);
> >  extern unsigned long shmem_partial_swap_usage(struct address_space *mapping,
> > diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> > index 7fa74b9749a6..53d170dac332 100644
> > --- a/mm/huge_memory.c
> > +++ b/mm/huge_memory.c
> > @@ -119,7 +119,7 @@ bool hugepage_vma_check(struct vm_area_struct *vma, unsigned long vm_flags,
> >          * own flags.
> >          */
> >         if (!in_pf && shmem_file(vma->vm_file))
> > -               return shmem_huge_enabled(vma);
> > +               return shmem_huge_enabled(vma, !enforce_sysfs);
> >
> >         /* Enforce sysfs THP requirements as necessary */
> >         if (enforce_sysfs &&
> > diff --git a/mm/shmem.c b/mm/shmem.c
> > index 99b7341bd0bf..47c42c566fd1 100644
> > --- a/mm/shmem.c
> > +++ b/mm/shmem.c
> > @@ -461,20 +461,20 @@ static bool shmem_confirm_swap(struct address_space *mapping,
> >
> >  static int shmem_huge __read_mostly = SHMEM_HUGE_NEVER;
> >
> > -bool shmem_is_huge(struct vm_area_struct *vma,
> > -                  struct inode *inode, pgoff_t index)
> > +bool shmem_is_huge(struct vm_area_struct *vma, struct inode *inode,
> > +                  pgoff_t index, bool shmem_huge_force)
> >  {
> >         loff_t i_size;
> >
> >         if (!S_ISREG(inode->i_mode))
> >                 return false;
> > -       if (shmem_huge == SHMEM_HUGE_DENY)
> > -               return false;
> >         if (vma && ((vma->vm_flags & VM_NOHUGEPAGE) ||
> >             test_bit(MMF_DISABLE_THP, &vma->vm_mm->flags)))
> >                 return false;
> > -       if (shmem_huge == SHMEM_HUGE_FORCE)
> > +       if (shmem_huge == SHMEM_HUGE_FORCE || shmem_huge_force)
> 
> shmem_huge_force means ignore all sysfs and mount options, so it seems
> better to have it test explicitly IMHO, like:
> 
> if (shmem_huge_force)
>     return true;
> 
> if (shmem_huge == SHMEM_HUGE_FORCE)
>     return true;
> 
> 

This makes sense to me - a little bit cleaner / more direct.  Thanks for the
suggestion.

Thank you again,
Zach

> >                 return true;
> > +       if (shmem_huge == SHMEM_HUGE_DENY)
> > +               return false;
> >
> >         switch (SHMEM_SB(inode->i_sb)->huge) {
> >         case SHMEM_HUGE_ALWAYS:
> > @@ -669,8 +669,8 @@ static long shmem_unused_huge_count(struct super_block *sb,
> >
> >  #define shmem_huge SHMEM_HUGE_DENY
> >
> > -bool shmem_is_huge(struct vm_area_struct *vma,
> > -                  struct inode *inode, pgoff_t index)
> > +bool shmem_is_huge(struct vm_area_struct *vma, struct inode *inode,
> > +                  pgoff_t index, bool shmem_huge_force)
> >  {
> >         return false;
> >  }
> > @@ -1056,7 +1056,7 @@ static int shmem_getattr(struct user_namespace *mnt_userns,
> >                         STATX_ATTR_NODUMP);
> >         generic_fillattr(&init_user_ns, inode, stat);
> >
> > -       if (shmem_is_huge(NULL, inode, 0))
> > +       if (shmem_is_huge(NULL, inode, 0, false))
> >                 stat->blksize = HPAGE_PMD_SIZE;
> >
> >         if (request_mask & STATX_BTIME) {
> > @@ -1888,7 +1888,7 @@ static int shmem_get_folio_gfp(struct inode *inode, pgoff_t index,
> >                 return 0;
> >         }
> >
> > -       if (!shmem_is_huge(vma, inode, index))
> > +       if (!shmem_is_huge(vma, inode, index, false))
> >                 goto alloc_nohuge;
> >
> >         huge_gfp = vma_thp_gfp_mask(vma);
> > --
> > 2.37.2.789.g6183377224-goog
> >

  reply	other threads:[~2022-09-16 22:23 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-07 14:45 [PATCH mm-unstable v3 00/10] mm: add file/shmem support to MADV_COLLAPSE Zach O'Keefe
2022-09-07 14:45 ` [PATCH mm-unstable v3 01/10] mm/shmem: add flag to enforce shmem THP in hugepage_vma_check() Zach O'Keefe
2022-09-16 17:46   ` Yang Shi
2022-09-16 22:22     ` Zach O'Keefe [this message]
2022-09-07 14:45 ` [PATCH mm-unstable v3 02/10] mm/khugepaged: attempt to map file/shmem-backed pte-mapped THPs by pmds Zach O'Keefe
2022-09-16 18:26   ` Yang Shi
2022-09-19 15:36     ` Zach O'Keefe
2022-09-07 14:45 ` [PATCH mm-unstable v3 03/10] mm/madvise: add file and shmem support to MADV_COLLAPSE Zach O'Keefe
2022-09-16 20:38   ` Yang Shi
2022-09-19 15:29     ` Zach O'Keefe
2022-09-19 17:54       ` Yang Shi
2022-09-19 18:12       ` Yang Shi
2022-09-21 18:26         ` Zach O'Keefe
2022-09-07 14:45 ` [PATCH mm-unstable v3 04/10] mm/khugepaged: add tracepoint to hpage_collapse_scan_file() Zach O'Keefe
2022-09-16 20:41   ` Yang Shi
2022-09-16 23:05     ` Zach O'Keefe
2022-09-07 14:45 ` [PATCH mm-unstable v3 05/10] selftests/vm: dedup THP helpers Zach O'Keefe
2022-09-07 14:45 ` [PATCH mm-unstable v3 06/10] selftests/vm: modularize thp collapse memory operations Zach O'Keefe
2022-09-07 14:45 ` [PATCH mm-unstable v3 07/10] selftests/vm: add thp collapse file and tmpfs testing Zach O'Keefe
2022-09-07 14:45 ` [PATCH mm-unstable v3 08/10] selftests/vm: add thp collapse shmem testing Zach O'Keefe
2022-09-07 14:45 ` [PATCH mm-unstable v3 09/10] selftests/vm: add file/shmem MADV_COLLAPSE selftest for cleared pmd Zach O'Keefe
2022-09-07 14:45 ` [PATCH mm-unstable v3 10/10] selftests/vm: add selftest for MADV_COLLAPSE of uffd-minor memory Zach O'Keefe

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=YyT3Qq7K8UZM6IrF@google.com \
    --to=zokeefe@google.com \
    --cc=akpm@linux-foundation.org \
    --cc=axelrasmussen@google.com \
    --cc=ckennelly@google.com \
    --cc=david@redhat.com \
    --cc=hughd@google.com \
    --cc=jthoughton@google.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linmiaohe@huawei.com \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=minchan@kernel.org \
    --cc=pasha.tatashin@soleen.com \
    --cc=patrickx@google.com \
    --cc=peterx@redhat.com \
    --cc=rientjes@google.com \
    --cc=rongwei.wang@linux.alibaba.com \
    --cc=shy828301@gmail.com \
    --cc=sj@kernel.org \
    --cc=songliubraving@fb.com \
    --cc=vbabka@suse.cz \
    --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.