On Tue, Dec 30, 2014 at 01:07:12PM +0300, Denis V. Lunev wrote: > Plain image expansion spends a lot of time to update image file size. > This seriously affects the performance. The following simple test > qemu_img create -f parallels -o cluster_size=64k ./1.hds 64G > qemu_io -n -c "write -P 0x11 0 1024M" ./1.hds > could be improved if the format driver will pre-allocate some space > in the image file with a reasonable chunk. > > This patch preallocates 128 Mb using bdrv_write_zeroes, which should > normally use fallocate() call inside. Fallback to older truncate() > could be used as a fallback using image open options thanks to the > previous patch. > > The benefit is around 15%. > > This patch is final in this series. Block driver has near native > performance now. > > Signed-off-by: Denis V. Lunev <d...@openvz.org> > CC: Kevin Wolf <kw...@redhat.com> > CC: Stefan Hajnoczi <stefa...@redhat.com> > --- > block/parallels.c | 35 +++++++++++++++++++++++++++++++++-- > 1 file changed, 33 insertions(+), 2 deletions(-) > > diff --git a/block/parallels.c b/block/parallels.c > index 12a9cea..5ec4a0d 100644 > --- a/block/parallels.c > +++ b/block/parallels.c > @@ -82,6 +82,7 @@ typedef struct BDRVParallelsState { > int bat_cache_off; > int data_off; > > + int64_t prealloc_off;
This field name confused me. I think "data_end" would fit better. Otherwise looks good to me. Roman.