From: Max Reitz <mreitz@redhat.com> To: Denis Plotnikov <dplotnikov@virtuozzo.com>, kwolf@redhat.com Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, den@virtuozzo.com, eblake@redhat.com Subject: Re: [Qemu-devel] [PATCH] [RFC] qcow2: add compression type feature Date: Mon, 29 Apr 2019 00:32:34 +0200 [thread overview] Message-ID: <cd22d738-d09c-4e2f-5ec6-8d3d34e2b341@redhat.com> (raw) In-Reply-To: <20190205090825.14059-1-dplotnikov@virtuozzo.com> [-- Attachment #1: Type: text/plain, Size: 3616 bytes --] On 05.02.19 10:08, Denis Plotnikov wrote: > The patch adds some preparation parts for incompatible compression type > feature into QCOW2 header that indicates that *all* compressed clusters > must be (de)compressed using a certain compression type. > > It is implied that the compression type is set on the image creation and > can be changed only later by image convertion, thus the only compression > algorithm is used for the image. > > The plan is to add support for ZSTD and then may be something more effective > in the future. > > ZSDT compression algorithm consumes 3-5 times less CPU power with a > comparable comression ratio with zlib. It would be wise to use it for > data compression f.e. for backups. > > The default compression is ZLIB. > > Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com> > --- > block/qcow2.c | 25 +++++++++++++++++++++++++ > block/qcow2.h | 26 ++++++++++++++++++++++---- > 2 files changed, 47 insertions(+), 4 deletions(-) Are there plans to pursue this further? [...] > diff --git a/block/qcow2.h b/block/qcow2.h > index 32cce9eee2..fdde5bbefd 100644 > --- a/block/qcow2.h > +++ b/block/qcow2.h > @@ -112,6 +112,10 @@ > #define QCOW2_OPT_REFCOUNT_CACHE_SIZE "refcount-cache-size" > #define QCOW2_OPT_CACHE_CLEAN_INTERVAL "cache-clean-interval" > > +/* Compression types */ > +#define QCOW2_COMPRESSION_TYPE_ZLIB 0 > +#define QCOW2_COMPRESSION_TYPE_ZSTD 1 We probably want QAPI types anyway (qemu-img info should report the compression type), so I think we could use them instead. > typedef struct QCowHeader { > uint32_t magic; > uint32_t version; > @@ -197,10 +201,13 @@ enum { > > /* Incompatible feature bits */ > enum { > - QCOW2_INCOMPAT_DIRTY_BITNR = 0, > - QCOW2_INCOMPAT_CORRUPT_BITNR = 1, > - QCOW2_INCOMPAT_DIRTY = 1 << QCOW2_INCOMPAT_DIRTY_BITNR, > - QCOW2_INCOMPAT_CORRUPT = 1 << QCOW2_INCOMPAT_CORRUPT_BITNR, > + QCOW2_INCOMPAT_DIRTY_BITNR = 0, > + QCOW2_INCOMPAT_CORRUPT_BITNR = 1, > + QCOW2_INCOMPAT_COMPRESSION_TYPE_BITNR = 2, > + QCOW2_INCOMPAT_DIRTY = 1 << QCOW2_INCOMPAT_DIRTY_BITNR, > + QCOW2_INCOMPAT_CORRUPT = 1 << QCOW2_INCOMPAT_CORRUPT_BITNR, > + QCOW2_INCOMPAT_COMPRESSION_TYPE = > + 1 << QCOW2_INCOMPAT_COMPRESSION_TYPE_BITNR, > > QCOW2_INCOMPAT_MASK = QCOW2_INCOMPAT_DIRTY > | QCOW2_INCOMPAT_CORRUPT, This mask needs to be expanded by QCOW2_INCOMPAT_COMPRESSION_TYPE. > @@ -256,6 +263,10 @@ typedef struct Qcow2BitmapHeaderExt { > uint64_t bitmap_directory_offset; > } QEMU_PACKED Qcow2BitmapHeaderExt; > > +typedef struct Qcow2CompressionTypeExt { > + uint32_t compression_type; > +} QEMU_PACKED Qcow2CompressionTypeExt; > + > typedef struct BDRVQcow2State { > int cluster_bits; > int cluster_size; > @@ -340,6 +351,13 @@ typedef struct BDRVQcow2State { > > CoQueue compress_wait_queue; > int nb_compress_threads; > + /** > + * Compression type used for the image. Default: 0 - ZLIB > + * The image compression type is set on image creation. > + * The only way to change the compression type is to convert the image > + * with the desired compresion type set *compression And, well, ideally qemu-img amend could perform this operation, too. Max > + */ > + uint32_t compression_type; > } BDRVQcow2State; > > typedef struct Qcow2COWRegion { > [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 488 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Max Reitz <mreitz@redhat.com> To: Denis Plotnikov <dplotnikov@virtuozzo.com>, kwolf@redhat.com Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org, den@virtuozzo.com Subject: Re: [Qemu-devel] [PATCH] [RFC] qcow2: add compression type feature Date: Mon, 29 Apr 2019 00:32:34 +0200 [thread overview] Message-ID: <cd22d738-d09c-4e2f-5ec6-8d3d34e2b341@redhat.com> (raw) Message-ID: <20190428223234.SDT9p1ZMjXq7CZaDxMyltbJCo8epSzH0okyyCxCorG8@z> (raw) In-Reply-To: <20190205090825.14059-1-dplotnikov@virtuozzo.com> [-- Attachment #1: Type: text/plain, Size: 3616 bytes --] On 05.02.19 10:08, Denis Plotnikov wrote: > The patch adds some preparation parts for incompatible compression type > feature into QCOW2 header that indicates that *all* compressed clusters > must be (de)compressed using a certain compression type. > > It is implied that the compression type is set on the image creation and > can be changed only later by image convertion, thus the only compression > algorithm is used for the image. > > The plan is to add support for ZSTD and then may be something more effective > in the future. > > ZSDT compression algorithm consumes 3-5 times less CPU power with a > comparable comression ratio with zlib. It would be wise to use it for > data compression f.e. for backups. > > The default compression is ZLIB. > > Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com> > --- > block/qcow2.c | 25 +++++++++++++++++++++++++ > block/qcow2.h | 26 ++++++++++++++++++++++---- > 2 files changed, 47 insertions(+), 4 deletions(-) Are there plans to pursue this further? [...] > diff --git a/block/qcow2.h b/block/qcow2.h > index 32cce9eee2..fdde5bbefd 100644 > --- a/block/qcow2.h > +++ b/block/qcow2.h > @@ -112,6 +112,10 @@ > #define QCOW2_OPT_REFCOUNT_CACHE_SIZE "refcount-cache-size" > #define QCOW2_OPT_CACHE_CLEAN_INTERVAL "cache-clean-interval" > > +/* Compression types */ > +#define QCOW2_COMPRESSION_TYPE_ZLIB 0 > +#define QCOW2_COMPRESSION_TYPE_ZSTD 1 We probably want QAPI types anyway (qemu-img info should report the compression type), so I think we could use them instead. > typedef struct QCowHeader { > uint32_t magic; > uint32_t version; > @@ -197,10 +201,13 @@ enum { > > /* Incompatible feature bits */ > enum { > - QCOW2_INCOMPAT_DIRTY_BITNR = 0, > - QCOW2_INCOMPAT_CORRUPT_BITNR = 1, > - QCOW2_INCOMPAT_DIRTY = 1 << QCOW2_INCOMPAT_DIRTY_BITNR, > - QCOW2_INCOMPAT_CORRUPT = 1 << QCOW2_INCOMPAT_CORRUPT_BITNR, > + QCOW2_INCOMPAT_DIRTY_BITNR = 0, > + QCOW2_INCOMPAT_CORRUPT_BITNR = 1, > + QCOW2_INCOMPAT_COMPRESSION_TYPE_BITNR = 2, > + QCOW2_INCOMPAT_DIRTY = 1 << QCOW2_INCOMPAT_DIRTY_BITNR, > + QCOW2_INCOMPAT_CORRUPT = 1 << QCOW2_INCOMPAT_CORRUPT_BITNR, > + QCOW2_INCOMPAT_COMPRESSION_TYPE = > + 1 << QCOW2_INCOMPAT_COMPRESSION_TYPE_BITNR, > > QCOW2_INCOMPAT_MASK = QCOW2_INCOMPAT_DIRTY > | QCOW2_INCOMPAT_CORRUPT, This mask needs to be expanded by QCOW2_INCOMPAT_COMPRESSION_TYPE. > @@ -256,6 +263,10 @@ typedef struct Qcow2BitmapHeaderExt { > uint64_t bitmap_directory_offset; > } QEMU_PACKED Qcow2BitmapHeaderExt; > > +typedef struct Qcow2CompressionTypeExt { > + uint32_t compression_type; > +} QEMU_PACKED Qcow2CompressionTypeExt; > + > typedef struct BDRVQcow2State { > int cluster_bits; > int cluster_size; > @@ -340,6 +351,13 @@ typedef struct BDRVQcow2State { > > CoQueue compress_wait_queue; > int nb_compress_threads; > + /** > + * Compression type used for the image. Default: 0 - ZLIB > + * The image compression type is set on image creation. > + * The only way to change the compression type is to convert the image > + * with the desired compresion type set *compression And, well, ideally qemu-img amend could perform this operation, too. Max > + */ > + uint32_t compression_type; > } BDRVQcow2State; > > typedef struct Qcow2COWRegion { > [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2019-04-28 22:34 UTC|newest] Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-02-05 9:08 [Qemu-devel] [PATCH] [RFC] qcow2: add compression type feature Denis Plotnikov 2019-04-28 22:32 ` Max Reitz [this message] 2019-04-28 22:32 ` Max Reitz 2019-05-16 7:50 ` Denis Plotnikov 2019-05-16 10:40 ` Max Reitz 2019-05-16 10:56 ` Denis Plotnikov 2019-04-30 9:58 ` Stefano Garzarella 2019-04-30 9:58 ` Stefano Garzarella 2019-04-30 14:56 ` Eric Blake 2019-04-30 14:56 ` Eric Blake
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=cd22d738-d09c-4e2f-5ec6-8d3d34e2b341@redhat.com \ --to=mreitz@redhat.com \ --cc=den@virtuozzo.com \ --cc=dplotnikov@virtuozzo.com \ --cc=eblake@redhat.com \ --cc=kwolf@redhat.com \ --cc=qemu-block@nongnu.org \ --cc=qemu-devel@nongnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).