On 2013年11月27日 10:15, Hu Tao wrote:
This series implements full image preallocation to create a non-sparse image
file at creation time, both for raw and qcow2 format. The purpose is to avoid
performance deterioration of the guest cause by sparse image.
This series implements full preallocation by using
fallocate()/posix_fallocate(),
which have the advantage that it is fast when creating large image file.
Zero-filling is not implemented, as writing zeros to image could be slow for
large
file. (fallocate() ensures zero-filling, but posix_fallocate()) If users want
it,
we can maybe add a option to let users have a choice. Suggestions?
We have zero init in raw-posix:
static BlockDriver bdrv_file = {
...
.bdrv_has_zero_init = bdrv_has_zero_init_1,
}
so I think we have to zero-fill it if posix_fallocate doesn't ensure.
Fam
Base on Kevin's patch at:
http://lists.gnu.org/archive/html/qemu-devel/2011-01/msg03017.html
Hu Tao (6):
block: introduce prealloc_mode
block: add BlockDriver.bdrv_preallocate.
block/raw-posix: implement bdrv_preallocate
raw-posix: Add full image preallocation option
qcow2: implement bdrv_preallocate
qcow2: Add full image preallocation option
block.c | 13 +++++++++++
block/qcow2.c | 32 +++++++++++++++++++++------
block/raw-posix.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++
include/block/block.h | 7 ++++++
include/block/block_int.h | 3 +++
5 files changed, 104 insertions(+), 7 deletions(-)