• Darrick J. Wong's avatar
    xfs: throttle inode inactivation queuing on memory reclaim · 40b1de00
    Darrick J. Wong authored
    Now that we defer inode inactivation, we've decoupled the process of
    unlinking or closing an inode from the process of inactivating it.  In
    theory this should lead to better throughput since we now inactivate the
    queued inodes in batches instead of one at a time.
    
    Unfortunately, one of the primary risks with this decoupling is the loss
    of rate control feedback between the frontend and background threads.
    In other words, a rm -rf /* thread can run the system out of memory if
    it can queue inodes for inactivation and jump to a new CPU faster than
    the background threads can actually clear the deferred work.  The
    workers can get scheduled off the CPU if they have to do IO, etc.
    
    To solve this problem, we configure a shrinker so that it will activate
    the /second/ time the shrinkers are called.  The custom shrinker will
    queue all percpu deferred inactivation workers immediately and set a
    flag to force frontend callers who are releasing a vfs inode to wait for
    the inactivation workers.
    
    On my test VM with 560M of RAM and a 2TB filesystem, this seems to solve
    most of the OOMing problem when deleting 10 million inodes.
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
    40b1de00
xfs_icache.h 2.78 KB