This pull request is to address a few performance problems of qcow2 format:
1. non cluster-aligned write requests (to unallocated clusters) explicitly pad data with zeroes if there is no backing data. This can be avoided and the whole clusters are preallocated and zeroed in a single efficient write_zeroes() operation, also providing better host file continuity 2. moreover, efficient write_zeroes() operation can be used to preallocate space megabytes ahead which gives noticeable improvement on some storage types (e.g. distributed storages where space allocation operation is expensive) 3. preallocating/zeroing the clusters in advance makes possible to enable simultaneous writes to the same unallocated cluster, which is beneficial for parallel sequential write operations which are not cluster-aligned Performance test results are added to commit messages (see patch 3, 12) Anton Nefedov (9): qcow2: is_zero_sectors(): return true if area is outside of backing file qcow2: do not COW the empty areas qcow2: set inactive flag qcow2: handle_prealloc(): find out if area zeroed by earlier preallocation qcow2: fix misleading comment about L2 linking qcow2-cluster: slightly refactor handle_dependencies() qcow2-cluster: make handle_dependencies() logic easier to follow qcow2: allow concurrent unaligned writes to the same clusters iotest 046: test simultaneous cluster write error case Denis V. Lunev (3): qcow2: alloc space for COW in one chunk qcow2: preallocation at image expand qcow2: truncate preallocated space Pavel Butsykin (1): qcow2: check space leak at the end of the image block/qcow2-cache.c | 3 + block/qcow2-cluster.c | 216 +++++++++++++++++++++++----- block/qcow2-refcount.c | 21 +++ block/qcow2.c | 286 ++++++++++++++++++++++++++++++++++++- block/qcow2.h | 26 ++++ tests/qemu-iotests/026.out | 104 ++++++++++---- tests/qemu-iotests/026.out.nocache | 104 ++++++++++---- tests/qemu-iotests/029.out | 5 +- tests/qemu-iotests/046 | 38 ++++- tests/qemu-iotests/046.out | 23 +++ tests/qemu-iotests/060 | 2 +- tests/qemu-iotests/060.out | 13 +- tests/qemu-iotests/061.out | 5 +- tests/qemu-iotests/066 | 2 +- tests/qemu-iotests/066.out | 9 +- tests/qemu-iotests/098.out | 7 +- tests/qemu-iotests/108.out | 5 +- tests/qemu-iotests/112.out | 5 +- tests/qemu-iotests/154.out | 4 +- 19 files changed, 769 insertions(+), 109 deletions(-) -- 2.7.4