Re: [PATCH] mm/huge_memory: disable thp if thp page size is too large

From: Hao Peng
Date: Wed Oct 06 2021 - 04:17:25 EST


On Thu, Sep 30, 2021 at 9:19 PM David Hildenbrand <david@xxxxxxxxxx> wrote:
>
> On 30.09.21 04:14, Hao Peng wrote:
> > From: Peng Hao <flyingpeng@xxxxxxxxxxx>
>
> "disable thp if thp page size is too large" you disable thp if there is
> not sufficient memory installed in the system (and for that, you use THP
> size), something doesn't add up here.
>
In addition, if THP is enabled, min_free_kbytes will be recalculated.
At this time,
min_free_kbytes is calculated based on the size of THP. If the size of
THP is too l
arge, OOM will easily be triggered.
> >
> > After seting the page size to 64k on ARM64, the supported huge page
>
> s/seting/setting/
>
> Fortunately, most distributions already switched to 4k, because 512MB
> THP is pretty much useless, especially on any system that doesn't have
> memory in the range of hundreds of megabytes or terrabytes.
But the ARM64 Server distribution version I use, such as CentOS for ARM64,
has a page size of 16KB or 64KB.
Thanks.
>
> > size is 512M and 1TB. Therefore, if the thp is enabled, the size
> > of the thp is 512M. In this case, min_free_kbytes will be too large.
> >
> > On an arm64 server with 64G memory, the page size is 64k, with thp
> > enabled.
> > cat /proc/sys/vm/min_free_kbytes
> > 3335104
> >
> > Therefore, when judging whether to enable thp by default, consider
> > the size of thp.
> >
> > Signed-off-by: Peng Hao <flyingpeng@xxxxxxxxxxx>
> > ---
> > mm/huge_memory.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> > index 5e9ef0fc261e..03c7f571b3ae 100644
> > --- a/mm/huge_memory.c
> > +++ b/mm/huge_memory.c
> > @@ -437,7 +437,7 @@ static int __init hugepage_init(void)
> > * where the extra memory used could hurt more than TLB overhead
> > * is likely to save. The admin can still enable it through /sys.
> > */
> > - if (totalram_pages() < (512 << (20 - PAGE_SHIFT))) {
> > + if (totalram_pages() < (512 << (HPAGE_PMD_SHIFT - PAGE_SHIFT))) {
> > transparent_hugepage_flags = 0;
> > return 0;
> > }
> > --
> > 2.27.0
> >
>
>
> --
> Thanks,
>
> David / dhildenb
>