From: Eric Blake <eblake@redhat.com>
To: Max Reitz <mreitz@redhat.com>, qemu-block@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v4 16/17] qapi: Expose new qcow2 overlap check options
Date: Mon, 04 May 2015 13:39:03 -0600 [thread overview]
Message-ID: <5547CAD7.6070408@redhat.com> (raw)
In-Reply-To: <1430766953-6913-17-git-send-email-mreitz@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 3789 bytes --]
On 05/04/2015 01:15 PM, Max Reitz wrote:
> Expose the two new options for controlling the memory usage of the
> overlap check implementation via QAPI.
>
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
> qapi/block-core.json | 37 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 37 insertions(+)
>
> diff --git a/qapi/block-core.json b/qapi/block-core.json
> index 1c17224..99456e6 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.json
> @@ -1509,6 +1509,39 @@
> 'mode': 'Qcow2OverlapCheckMode' } }
>
> ##
> +# @Qcow2OverlapStructures
> +#
> +# Contains options for controlling the behavior of the metadata overlap
> +# prevention structures.
> +#
> +# The primary structure used for overlap check and prevention is a bitmap
> +# (actually a bytemap) which has one entry per cluster designating the type(s)
> +# of metadata it contains. In order to save memory, there is an RLE-like
> +# representation of this bitmap, too.
> +#
> +# The whole array of clusters is chunked. The RLE representation of one chunk
> +# is converted to the equivalent bitmap whenever a cluster in the chunk is
> +# accessed. The bitmaps are kept for a limited number of chunks (as a cache). On
> +# cache eviction, the bitmap is converted back to RLE again.
Feels a bit verbose at describing the internal representation,
especially if we change the internals at some point in the future. I'm
more interested that there are two limits at play, and that tuning them
larger may consume more memory but offer better protection on large images.
> +#
> +# @bitmap-size: #optional size (in bytes) of the bitmap cache, defaults to
> +# 64 kB
> +#
Any requirement on it being a power of 2, or even a recommendation on
how large or small to make it in relation to an image size?
> +# @total-size-limit: #optional maximum total size (in bytes) of all the metadata
What happens if bitmap-size is larger than total-size-limit?
> +# overlap prevention data structures combined; if this limit
> +# is exceeded, a QCOW2_OVERLAP_CHECK_MEMORY_LIMIT_REACHED
> +# event will be emitted and some parts of the image may no
> +# longer be protected against erroneous overwriting of
> +# metadata by (meta)data of a different kind. Defaults to
> +# SIZE_MAX.
> +#
> +# Since: 2.4
> +##
> +{ 'type': 'Qcow2OverlapStructures',
Rebase conflict with my series that does s/type/struct/
> + 'data': { '*bitmap-size': 'int',
> + '*total-size-limit': 'int' } }
> +
> +##
> # @BlockdevOptionsQcow2
> #
> # Driver specific block device options for qcow2.
> @@ -1530,6 +1563,9 @@
> # @overlap-check: #optional which overlap checks to perform for writes
> # to the image, defaults to 'cached' (since 2.2)
> #
> +# @overlap-structures: #optional options for controlling the behavior of the
> +# metadata overlap prevention structures (since 2.4)
> +#
> # @cache-size: #optional the maximum total size of the L2 table and
> # refcount block caches in bytes (since 2.2)
> #
> @@ -1548,6 +1584,7 @@
> '*pass-discard-snapshot': 'bool',
> '*pass-discard-other': 'bool',
> '*overlap-check': 'Qcow2OverlapChecks',
> + '*overlap-structures': 'Qcow2OverlapStructures',
> '*cache-size': 'int',
> '*l2-cache-size': 'int',
> '*refcount-cache-size': 'int' } }
>
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
next prev parent reply other threads:[~2015-05-04 19:39 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-04 19:15 [Qemu-devel] [PATCH v4 00/17] qcow2: Add new overlap check functions Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 01/17] " Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 02/17] qcow2: Pull up overlap check option evaluation Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 03/17] qcow2: Create metadata list Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 04/17] qcow2/overlaps: Protect image header Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 05/17] qcow2/overlaps: Protect refcount table Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 06/17] qcow2/overlaps: Protect refcount blocks Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 07/17] qcow2/overlaps: Protect active L1 table Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 08/17] qcow2/overlaps: Protect active L2 tables Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 09/17] qcow2/overlaps: Protect snapshot table Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 10/17] qcow2/overlaps: Protect inactive L1 tables Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 11/17] qcow2/overlaps: Protect inactive L2 tables Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 12/17] qcow2: Use new metadata overlap check function Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 13/17] qcow2/overlaps: Add "memory limit reached" event Max Reitz
2015-05-04 19:32 ` Eric Blake
2015-05-06 13:05 ` Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 14/17] qcow2/overlaps: Add memory usage limit Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 15/17] qcow2: Add overlap structure memory size options Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 16/17] qapi: Expose new qcow2 overlap check options Max Reitz
2015-05-04 19:39 ` Eric Blake [this message]
2015-05-06 13:20 ` Max Reitz
2015-05-04 19:15 ` [Qemu-devel] [PATCH v4 17/17] iotests: Test qcow2's overlap check memory limit Max Reitz
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=5547CAD7.6070408@redhat.com \
--to=eblake@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.