• Dave Chinner's avatar
    xfs: only run xfs_error_test if error injection is active · c76febef
    Dave Chinner authored
    Recent tests writing lots of small files showed the flusher thread
    being CPU bound and taking a long time to do allocations on a debug
    kernel. perf showed this as the prime reason:
    
                 samples  pcnt function                    DSO
                 _______ _____ ___________________________ _________________
    
               224648.00 36.8% xfs_error_test              [kernel.kallsyms]
                86045.00 14.1% xfs_btree_check_sblock      [kernel.kallsyms]
                39778.00  6.5% prandom32                   [kernel.kallsyms]
                37436.00  6.1% xfs_btree_increment         [kernel.kallsyms]
                29278.00  4.8% xfs_btree_get_rec           [kernel.kallsyms]
                27717.00  4.5% random32                    [kernel.kallsyms]
    
    Walking btree blocks during allocation checking them requires each
    block (a cache hit, so no I/O) call xfs_error_test(), which then
    does a random32() call as the first operation.  IOWs, ~50% of the
    CPU is being consumed just testing whether we need to inject an
    error, even though error injection is not active.
    
    Kill this overhead when error injection is not active by adding a
    global counter of active error traps and only calling into
    xfs_error_test when fault injection is active.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    c76febef
xfs_error.c 4.59 KB