[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [PATCH v2] qcow2: Optimize the refcount-block overlap c
From: |
Max Reitz |
Subject: |
Re: [Qemu-block] [PATCH v2] qcow2: Optimize the refcount-block overlap check |
Date: |
Wed, 1 Feb 2017 22:13:36 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 |
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 <address@hidden>
> ---
> 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