• Mel Gorman's avatar
    Do not depend on MAX_ORDER when grouping pages by mobility · d9c23400
    Mel Gorman authored
    Currently mobility grouping works at the MAX_ORDER_NR_PAGES level.  This makes
    sense for the majority of users where this is also the huge page size.
    However, on platforms like ia64 where the huge page size is runtime
    configurable it is desirable to group at a lower order.  On x86_64 and
    occasionally on x86, the hugepage size may not always be MAX_ORDER_NR_PAGES.
    
    This patch groups pages together based on the value of HUGETLB_PAGE_ORDER.  It
    uses a compile-time constant if possible and a variable where the huge page
    size is runtime configurable.
    
    It is assumed that grouping should be done at the lowest sensible order and
    that the user would not want to override this.  If this is not true,
    page_block order could be forced to a variable initialised via a boot-time
    kernel parameter.
    
    One potential issue with this patch is that IA64 now parses hugepagesz with
    early_param() instead of __setup().  __setup() is called after the memory
    allocator has been initialised and the pageblock bitmaps already setup.  In
    tests on one IA64 there did not seem to be any problem with using
    early_param() and in fact may be more correct as it guarantees the parameter
    is handled before the parsing of hugepages=.
    Signed-off-by: default avatarMel Gorman <mel@csn.ul.ie>
    Acked-by: default avatarAndy Whitcroft <apw@shadowen.org>
    Acked-by: default avatarChristoph Lameter <clameter@sgi.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d9c23400
page_alloc.c 122 KB