• Mike Snitzer's avatar
    dm thin: sort the per thin deferred bios using an rb_tree · 67324ea1
    Mike Snitzer authored
    A thin-pool will allocate blocks using FIFO order for all thin devices
    which share the thin-pool.  Because of this simplistic allocation the
    thin-pool's space can become fragmented quite easily; especially when
    multiple threads are requesting blocks in parallel.
    
    Sort each thin device's deferred_bio_list based on logical sector to
    help reduce fragmentation of the thin-pool's ondisk layout.
    
    The following tables illustrate the realized gains/potential offered by
    sorting each thin device's deferred_bio_list.  An "io size"-sized random
    read of the device would result in "seeks/io" fragments being read, with
    an average "distance/seek" between each fragment.
    
    Data was written to a single thin device using multiple threads via
    iozone (8 threads, 64K for both the block_size and io_size).
    
    unsorted:
    
         io size   seeks/io distance/seek
      --------------------------------------
              4k    0.000   0b
             16k    0.013   11m
             64k    0.065   11m
            256k    0.274   10m
              1m    1.109   10m
              4m    4.411   10m
             16m    17.097  11m
             64m    60.055  13m
            256m    148.798 25m
              1g    809.929 21m
    
    sorted:
    
         io size   seeks/io distance/seek
      --------------------------------------
              4k    0.000   0b
             16k    0.000   1g
             64k    0.001   1g
            256k    0.003   1g
              1m    0.011   1g
              4m    0.045   1g
             16m    0.181   1g
             64m    0.747   1011m
            256m    3.299   1g
              1g    14.373  1g
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    Acked-by: default avatarJoe Thornber <ejt@redhat.com>
    67324ea1
dm-thin.c 84.5 KB