• Chris Mason's avatar
    Btrfs: Avoid unplug storms during commit · 5f2cc086
    Chris Mason authored
    While doing a commit, btrfs makes sure all the metadata blocks
    were properly written to disk, calling wait_on_page_writeback for
    each page.  This writeback happens after allowing another transaction
    to start, so it competes for the disk with other processes in the FS.
    
    If the page writeback bit is still set, each wait_on_page_writeback might
    trigger an unplug, even though the page might be waiting for checksumming
    to finish or might be waiting for the async work queue to submit the
    bio.
    
    This trades wait_on_page_writeback for waiting on the extent writeback
    bits.  It won't trigger any unplugs and substantially improves performance
    in a number of workloads.
    
    This also changes the async bio submission to avoid requeueing if there
    is only one device.  The requeue just wastes CPU time because there are
    no other devices to service.
    Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
    5f2cc086
transaction.c 29.1 KB