• Dave Chinner's avatar
    xfs: Lower CIL flush limit for large logs · 108a4235
    Dave Chinner authored
    The current CIL size aggregation limit is 1/8th the log size. This
    means for large logs we might be aggregating at least 250MB of dirty objects
    in memory before the CIL is flushed to the journal. With CIL shadow
    buffers sitting around, this means the CIL is often consuming >500MB
    of temporary memory that is all allocated under GFP_NOFS conditions.
    
    Flushing the CIL can take some time to do if there is other IO
    ongoing, and can introduce substantial log force latency by itself.
    It also pins the memory until the objects are in the AIL and can be
    written back and reclaimed by shrinkers. Hence this threshold also
    tends to determine the minimum amount of memory XFS can operate in
    under heavy modification without triggering the OOM killer.
    
    Modify the CIL space limit to prevent such huge amounts of pinned
    metadata from aggregating. We can have 2MB of log IO in flight at
    once, so limit aggregation to 16x this size. This threshold was
    chosen as it little impact on performance (on 16-way fsmark) or log
    traffic but pins a lot less memory on large logs especially under
    heavy memory pressure.  An aggregation limit of 8x had 5-10%
    performance degradation and a 50% increase in log throughput for
    the same workload, so clearly that was too small for highly
    concurrent workloads on large logs.
    
    This was found via trace analysis of AIL behaviour. e.g. insertion
    from a single CIL flush:
    
    xfs_ail_insert: old lsn 0/0 new lsn 1/3033090 type XFS_LI_INODE flags IN_AIL
    
    $ grep xfs_ail_insert /mnt/scratch/s.t |grep "new lsn 1/3033090" |wc -l
    1721823
    $
    
    So there were 1.7 million objects inserted into the AIL from this
    CIL checkpoint, the first at 2323.392108, the last at 2325.667566 which
    was the end of the trace (i.e. it hadn't finished). Clearly a major
    problem.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarAllison Collins <allison.henderson@oracle.com>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    108a4235
xfs_log_priv.h 22.1 KB