• P
    qemu-img: align result of is_allocated_sectors · 8dcd3c9b
    Peter Lieven 提交于
    We currently don't enforce that the sparse segments we detect during convert are
    aligned. This leads to unnecessary and costly read-modify-write cycles either
    internally in Qemu or in the background on the storage device as nearly all
    modern filesystems or hardware have a 4k alignment internally.
    
    This patch modifies is_allocated_sectors so that its *pnum result will always
    end at an alignment boundary. This way all requests will end at an alignment
    boundary. The start of all requests will also be aligned as long as the results
    of get_block_status do not lead to an unaligned offset.
    
    The number of RMW cycles when converting an example image [1] to a raw device that
    has 4k sector size is about 4600 4k read requests to perform a total of about 15000
    write requests. With this path the additional 4600 read requests are eliminated while
    the number of total write requests stays constant.
    
    [1] https://cloud-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-amd64-disk1.vmdkSigned-off-by: NPeter Lieven <pl@kamp.de>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    8dcd3c9b
qemu-img.c 144.0 KB