• Mel Gorman's avatar
    Do not group pages by mobility type on low memory systems · 9ef9acb0
    Mel Gorman authored
    Grouping pages by mobility can only successfully operate when there are more
    MAX_ORDER_NR_PAGES areas than mobility types.  When there are insufficient
    areas, fallbacks cannot be avoided.  This has noticeable performance impacts
    on machines with small amounts of memory in comparison to MAX_ORDER_NR_PAGES.
    For example, on IA64 with a configuration including huge pages spans 1GiB with
    MAX_ORDER_NR_PAGES so would need at least 4GiB of RAM before grouping pages by
    mobility would be useful.  In comparison, an x86 would need 16MB.
    
    This patch checks the size of vm_total_pages in build_all_zonelists(). If
    there are not enough areas,  mobility is effectivly disabled by considering
    all allocations as the same type (UNMOVABLE).  This is achived via a
    __read_mostly flag.
    
    With this patch, performance is comparable to disabling grouping pages
    by mobility at compile-time on a test machine with insufficient memory.
    With this patch, it is reasonable to get rid of grouping pages by mobility
    a compile-time option.
    Signed-off-by: default avatarMel Gorman <mel@csn.ul.ie>
    Acked-by: default avatarAndy Whitcroft <apw@shadowen.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9ef9acb0
page_alloc.c 119 KB