Re: [PATCH v2] mm: incorporate zero pages into transparent huge pages

From: Andrea Arcangeli
Date: Fri Feb 20 2015 - 13:02:50 EST

On Wed, Feb 18, 2015 at 03:31:19PM -0800, Andrew Morton wrote:
> On Wed, 11 Feb 2015 23:03:55 +0200 Ebru Akagunduz <ebru.akagunduz@xxxxxxxxx> wrote:
> > This patch improves THP collapse rates, by allowing zero pages.
> >
> > Currently THP can collapse 4kB pages into a THP when there
> > are up to khugepaged_max_ptes_none pte_none ptes in a 2MB
> > range. This patch counts pte none and mapped zero pages
> > with the same variable.
> So if I'm understanding this correctly, with the default value of
> khugepaged_max_ptes_none (HPAGE_PMD_NR-1), if an application creates a
> 2MB area which contains 511 mappings of the zero page and one real
> page, the kernel will proceed to turn that area into a real, physical
> huge page. So it consumes 2MB of memory which would not have
> previously been allocated?


> If so, this might be rather undesirable behaviour in some situations
> (and ditto the current behaviour for pte_none ptes)?
> This can be tuned by adjusting khugepaged_max_ptes_none, but not many
> people are likely to do that because we didn't document the damn thing.

khugepaged checks !hugepage_vma_check, so those apps that don't want
it can opt out with MADV_NOHUGEPAGE. The sysctl allows to tune for the
default behavior.

> At all. Can we please rectify this, and update it for the is_zero_pfn
> feature? The documentation should include an explanation telling
> people how to decide what setting to use, how to observe its effects,
> etc.

Agreed, documentation for the sysfs control would be good to have

In the meantime I've got a more urgent issue, for which the fix is
appended below.