[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v22 3/4] qcow2: add zstd cluster compression
From: |
Max Reitz |
Subject: |
Re: [PATCH v22 3/4] qcow2: add zstd cluster compression |
Date: |
Wed, 29 Apr 2020 14:24:46 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 |
On 29.04.20 12:38, Denis Plotnikov wrote:
>
>
> On 29.04.2020 13:24, Max Reitz wrote:
>> On 28.04.20 22:00, Denis Plotnikov wrote:
>>> zstd significantly reduces cluster compression time.
>>> It provides better compression performance maintaining
>>> the same level of the compression ratio in comparison with
>>> zlib, which, at the moment, is the only compression
>>> method available.
>>>
>>> The performance test results:
>>> Test compresses and decompresses qemu qcow2 image with just
>>> installed rhel-7.6 guest.
>>> Image cluster size: 64K. Image on disk size: 2.2G
>>>
>>> The test was conducted with brd disk to reduce the influence
>>> of disk subsystem to the test results.
>>> The results is given in seconds.
>>>
>>> compress cmd:
>>> time ./qemu-img convert -O qcow2 -c -o compression_type=[zlib|zstd]
>>> src.img [zlib|zstd]_compressed.img
>>> decompress cmd
>>> time ./qemu-img convert -O qcow2
>>> [zlib|zstd]_compressed.img uncompressed.img
>>>
>>> compression decompression
>>> zlib zstd zlib zstd
>>> ------------------------------------------------------------
>>> real 65.5 16.3 (-75 %) 1.9 1.6 (-16 %)
>>> user 65.0 15.8 5.3 2.5
>>> sys 3.3 0.2 2.0 2.0
>>>
>>> Both ZLIB and ZSTD gave the same compression ratio: 1.57
>>> compressed image size in both cases: 1.4G
>>>
>>> Signed-off-by: Denis Plotnikov <address@hidden>
>>> QAPI part:
>>> Acked-by: Markus Armbruster <address@hidden>
>>> ---
>>> docs/interop/qcow2.txt | 1 +
>>> configure | 2 +-
>>> qapi/block-core.json | 3 +-
>>> block/qcow2-threads.c | 169 +++++++++++++++++++++++++++++++++++++++++
>>> block/qcow2.c | 7 ++
>>> slirp | 2 +-
>>> 6 files changed, 181 insertions(+), 3 deletions(-)
>> [...]
>>
>>> diff --git a/block/qcow2-threads.c b/block/qcow2-threads.c
>>> index 7dbaf53489..a0b12e1b15 100644
>>> --- a/block/qcow2-threads.c
>>> +++ b/block/qcow2-threads.c
>> [...]
>>
>>> +static ssize_t qcow2_zstd_decompress(void *dest, size_t dest_size,
>>> + const void *src, size_t src_size)
>>> +{
>> [...]
>>
>>> + /*
>>> + * The compressed stream from the input buffer may consist of more
>>> + * than one zstd frame.
>> Can it?
>
> Potentially, it can, if another implemention of qcow2 saves a couple of
> frames for some reason.
Well, it can’t do that if qemu cannot decode it. Maybe there should be
a note in the specification on the precise format to expect.
If we decide that it might make sense for someone to encode a cluster
with multiple frames, then OK.
Max
signature.asc
Description: OpenPGP digital signature
[PATCH v22 4/4] iotests: 287: add qcow2 compression type test, Denis Plotnikov, 2020/04/28
[PATCH v22 1/4] qcow2: introduce compression type feature, Denis Plotnikov, 2020/04/28
[PATCH v22 2/4] qcow2: rework the cluster compression routine, Denis Plotnikov, 2020/04/28