• Brian Foster's avatar
    xfs: optimize near mode bnobt scans with concurrent cntbt lookups · dc8e69bd
    Brian Foster authored
    The near mode fallback algorithm consists of a left/right scan of
    the bnobt. This algorithm has very poor breakdown characteristics
    under worst case free space fragmentation conditions. If a suitable
    extent is far enough from the locality hint, each allocation may
    scan most or all of the bnobt before it completes. This causes
    pathological behavior and extremely high allocation latencies.
    
    While locality is important to near mode allocations, it is not so
    important as to incur pathological allocation latency to provide the
    asolute best available locality for every allocation. If the
    allocation is large enough or far enough away, there is a point of
    diminishing returns. As such, we can bound the overall operation by
    including an iterative cntbt lookup in the broader search. The cntbt
    lookup is optimized to immediately find the extent with best
    locality for the given size on each iteration. Since the cntbt is
    indexed by extent size, the lookup repeats with a variably
    aggressive increasing search key size until it runs off the edge of
    the tree.
    
    This approach provides a natural balance between the two algorithms
    for various situations. For example, the bnobt scan is able to
    satisfy smaller allocations such as for inode chunks or btree blocks
    more quickly where the cntbt search may have to search through a
    large set of extent sizes when the search key starts off small
    relative to the largest extent in the tree. On the other hand, the
    cntbt search more deterministically covers the set of suitable
    extents for larger data extent allocation requests that the bnobt
    scan may have to search the entire tree to locate.
    Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    dc8e69bd
xfs_trace.h 110 KB