• Suren Baghdasaryan's avatar
    mm: count time in drain_all_pages during direct reclaim as memory pressure · fa7fc75f
    Suren Baghdasaryan authored
    When page allocation in direct reclaim path fails, the system will make
    one attempt to shrink per-cpu page lists and free pages from high alloc
    reserves.  Draining per-cpu pages into buddy allocator can be a very
    slow operation because it's done using workqueues and the task in direct
    reclaim waits for all of them to finish before proceeding.  Currently
    this time is not accounted as psi memory stall.
    
    While testing mobile devices under extreme memory pressure, when
    allocations are failing during direct reclaim, we notices that psi
    events which would be expected in such conditions were not triggered.
    After profiling these cases it was determined that the reason for
    missing psi events was that a big chunk of time spent in direct reclaim
    is not accounted as memory stall, therefore psi would not reach the
    levels at which an event is generated.  Further investigation revealed
    that the bulk of that unaccounted time was spent inside drain_all_pages
    call.
    
    A typical captured case when drain_all_pages path gets activated:
    
    __alloc_pages_slowpath  took 44.644.613ns
        __perform_reclaim   took    751.668ns (1.7%)
        drain_all_pages     took 43.887.167ns (98.3%)
    
    PSI in this case records the time spent in __perform_reclaim but ignores
    drain_all_pages, IOW it misses 98.3% of the time spent in
    __alloc_pages_slowpath.
    
    Annotate __alloc_pages_direct_reclaim in its entirety so that delays
    from handling page allocation failure in the direct reclaim path are
    accounted as memory stall.
    
    Link: https://lkml.kernel.org/r/20220223194812.1299646-1-surenb@google.comSigned-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
    Reported-by: default avatarTim Murray <timmurray@google.com>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Reviewed-by: default avatarShakeel Butt <shakeelb@google.com>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Minchan Kim <minchan@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    fa7fc75f
page_alloc.c 265 KB