On 01.02.2017 13:38, Alberto Garcia wrote: > The metadata overlap checks introduced in a40f1c2add help detect > corruption in the qcow2 image by verifying that data writes don't > overlap with existing metadata sections. > > The 'refcount-block' check in particular iterates over the refcount > table in order to get the addresses of all refcount blocks and check > that none of them overlap with the region where we want to write. > > The problem with the refcount table is that since it always occupies > complete clusters its size is usually very big. With the default > values of cluster_size=64KB and refcount_bits=16 this table holds 8192 > entries, each one of them enough to map 2GB worth of host clusters. > > So unless we're using images with several TB of allocated data this > table is going to be mostly empty, and iterating over it is a waste of > CPU. If the storage backend is fast enough this can have an effect on > I/O performance. > > This patch keeps the index of the last used (i.e. non-zero) entry in > the refcount table and updates it every time the table changes. The > refcount-block overlap check then uses that index instead of reading > the whole table. > > In my tests with a 4GB qcow2 file stored in RAM this doubles the > amount of write IOPS. > > Signed-off-by: Alberto Garcia <be...@igalia.com> > --- > Changes: > > v2: > - Handle tables with holes correctly in alloc_refcount_block()
Thanks, applied to my block branch: https://github.com/XanClic/qemu/commits/block Max
signature.asc
Description: OpenPGP digital signature