The default cache-clean-interval is set to 10 minutes, in order to lower
the overhead of the qcow2 caches (before the default was 0, i.e.
disabled).
Signed-off-by: Leonid Bloch <lbloch@janustech.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
---
block/qcow2.c | 2 +-
block/qcow2.h | 1 +
docs/qcow2-cache.txt | 4 ++--
qapi/block-core.json | 3 ++-
qemu-options.hx | 2 +-
5 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index 1445cd5360..f885afa0ed 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -944,7 +944,7 @@ static int qcow2_update_options_prepare(BlockDriverState *bs,
/* New interval for cache cleanup timer */
r->cache_clean_interval =
qemu_opt_get_number(opts, QCOW2_OPT_CACHE_CLEAN_INTERVAL,
- s->cache_clean_interval);
+ DEFAULT_CACHE_CLEAN_INTERVAL);
#ifndef CONFIG_LINUX
if (r->cache_clean_interval != 0) {
error_setg(errp, QCOW2_OPT_CACHE_CLEAN_INTERVAL
diff --git a/block/qcow2.h b/block/qcow2.h
index 0f0e3534bf..8c863897b0 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -82,6 +82,7 @@
#define DEFAULT_CLUSTER_SIZE S_64KiB
+#define DEFAULT_CACHE_CLEAN_INTERVAL 600 /* seconds */
#define QCOW2_OPT_LAZY_REFCOUNTS "lazy-refcounts"
#define QCOW2_OPT_DISCARD_REQUEST "pass-discard-request"
diff --git a/docs/qcow2-cache.txt b/docs/qcow2-cache.txt
index 5965d3d094..15ae797931 100644
--- a/docs/qcow2-cache.txt
+++ b/docs/qcow2-cache.txt
@@ -209,8 +209,8 @@ This 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. Setting it to 0
+disables this feature.
Note that this functionality currently relies on the MADV_DONTNEED
argument for madvise() to actually free the memory. This is a
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 4c7a37afdc..08c27b9af7 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -2827,7 +2827,8 @@
#
# @cache-clean-interval: clean unused entries in the L2 and refcount
# caches. The interval is in seconds. The default value
-# is 0 and it disables this feature (since 2.5)
+# is 600, and 0 disables this feature. (since 2.5)
+#
# @encrypt: Image decryption options. Mandatory for
# encrypted images, except when doing a metadata-only
# probe of the image. (since 2.10)
diff --git a/qemu-options.hx b/qemu-options.hx
index d5f4bcadd4..2975fdf9f8 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -757,7 +757,7 @@ it which is not used for the L2 cache)
@item cache-clean-interval
Clean unused entries in the L2 and refcount caches. The interval is in seconds.
-The default value is 0 and it disables this feature.
+The default value is 600. Setting it to 0 disables this feature.
@item pass-discard-request
Whether discard requests to the qcow2 device should be forwarded to the data
--
2.17.1
On Tue 18 Sep 2018 05:29:22 PM CEST, Leonid Bloch wrote:
> /* New interval for cache cleanup timer */
> r->cache_clean_interval =
> qemu_opt_get_number(opts, QCOW2_OPT_CACHE_CLEAN_INTERVAL,
> - s->cache_clean_interval);
> + DEFAULT_CACHE_CLEAN_INTERVAL);
I just realized we're ignoring the old value (s->cache_clean_interval)
here. What's the consequence of this? (this was a change made by Kevin
Wolf in 5b0959a7d432062dcd740f8065004285b15695fa).
> #ifndef CONFIG_LINUX
> if (r->cache_clean_interval != 0) {
> error_setg(errp, QCOW2_OPT_CACHE_CLEAN_INTERVAL
> " not supported on this host");
Another thing that I noticed (see below)...
> diff --git a/block/qcow2.h b/block/qcow2.h
> index 0f0e3534bf..8c863897b0 100644
> --- a/block/qcow2.h
> +++ b/block/qcow2.h
> @@ -82,6 +82,7 @@
>
> #define DEFAULT_CLUSTER_SIZE S_64KiB
>
> +#define DEFAULT_CACHE_CLEAN_INTERVAL 600 /* seconds */
Shouldn't this be set to 0 in non-Linux platforms? Otherwise it will try
to set it to 600 by default in all platforms and will complain with the
"not supported on this host" error message that I quoted above.
Berto
Am 21.09.2018 um 14:35 hat Alberto Garcia geschrieben: > On Tue 18 Sep 2018 05:29:22 PM CEST, Leonid Bloch wrote: > > /* New interval for cache cleanup timer */ > > r->cache_clean_interval = > > qemu_opt_get_number(opts, QCOW2_OPT_CACHE_CLEAN_INTERVAL, > > - s->cache_clean_interval); > > + DEFAULT_CACHE_CLEAN_INTERVAL); > > I just realized we're ignoring the old value (s->cache_clean_interval) > here. What's the consequence of this? (this was a change made by Kevin > Wolf in 5b0959a7d432062dcd740f8065004285b15695fa). I think the consequence is that bdrv_reopen() will not keep the current value if the option isn't given, but reset it to the default. Kevin
On Fri 21 Sep 2018 02:56:06 PM CEST, Kevin Wolf wrote: > Am 21.09.2018 um 14:35 hat Alberto Garcia geschrieben: >> On Tue 18 Sep 2018 05:29:22 PM CEST, Leonid Bloch wrote: >> > /* New interval for cache cleanup timer */ >> > r->cache_clean_interval = >> > qemu_opt_get_number(opts, QCOW2_OPT_CACHE_CLEAN_INTERVAL, >> > - s->cache_clean_interval); >> > + DEFAULT_CACHE_CLEAN_INTERVAL); >> >> I just realized we're ignoring the old value (s->cache_clean_interval) >> here. What's the consequence of this? (this was a change made by Kevin >> Wolf in 5b0959a7d432062dcd740f8065004285b15695fa). > > I think the consequence is that bdrv_reopen() will not keep the current > value if the option isn't given, but reset it to the default. But does it happen in practice? bdrv_reopen() always keeps the current set of options unless they're overridden, and in my new "blockdev-reopen" patches the idea is that if you don't specify the value then it should be reset to the default. Berto
On 9/21/18 3:35 PM, Alberto Garcia wrote:
> On Tue 18 Sep 2018 05:29:22 PM CEST, Leonid Bloch wrote:
>> /* New interval for cache cleanup timer */
>> r->cache_clean_interval =
>> qemu_opt_get_number(opts, QCOW2_OPT_CACHE_CLEAN_INTERVAL,
>> - s->cache_clean_interval);
>> + DEFAULT_CACHE_CLEAN_INTERVAL);
>
> I just realized we're ignoring the old value (s->cache_clean_interval)
> here. What's the consequence of this? (this was a change made by Kevin
> Wolf in 5b0959a7d432062dcd740f8065004285b15695fa).
>
>> #ifndef CONFIG_LINUX
>> if (r->cache_clean_interval != 0) {
>> error_setg(errp, QCOW2_OPT_CACHE_CLEAN_INTERVAL
>> " not supported on this host");
>
> Another thing that I noticed (see below)...
>
>> diff --git a/block/qcow2.h b/block/qcow2.h
>> index 0f0e3534bf..8c863897b0 100644
>> --- a/block/qcow2.h
>> +++ b/block/qcow2.h
>> @@ -82,6 +82,7 @@
>>
>> #define DEFAULT_CLUSTER_SIZE S_64KiB
>>
>> +#define DEFAULT_CACHE_CLEAN_INTERVAL 600 /* seconds */
>
> Shouldn't this be set to 0 in non-Linux platforms? Otherwise it will try
> to set it to 600 by default in all platforms and will complain with the
> "not supported on this host" error message that I quoted above.
You're right! Will fix, thanks.
Leonid.
>
> Berto
>
© 2016 - 2025 Red Hat, Inc.