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 <dplotni...@virtuozzo.com> >>> QAPI part: >>> Acked-by: Markus Armbruster <arm...@redhat.com> >>> --- >>> 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