• Hugh Dickins's avatar
    kaiser: _pgd_alloc() without __GFP_REPEAT to avoid stalls · d41f46f7
    Hugh Dickins authored
    
    Synthetic filesystem mempressure testing has shown softlockups, with
    hour-long page allocation stalls, and pgd_alloc() trying for order:1
    with __GFP_REPEAT in one of the backtraces each time.
    
    That's _pgd_alloc() going for a Kaiser double-pgd, using the __GFP_REPEAT
    common to all page table allocations, but actually having no effect on
    order:0 (see should_alloc_oom() and should_continue_reclaim() in this
    tree, but beware that ports to another tree might behave differently).
    
    Order:1 stack allocation has been working satisfactorily without
    __GFP_REPEAT forever, and page table allocation only asks __GFP_REPEAT
    for awkward occasions in a long-running process: it's not appropriate
    at fork or exec time, and seems to be doing much more harm than good:
    getting those contiguous pages under very heavy mempressure can be
    hard (though even without it, Kaiser does generate more mempressure).
    
    Mask out that __GFP_REPEAT inside _pgd_alloc().  Why not take it out
    of the PGALLOG_GFP altogether, as v4.7 commit a3a9a59d ("x86: get
    rid of superfluous __GFP_REPEAT") did?  Because I think that might
    make a difference to our page table memcg charging, which I'd prefer
    not to interfere with at this time.
    
    hughd adds: __alloc_pages_slowpath() in the 4.4.89-stable tree handles
    __GFP_REPEAT a little differently than in prod kernel or 3.18.72-stable,
    so it may not always be exactly a no-op on order:0 pages, as said above;
    but I think still appropriate to omit it from Kaiser or non-Kaiser pgd.
    Signed-off-by: default avatarHugh Dickins <hughd@google.com>
    Acked-by: default avatarJiri Kosina <jkosina@suse.cz>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    d41f46f7
pgtable.c 16 KB