• P
    qemu-img: make convert async · 2d9187bc
    Peter Lieven 提交于
    the convert process is currently completely implemented with sync operations.
    That means it reads one buffer and then writes it. No parallelism and each sync
    request takes as long as it takes until it is completed.
    
    This can be a big performance hit when the convert process reads and writes
    to devices which do not benefit from kernel readahead or pagecache.
    In our environment we heavily have the following two use cases when using
    qemu-img convert.
    
    a) reading from NFS and writing to iSCSI for deploying templates
    b) reading from iSCSI and writing to NFS for backups
    
    In both processes we use libiscsi and libnfs so we have no kernel cache.
    
    This patch changes the convert process to work with parallel running coroutines
    which can significantly improve performance for network storage devices:
    
    qemu-img (master)
     nfs -> iscsi 22.8 secs
     nfs -> ram   11.7 secs
     ram -> iscsi 12.3 secs
    
    qemu-img-async (8 coroutines, in-order write disabled)
     nfs -> iscsi 11.0 secs
     nfs -> ram   10.4 secs
     ram -> iscsi  9.0 secs
    
    This patches introduces 2 new cmdline parameters. The -m parameter to specify
    the number of coroutines running in parallel (defaults to 8). And the -W parameter to
    allow qemu-img to write to the target out of order rather than sequential. This improves
    performance as the writes do not have to wait for each other to complete.
    Signed-off-by: NPeter Lieven <pl@kamp.de>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    2d9187bc
qemu-img.c 125.3 KB