Skip to content
  • Chris Mason's avatar
    Btrfs: avoid IO stalls behind congested devices in a multi-device FS · d644d8a1
    Chris Mason authored
    
    
    The btrfs IO submission threads try to service a bunch of devices with a small
    number of threads.  They do a congestion check to try and avoid waiting
    on requests for a busy device.
    
    The checks make sure we've sent a few requests down to a given device just so
    that we aren't bouncing between busy devices without actually sending down
    any IO.  The counter used to decide if we can switch to the next device
    is somewhat overloaded.  It is also being used to decide if we've done
    a good batch of requests between the WRITE_SYNC or regular priority lists.
    It may get reset to zero often, leaving us hammering on a busy device
    instead of moving on to another disk.
    
    This commit adds a new counter for the number of bios sent while
    servicing a device.  It doesn't get reset or fiddled with.  On
    multi-device filesystems, this fixes IO stalls in streaming
    write workloads.
    
    Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
    d644d8a1