qcow2: implement lazy refcounts

Lazy refcounts is a performance optimization for qcow2 that postpones
refcount metadata updates and instead marks the image dirty.  In the
case of crash or power failure the image will be left in a dirty state
and repaired next time it is opened.

Reducing metadata I/O is important for cache=writethrough and
cache=directsync because these modes guarantee that data is on disk
after each write (hence we cannot take advantage of caching updates in
RAM).  Refcount metadata is not needed for guest->file block address
translation and therefore does not need to be on-disk at the time of
write completion - this is the motivation behind the lazy refcount
optimization.

The lazy refcount optimization must be enabled at image creation time:

  qemu-img create -f qcow2 -o compat=1.1,lazy_refcounts=on a.qcow2 10G
  qemu-system-x86_64 -drive if=virtio,file=a.qcow2,cache=writethrough

Update qemu-iotests 031 and 036 since the extension header size changes
when we add feature bit table entries.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Stefan Hajnoczi 2012-07-27 09:05:22 +01:00 committed by Kevin Wolf
parent 91cf8a35e7
commit bfe8043e92
6 changed files with 107 additions and 24 deletions

View file

@ -54,7 +54,7 @@ header_length 72
Header extension:
magic 0x6803f857
length 48
length 96
data <binary>
Header extension:
@ -68,7 +68,7 @@ No errors were found on the image.
magic 0x514649fb
version 2
backing_file_offset 0xc8
backing_file_offset 0xf8
backing_file_size 0x17
cluster_bits 16
size 67108864
@ -92,7 +92,7 @@ data 'host_device'
Header extension:
magic 0x6803f857
length 48
length 96
data <binary>
Header extension:
@ -155,7 +155,7 @@ header_length 104
Header extension:
magic 0x6803f857
length 48
length 96
data <binary>
Header extension:
@ -169,7 +169,7 @@ No errors were found on the image.
magic 0x514649fb
version 3
backing_file_offset 0xe8
backing_file_offset 0x118
backing_file_size 0x17
cluster_bits 16
size 67108864
@ -193,7 +193,7 @@ data 'host_device'
Header extension:
magic 0x6803f857
length 48
length 96
data <binary>
Header extension: