[RFC PATCH] hugetlb: ensure hugepage access is denied if hugepages are not supported
nacc at linux.vnet.ibm.com
Fri Apr 4 10:12:25 EST 2014
On 03.04.2014 [21:49:46 +0530], Aneesh Kumar K.V wrote:
> Nishanth Aravamudan <nacc at linux.vnet.ibm.com> writes:
> > On 24.03.2014 [16:02:56 -0700], Nishanth Aravamudan wrote:
> >> In KVM guests on Power, if the guest is not backed by hugepages, we see
> >> the following in the guest:
> >> AnonHugePages: 0 kB
> >> HugePages_Total: 0
> >> HugePages_Free: 0
> >> HugePages_Rsvd: 0
> >> HugePages_Surp: 0
> >> Hugepagesize: 64 kB
> >> This seems like a configuration issue -- why is a hstate of 64k being
> >> registered?
> >> I did some debugging and found that the following does trigger,
> >> mm/hugetlb.c::hugetlb_init():
> >> /* Some platform decide whether they support huge pages at boot
> >> * time. On these, such as powerpc, HPAGE_SHIFT is set to 0 when
> >> * there is no such support
> >> */
> >> if (HPAGE_SHIFT == 0)
> >> return 0;
> >> That check is only during init-time. So we don't support hugepages, but
> >> none of the hugetlb APIs actually check this condition (HPAGE_SHIFT ==
> >> 0), so /proc/meminfo above falsely indicates there is a valid hstate (at
> >> least one). But note that there is no /sys/kernel/mm/hugepages meaning
> >> no hstate was actually registered.
> >> Further, it turns out that huge_page_order(default_hstate) is 0, so
> >> hugetlb_report_meminfo is doing:
> >> 1UL << (huge_page_order(h) + PAGE_SHIFT - 10)
> >> which ends up just doing 1 << (PAGE_SHIFT - 10) and since the base page
> >> size is 64k, we report a hugepage size of 64k... And allow the user to
> >> allocate hugepages via the sysctl, etc.
> >> What's the right thing to do here?
> >> 1) Should we add checks for HPAGE_SHIFT == 0 to all the hugetlb APIs? It
> >> seems like HPAGE_SHIFT == 0 should be the equivalent, functionally, of
> >> the config options being off. This seems like a lot of overhead, though,
> >> to put everywhere, so maybe I can do it in an arch-specific macro, that
> >> in asm-generic defaults to 0 (and so will hopefully be compiled out?).
> >> 2) What should hugetlbfs do when HPAGE_SHIFT == 0? Should it be
> >> mountable? Obviously if it's mountable, we can't great files there
> >> (since the fs will report insufficient space). 
> > Here is my solution to this. Comments appreciated!
> > In KVM guests on Power, in a guest not backed by hugepages, we see the
> > following:
> > AnonHugePages: 0 kB
> > HugePages_Total: 0
> > HugePages_Free: 0
> > HugePages_Rsvd: 0
> > HugePages_Surp: 0
> > Hugepagesize: 64 kB
> > HPAGE_SHIFT == 0 in this configuration, which indicates that hugepages
> > are not supported at boot-time, but this is only checked in
> > hugetlb_init(). Extract the check to a helper function, and use it in a
> > few relevant places.
> > This does make hugetlbfs not supported in this environment. I believe
> > this is fine, as there are no valid hugepages and that won't change at
> > runtime.
> > Signed-off-by: Nishanth Aravamudan <nacc at linux.vnet.ibm.com>
> Looks good. Can you resubmit it as a proper patch ?
Will Cc you on that.
> You may also want to capture in commit message saying hugetlbfs file
> system also will not be registered.
I did that already:
> > This does make hugetlbfs not supported in this environment. I
> > believe this is fine, as there are no valid hugepages and that won't
> > change at runtime.
More information about the Linuxppc-dev