• Tejun Heo's avatar
    mm: vmscan: disable memcg direct reclaim stalling if cgroup writeback support is in use · 97c9341f
    Tejun Heo authored
    Because writeback wasn't cgroup aware before, the usual dirty
    throttling mechanism in balance_dirty_pages() didn't work for
    processes under memcg limit.  The writeback path didn't know how much
    memory is available or how fast the dirty pages are being written out
    for a given memcg and balance_dirty_pages() didn't have any measure of
    IO back pressure for the memcg.
    
    To work around the issue, memcg implemented an ad-hoc dirty throttling
    mechanism in the direct reclaim path by stalling on pages under
    writeback which are encountered during direct reclaim scan.  This is
    rather ugly and crude - none of the configurability, fairness, or
    bandwidth-proportional distribution of the normal path.
    
    The previous patches implemented proper memcg aware dirty throttling
    when cgroup writeback is in use making the ad-hoc mechanism
    unnecessary.  This patch disables direct reclaim stalling for such
    case.
    
    Note: I disabled the parts which seemed obvious and it behaves fine
          while testing but my understanding of this code path is
          rudimentary and it's quite possible that I got something wrong.
          Please let me know if I got some wrong or more global_reclaim()
          sites should be updated.
    
    v2: The original patch removed the direct stalling mechanism which
        breaks legacy hierarchies.  Conditionalize instead of removing.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Wu Fengguang <fengguang.wu@intel.com>
    Cc: Greg Thelen <gthelen@google.com>
    Cc: Vladimir Davydov <vdavydov@parallels.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    97c9341f
vmscan.c 110 KB