mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
Block layer patches:
- qcow2 cache option default changes (Linux: 32 MB maximum, limited by whatever cache size can be made use of with the specific image; default cache-clean-interval of 10 minutes) - reopen: Allow specifying unchanged child node references, and changing a few generic options (discard, detect-zeroes) - Fix werror/rerror defaults for -device drive=<node-name> - Test case fixes -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJbslavAAoJEH8JsnLIjy/Wi0kP/jU18AzfISoIhcJ2GBXYU2aV /FnUdB/L3mjMZOYkIgjDunw/fgfvelLqNdWb7xlijYeDPAiYKNEmJHX+iznE5ieP KnpHOxASSe8w5SFlnF8h30rLK05gcy/rg/QcuMX4KkU46E0C8t0rSLBJE5FdYiRU HN00jraTNfzyixuFxRVpqyadbhbCCEVwlwjDg3GMjGEML/WRk6jmhOOF5tVX72om gmVrzA1lAlzkFnx32Bloevp72iolWFLkyA86oNgPMwIFG0zj9lnK5B/fvnkVTY2v MnXGPwEVZUoZnif4nAXA2+bBqKT4Nbo21N8OylJhmNUi8K/rndiZdHH5Kph+yFod RGkBI4Pb5KxiI+YDiRKJmyQd/7IiWLarjP1nV3UjvPLnpmuTA54jRjDVmA6AW8OH BFu34+jfA4rll2dorVmQAFES4yvvj/brtTsCZfG5VNl60tigdqeLCZrQkNwR188q osKGWBEKy7+2SYj5q+s0BSO+caXmU2XLSdcE1gEHFQ51eU0mRZA0OrooNUuUk30E 42n8BZ77P8EGb7UQBmKqYwWL4hXQPWL3m3i7Mnz19+iwk/m8SHvj2nriouDoiVtf gtUwfr7TKvL9JcPLHrS3/j8boC5S4Rm+wlyyIlta8n2rS4bh1e2bGEZuNxZKyKCg Y9WO6KxbztbO9X0ZnxFW =ai81 -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging Block layer patches: - qcow2 cache option default changes (Linux: 32 MB maximum, limited by whatever cache size can be made use of with the specific image; default cache-clean-interval of 10 minutes) - reopen: Allow specifying unchanged child node references, and changing a few generic options (discard, detect-zeroes) - Fix werror/rerror defaults for -device drive=<node-name> - Test case fixes # gpg: Signature made Mon 01 Oct 2018 18:17:35 BST # gpg: using RSA key 7F09B272C88F2FD6 # gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>" # Primary key fingerprint: DC3D EB15 9A9A F95D 3D74 56FE 7F09 B272 C88F 2FD6 * remotes/kevin/tags/for-upstream: (23 commits) tests/test-bdrv-drain: Fix too late qemu_event_reset() test-replication: Lock AioContext around blk_unref() qcow2: Fix cache-clean-interval documentation block-backend: Set werror/rerror defaults in blk_new() qcow2: Explicit number replaced by a constant qcow2: Set the default cache-clean-interval to 10 minutes qcow2: Resize the cache upon image resizing qcow2: Increase the default upper limit on the L2 cache size qcow2: Assign the L2 cache relatively to the image size qcow2: Avoid duplication in setting the refcount cache size qcow2: Make sizes more humanly readable include: Add a lookup table of sizes qcow2: Options' documentation fixes block: Allow changing 'detect-zeroes' on reopen block: Allow changing 'discard' on reopen file-posix: Forbid trying to change unsupported options during reopen block: Forbid trying to change unsupported options during reopen block: Allow child references on reopen block: Don't look for child references in append_open_options() block: Remove child references from bs->{options,explicit_options} ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
e32e62f253
18 changed files with 307 additions and 151 deletions
|
@ -79,14 +79,14 @@ Choosing the right cache sizes
|
|||
In order to choose the cache sizes we need to know how they relate to
|
||||
the amount of allocated space.
|
||||
|
||||
The amount of virtual disk that can be mapped by the L2 and refcount
|
||||
The part of the virtual disk that can be mapped by the L2 and refcount
|
||||
caches (in bytes) is:
|
||||
|
||||
disk_size = l2_cache_size * cluster_size / 8
|
||||
disk_size = refcount_cache_size * cluster_size * 8 / refcount_bits
|
||||
|
||||
With the default values for cluster_size (64KB) and refcount_bits
|
||||
(16), that is
|
||||
(16), this becomes:
|
||||
|
||||
disk_size = l2_cache_size * 8192
|
||||
disk_size = refcount_cache_size * 32768
|
||||
|
@ -97,12 +97,16 @@ need:
|
|||
l2_cache_size = disk_size_GB * 131072
|
||||
refcount_cache_size = disk_size_GB * 32768
|
||||
|
||||
QEMU has a default L2 cache of 1MB (1048576 bytes) and a refcount
|
||||
cache of 256KB (262144 bytes), so using the formulas we've just seen
|
||||
we have
|
||||
For example, 1MB of L2 cache is needed to cover every 8 GB of the virtual
|
||||
image size (given that the default cluster size is used):
|
||||
|
||||
1048576 / 131072 = 8 GB of virtual disk covered by that cache
|
||||
262144 / 32768 = 8 GB
|
||||
8 GB / 8192 = 1 MB
|
||||
|
||||
The refcount cache is 4 times the cluster size by default. With the default
|
||||
cluster size of 64 KB, it is 256 KB (262144 bytes). This is sufficient for
|
||||
8 GB of image size:
|
||||
|
||||
262144 * 32768 = 8 GB
|
||||
|
||||
|
||||
How to configure the cache sizes
|
||||
|
@ -121,8 +125,15 @@ There are a few things that need to be taken into account:
|
|||
- Both caches must have a size that is a multiple of the cluster size
|
||||
(or the cache entry size: see "Using smaller cache sizes" below).
|
||||
|
||||
- The default L2 cache size is 8 clusters or 1MB (whichever is more),
|
||||
and the minimum is 2 clusters (or 2 cache entries, see below).
|
||||
- The maximum L2 cache size is 32 MB by default on Linux platforms (enough
|
||||
for full coverage of 256 GB images, with the default cluster size). This
|
||||
value can be modified using the "l2-cache-size" option. QEMU will not use
|
||||
more memory than needed to hold all of the image's L2 tables, regardless
|
||||
of this max. value.
|
||||
On non-Linux platforms the maximal value is smaller by default (8 MB) and
|
||||
this difference stems from the fact that on Linux the cache can be cleared
|
||||
periodically if needed, using the "cache-clean-interval" option (see below).
|
||||
The minimal L2 cache size is 2 clusters (or 2 cache entries, see below).
|
||||
|
||||
- The default (and minimum) refcount cache size is 4 clusters.
|
||||
|
||||
|
@ -130,6 +141,9 @@ There are a few things that need to be taken into account:
|
|||
memory as possible to the L2 cache before increasing the refcount
|
||||
cache size.
|
||||
|
||||
- At most two of "l2-cache-size", "refcount-cache-size", and "cache-size"
|
||||
can be set simultaneously.
|
||||
|
||||
Unlike L2 tables, refcount blocks are not used during normal I/O but
|
||||
only during allocations and internal snapshots. In most cases they are
|
||||
accessed sequentially (even during random guest I/O) so increasing the
|
||||
|
@ -177,9 +191,10 @@ Some things to take into account:
|
|||
always uses the cluster size as the entry size.
|
||||
|
||||
- If the L2 cache is big enough to hold all of the image's L2 tables
|
||||
(as explained in the "Choosing the right cache sizes" section
|
||||
earlier in this document) then none of this is necessary and you
|
||||
can omit the "l2-cache-entry-size" parameter altogether.
|
||||
(as explained in the "Choosing the right cache sizes" and "How to
|
||||
configure the cache sizes" sections in this document) then none of
|
||||
this is necessary and you can omit the "l2-cache-entry-size"
|
||||
parameter altogether.
|
||||
|
||||
|
||||
Reducing the memory usage
|
||||
|
@ -187,18 +202,18 @@ Reducing the memory usage
|
|||
It is possible to clean unused cache entries in order to reduce the
|
||||
memory usage during periods of low I/O activity.
|
||||
|
||||
The parameter "cache-clean-interval" defines an interval (in seconds).
|
||||
All cache entries that haven't been accessed during that interval are
|
||||
removed from memory.
|
||||
The parameter "cache-clean-interval" defines an interval (in seconds),
|
||||
after which all the cache entries that haven't been accessed during the
|
||||
interval are removed from memory. Setting this parameter to 0 disables this
|
||||
feature.
|
||||
|
||||
This example removes all unused cache entries every 15 minutes:
|
||||
The following example removes all unused cache entries every 15 minutes:
|
||||
|
||||
-drive file=hd.qcow2,cache-clean-interval=900
|
||||
|
||||
If unset, the default value for this parameter is 0 and it disables
|
||||
this feature.
|
||||
If unset, the default value for this parameter is 600 on platforms which
|
||||
support this functionality, and is 0 (disabled) on other platforms.
|
||||
|
||||
Note that this functionality currently relies on the MADV_DONTNEED
|
||||
argument for madvise() to actually free the memory. This is a
|
||||
Linux-specific feature, so cache-clean-interval is not supported in
|
||||
other systems.
|
||||
This functionality currently relies on the MADV_DONTNEED argument for
|
||||
madvise() to actually free the memory. This is a Linux-specific feature,
|
||||
so cache-clean-interval is not supported on other systems.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue