From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ning Qu Subject: Re: [PATCH 03/23] thp: compile-time and sysfs knob for thp pagecache Date: Fri, 6 Sep 2013 10:14:26 -0700 Message-ID: References: <1375582645-29274-1-git-send-email-kirill.shutemov@linux.intel.com> <1375582645-29274-4-git-send-email-kirill.shutemov@linux.intel.com> <20130906113358.6D8EEE0090@blue.fi.intel.com> Mime-Version: 1.0 Content-Type: multipart/alternative; boundary=047d7b67317ee051a804e5ba2c06 Cc: Andrea Arcangeli , Andrew Morton , Al Viro , Hugh Dickins , Wu Fengguang , Jan Kara , Mel Gorman , linux-mm@kvack.org, Andi Kleen , Matthew Wilcox , "Kirill A. Shutemov" , Hillf Danton , Dave Hansen , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org To: "Kirill A. Shutemov" Return-path: In-Reply-To: <20130906113358.6D8EEE0090@blue.fi.intel.com> Sender: owner-linux-mm@kvack.org List-Id: linux-fsdevel.vger.kernel.org --047d7b67317ee051a804e5ba2c06 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Great! Best wishes, --=20 Ning Qu (=E6=9B=B2=E5=AE=81) | Software Engineer | quning@google.com | +1-4= 08-418-6066 On Fri, Sep 6, 2013 at 4:33 AM, Kirill A. Shutemov < kirill.shutemov@linux.intel.com> wrote: > Ning Qu wrote: > > One minor question inline. > > > > Best wishes, > > -- > > Ning Qu (=E6=9B=B2=E5=AE=81) | Software Engineer | quning@google.com | = +1-408-418-6066 > > > > > > On Sat, Aug 3, 2013 at 7:17 PM, Kirill A. Shutemov < > > kirill.shutemov@linux.intel.com> wrote: > > > > > From: "Kirill A. Shutemov" > > > > > > For now, TRANSPARENT_HUGEPAGE_PAGECACHE is only implemented for x86_6= 4. > > > > > > Radix tree perload overhead can be significant on BASE_SMALL systems, > so > > > let's add dependency on !BASE_SMALL. > > > > > > /sys/kernel/mm/transparent_hugepage/page_cache is runtime knob for th= e > > > feature. It's enabled by default if TRANSPARENT_HUGEPAGE_PAGECACHE is > > > enabled. > > > > > > Signed-off-by: Kirill A. Shutemov > > > --- > > > Documentation/vm/transhuge.txt | 9 +++++++++ > > > include/linux/huge_mm.h | 9 +++++++++ > > > mm/Kconfig | 12 ++++++++++++ > > > mm/huge_memory.c | 23 +++++++++++++++++++++++ > > > 4 files changed, 53 insertions(+) > > > > > > diff --git a/Documentation/vm/transhuge.txt > > > b/Documentation/vm/transhuge.txt > > > index 4a63953..4cc15c4 100644 > > > --- a/Documentation/vm/transhuge.txt > > > +++ b/Documentation/vm/transhuge.txt > > > @@ -103,6 +103,15 @@ echo always > > > >/sys/kernel/mm/transparent_hugepage/enabled > > > echo madvise >/sys/kernel/mm/transparent_hugepage/enabled > > > echo never >/sys/kernel/mm/transparent_hugepage/enabled > > > > > > +If TRANSPARENT_HUGEPAGE_PAGECACHE is enabled kernel will use huge > pages in > > > +page cache if possible. It can be disable and re-enabled via sysfs: > > > + > > > +echo 0 >/sys/kernel/mm/transparent_hugepage/page_cache > > > +echo 1 >/sys/kernel/mm/transparent_hugepage/page_cache > > > + > > > +If it's disabled kernel will not add new huge pages to page cache an= d > > > +split them on mapping, but already mapped pages will stay intakt. > > > + > > > It's also possible to limit defrag efforts in the VM to generate > > > hugepages in case they're not immediately free to madvise regions or > > > to never try to defrag memory and simply fallback to regular pages > > > diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h > > > index 3935428..1534e1e 100644 > > > --- a/include/linux/huge_mm.h > > > +++ b/include/linux/huge_mm.h > > > @@ -40,6 +40,7 @@ enum transparent_hugepage_flag { > > > TRANSPARENT_HUGEPAGE_DEFRAG_FLAG, > > > TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG, > > > TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG, > > > + TRANSPARENT_HUGEPAGE_PAGECACHE, > > > TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG, > > > #ifdef CONFIG_DEBUG_VM > > > TRANSPARENT_HUGEPAGE_DEBUG_COW_FLAG, > > > @@ -229,4 +230,12 @@ static inline int do_huge_pmd_numa_page(struct > > > mm_struct *mm, struct vm_area_str > > > > > > #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ > > > > > > +static inline bool transparent_hugepage_pagecache(void) > > > +{ > > > + if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE_PAGECACHE)) > > > + return false; > > > + if (!(transparent_hugepage_flags & > (1< > > > > > > Here, I suppose we should test the TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = as > > well? E.g. > > if (!(transparent_hugepage_flags & > > ((1< > (1< > > > + return false; > > You're right. Fixed. > > -- > Kirill A. Shutemov > --047d7b67317ee051a804e5ba2c06 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Great!

<= div>
Best wishes,
--=C2=A0
Ning Qu (= =E6=9B=B2=E5=AE=81)=C2=A0|=C2=A0Software Engineer |=C2=A0quning@goog= le.com=C2=A0|=C2=A0+1-408-418-6066


On Fri, Sep 6, 2013 at 4:33 AM, Kirill A= . Shutemov <kirill.shutemov@linux.intel.com> w= rote:
Ning= Qu wrote:
> One minor question inline.
>
> Best wishes,
> --
> Ning Qu (=E6=9B=B2=E5=AE=81) | Software Engineer | quning@google.com | +1-408-418-6066
>
>
> On Sat, Aug 3, 2013 at 7:17 PM, Kirill A. Shutemov <
> kirill.shutemov@lin= ux.intel.com> wrote:
>
> > From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
> >
> > For now, TRANSPARENT_HUGEPAGE_PAGECACHE is only implemented for x= 86_64.
> >
> > Radix tree perload overhead can be significant on BASE_SMALL syst= ems, so
> > let's add dependency on !BASE_SMALL.
> >
> > /sys/kernel/mm/transparent_hugepage/page_cache is runtime knob fo= r the
> > feature. It's enabled by default if TRANSPARENT_HUGEPAGE_PAGE= CACHE is
> > enabled.
> >
> > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> > ---
> > =C2=A0Documentation/vm/transhuge.txt | =C2=A09 +++++++++
> > =C2=A0include/linux/huge_mm.h =C2=A0 =C2=A0 =C2=A0 =C2=A0| =C2=A0= 9 +++++++++
> > =C2=A0mm/Kconfig =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 | 12 ++++++++++++
> > =C2=A0mm/huge_memory.c =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 | 23 +++++++++++++++++++++++
> > =C2=A04 files changed, 53 insertions(+)
> >
> > diff --git a/Documentation/vm/transhuge.txt
> > b/Documentation/vm/transhuge.txt
> > index 4a63953..4cc15c4 100644
> > --- a/Documentation/vm/transhuge.txt
> > +++ b/Documentation/vm/transhuge.txt
> > @@ -103,6 +103,15 @@ echo always
> > >/sys/kernel/mm/transparent_hugepage/enabled
> > =C2=A0echo madvise >/sys/kernel/mm/transparent_hugepage/enable= d
> > =C2=A0echo never >/sys/kernel/mm/transparent_hugepage/enabled<= br> > >
> > +If TRANSPARENT_HUGEPAGE_PAGECACHE is enabled kernel will use hug= e pages in
> > +page cache if possible. It can be disable and re-enabled via sys= fs:
> > +
> > +echo 0 >/sys/kernel/mm/transparent_hugepage/page_cache
> > +echo 1 >/sys/kernel/mm/transparent_hugepage/page_cache
> > +
> > +If it's disabled kernel will not add new huge pages to page = cache and
> > +split them on mapping, but already mapped pages will stay intakt= .
> > +
> > =C2=A0It's also possible to limit defrag efforts in the VM to= generate
> > =C2=A0hugepages in case they're not immediately free to madvi= se regions or
> > =C2=A0to never try to defrag memory and simply fallback to regula= r pages
> > diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h > > index 3935428..1534e1e 100644
> > --- a/include/linux/huge_mm.h
> > +++ b/include/linux/huge_mm.h
> > @@ -40,6 +40,7 @@ enum transparent_hugepage_flag {
> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 TRANSPARENT_HUGEPAGE_DEFRAG_FLAG,
> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_= FLAG,
> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGE= D_FLAG,
> > + =C2=A0 =C2=A0 =C2=A0 TRANSPARENT_HUGEPAGE_PAGECACHE,
> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FL= AG,
> > =C2=A0#ifdef CONFIG_DEBUG_VM
> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 TRANSPARENT_HUGEPAGE_DEBUG_COW_FLAG,<= br> > > @@ -229,4 +230,12 @@ static inline int do_huge_pmd_numa_page(stru= ct
> > mm_struct *mm, struct vm_area_str
> >
> > =C2=A0#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
> >
> > +static inline bool transparent_hugepage_pagecache(void)
> > +{
> > + =C2=A0 =C2=A0 =C2=A0 if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAG= E_PAGECACHE))
> > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return false;<= br> > > + =C2=A0 =C2=A0 =C2=A0 if (!(transparent_hugepage_flags & (1&= lt;<TRANSPARENT_HUGEPAGE_FLAG)))
> >
>
> Here, I suppose we should test the =C2=A0TRANSPARENT_HUGEPAGE_REQ_MADV= _FLAG as
> well? E.g.
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (!(transparent_hugepage_flags &
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ((1<<TRANSPAREN= T_HUGEPAGE_FLAG) |
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(1<<TRANS= PARENT_HUGEPAGE_REQ_MADV_FLAG))))
>
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return false;

You're right. Fixed.

--
=C2=A0Kirill A. Shutemov

--047d7b67317ee051a804e5ba2c06-- -- 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: email@kvack.org