Message ID | 20180918152923.24824-9-lbloch@janustech.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Take the image size into account when allocating the L2 cache | expand |
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 >
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