diff mbox series

[v3,2/5] qcow2: Make the default L2 cache sufficient to cover the entire image

Message ID 20180808071051.30628-3-lbloch@janustech.com
State New
Headers show
Series qcow2: Make the L2 cache cover the whole image by default | expand

Commit Message

Leonid Bloch Aug. 8, 2018, 7:10 a.m. UTC
Sufficient L2 cache can noticeably improve the performance when using
large images with frequent I/O. The memory overhead is not significant
in most cases, as the cache size is only 1 MB for each 8 GB of virtual
image size (with the default cluster size of 64 KB). For cases with very
large images and/or small cluster sizes, there is an upper limit on the
default L2 cache: 32 MB. To modify this limit one can use the already
existing 'l2-cache-size' option. This option was previously documented
as the *maximum* L2 cache size, and this patch makes it behave as such,
instead of a constant size. Also, the existing option 'cache-size' can
limit the sum of both L2 and refcount caches, as previously.

Signed-off-by: Leonid Bloch <lbloch@janustech.com>
---
 block/qcow2.c              | 33 +++++++++++++--------------------
 block/qcow2.h              |  4 +---
 docs/qcow2-cache.txt       | 24 ++++++++++++++----------
 qemu-options.hx            |  6 +++---
 tests/qemu-iotests/137     |  1 -
 tests/qemu-iotests/137.out |  1 -
 6 files changed, 31 insertions(+), 38 deletions(-)

Comments

Alberto Garcia Aug. 8, 2018, 12:39 p.m. UTC | #1
On Wed 08 Aug 2018 09:10:48 AM CEST, Leonid Bloch wrote:
> Sufficient L2 cache can noticeably improve the performance when using
> large images with frequent I/O. The memory overhead is not significant
> in most cases, as the cache size is only 1 MB for each 8 GB of virtual
> image size (with the default cluster size of 64 KB). For cases with very
> large images and/or small cluster sizes, there is an upper limit on the
> default L2 cache: 32 MB.

I find this description a bit confusing.

First of all, because it's not true that the default will cover the
whole image: we're just increasing it, but any image > 256GB is going to
need more than 32MB (with 64KB clusters, that is).

Second, because it's not clear what happens if you increase that
maximum. Do you have to calculate the new value? Can you make it larger
than what you actually need?

The way I see it: there are two simple changes from the user's point of
view (they can even be two separate patches).

1) The default l2-cache-size is now 32MB. DEFAULT_L2_CACHE_CLUSTERS is
   useless now and disappears.

2) QEMU will only use as much memory from l2-cache-size as it can use to
   cover the whole image. Increasing the value of l2-cache-size will not
   use any additional memory, so it's safe to do.

Berto
Leonid Bloch Aug. 8, 2018, 1:07 p.m. UTC | #2
On 08/08/2018 03:39 PM, Alberto Garcia wrote:
> On Wed 08 Aug 2018 09:10:48 AM CEST, Leonid Bloch wrote:
>> Sufficient L2 cache can noticeably improve the performance when using
>> large images with frequent I/O. The memory overhead is not significant
>> in most cases, as the cache size is only 1 MB for each 8 GB of virtual
>> image size (with the default cluster size of 64 KB). For cases with very
>> large images and/or small cluster sizes, there is an upper limit on the
>> default L2 cache: 32 MB.
> 
> I find this description a bit confusing.
> 
> First of all, because it's not true that the default will cover the
> whole image: we're just increasing it, but any image > 256GB is going to
> need more than 32MB (with 64KB clusters, that is).

How about the following:

qcow2: Make the default L2 cache try to cover the entire image

> 
> Second, because it's not clear what happens if you increase that
> maximum. Do you have to calculate the new value? Can you make it larger
> than what you actually need?

What if I add after the full text of the comment (which already says 
about the 'l2-cache-size' option) something like: "In any case, the L2 
cache will be set to fit the virtual image size, unless it will require 
more space than the allowed maximum, in which case it will occupy the 
allowed maximum only."

> 
> The way I see it: there are two simple changes from the user's point of
> view (they can even be two separate patches).
> 
> 1) The default l2-cache-size is now 32MB. DEFAULT_L2_CACHE_CLUSTERS is
>     useless now and disappears.
I don't think that it can be a separate patch, because unless the other 
logic is changed, the cache will occupy 32 MB *always*, regardless of 
the image size, and that's quite a big and unneeded overhead.

> 2) QEMU will only use as much memory from l2-cache-size as it can use to
>     cover the whole image. Increasing the value of l2-cache-size will not
>     use any additional memory, so it's safe to do.

I'll add the clarification that it's safe to increase the l2-cache-size 
value to the commit message. It is reasonably safe, except of some 
corner cases with very large image sizes.

> 
> Berto
>
Alberto Garcia Aug. 8, 2018, 1:58 p.m. UTC | #3
On Wed 08 Aug 2018 03:07:10 PM CEST, Leonid Bloch wrote:
> On 08/08/2018 03:39 PM, Alberto Garcia wrote:
>> On Wed 08 Aug 2018 09:10:48 AM CEST, Leonid Bloch wrote:
>>> Sufficient L2 cache can noticeably improve the performance when using
>>> large images with frequent I/O. The memory overhead is not significant
>>> in most cases, as the cache size is only 1 MB for each 8 GB of virtual
>>> image size (with the default cluster size of 64 KB). For cases with very
>>> large images and/or small cluster sizes, there is an upper limit on the
>>> default L2 cache: 32 MB.
>> 
>> I find this description a bit confusing.
>> 
>> First of all, because it's not true that the default will cover the
>> whole image: we're just increasing it, but any image > 256GB is going to
>> need more than 32MB (with 64KB clusters, that is).
>
> How about the following:
>
> qcow2: Make the default L2 cache try to cover the entire image

That's what I think it's misleading, the patch only increases the
default cache size value. The current 1MB cache also tries to cover the
entire image, if the entire image is <= 8GB. But there's no new feature
that extends the cache size to cover the entire image. There's no "we
used to cover 8GB images by default, but now we cover all images".

In other words, the message that I think the user should get is: set
l2-cache-size as high as the maximum amount of memory you're willing to
use for the cache, and QEMU will ensure that it will only use as much as
it needs and no extra memory will be wasted. If you're working with a
100GB image it doesn't matter if you set l2-cache-size to 32MB or
1GB. It will use the exact same amount of RAM.

>> The way I see it: there are two simple changes from the user's point of
>> view (they can even be two separate patches).
>> 
>> 1) The default l2-cache-size is now 32MB. DEFAULT_L2_CACHE_CLUSTERS is
>>     useless now and disappears.
> I don't think that it can be a separate patch, because unless the other 
> logic is changed, the cache will occupy 32 MB *always*, regardless of 
> the image size, and that's quite a big and unneeded overhead.

Change the order of both patches then :-)

 1) If l2-cache-size > l2_metadata_size, then make l2-cache-size =
    l2_metadata_size. This is already useful on its own, even with the
    current default of 1MB.

 2) Increase the default to 32MB. This won't waste additional memory for
    small images because of the previous patch, and will cover images up
    to 256GB. If you have larger images you would need to increase
    l2-cache-size manually if you want to cache all the L2 metadata.

The way I see it is that the important change is (1): it's safe to
increase l2-cache-size, it won't waste memory[*]. (2) is nice too
because it will cover larger images by default, but if you're running
VMs with disk images larger than 256GB (which is not an extreme
scenario) you still need to increase the cache.

[*] In practice it's not wasting too much memory even now, because even
if you allocate a 32MB cache but only need 1MB, those extra 31MB are
going to be uninitialized and unused, and therefore not taking up any
physical memory. But you still need to have Qcow2CachedTable structures
for those entries, and any loop that needs to walk Qcow2Cache.entries is
going to be slower. So it's a good idea not to allocate unneeded memory
and to make this an explicit promise to the user.

Berto
Leonid Bloch Aug. 8, 2018, 2:35 p.m. UTC | #4
On 08/08/2018 04:58 PM, Alberto Garcia wrote:
> On Wed 08 Aug 2018 03:07:10 PM CEST, Leonid Bloch wrote:
>> On 08/08/2018 03:39 PM, Alberto Garcia wrote:
>>> On Wed 08 Aug 2018 09:10:48 AM CEST, Leonid Bloch wrote:
>>>> Sufficient L2 cache can noticeably improve the performance when using
>>>> large images with frequent I/O. The memory overhead is not significant
>>>> in most cases, as the cache size is only 1 MB for each 8 GB of virtual
>>>> image size (with the default cluster size of 64 KB). For cases with very
>>>> large images and/or small cluster sizes, there is an upper limit on the
>>>> default L2 cache: 32 MB.
>>>
>>> I find this description a bit confusing.
>>>
>>> First of all, because it's not true that the default will cover the
>>> whole image: we're just increasing it, but any image > 256GB is going to
>>> need more than 32MB (with 64KB clusters, that is).
>>
>> How about the following:
>>
>> qcow2: Make the default L2 cache try to cover the entire image
> 
> That's what I think it's misleading, the patch only increases the
> default cache size value. The current 1MB cache also tries to cover the
> entire image, if the entire image is <= 8GB. But there's no new feature
> that extends the cache size to cover the entire image. There's no "we
> used to cover 8GB images by default, but now we cover all images".
> 
> In other words, the message that I think the user should get is: set
> l2-cache-size as high as the maximum amount of memory you're willing to
> use for the cache, and QEMU will ensure that it will only use as much as
> it needs and no extra memory will be wasted. If you're working with a
> 100GB image it doesn't matter if you set l2-cache-size to 32MB or
> 1GB. It will use the exact same amount of RAM.

Then:

qcow2: Make the L2 cache size relative to the size of the image

[Something like] Now the L2 cache will be only as large as needed to 
cover the entire image, until a preset maximum (which is 32 MB by default).
?

> 
>>> The way I see it: there are two simple changes from the user's point of
>>> view (they can even be two separate patches).
>>>
>>> 1) The default l2-cache-size is now 32MB. DEFAULT_L2_CACHE_CLUSTERS is
>>>      useless now and disappears.
>> I don't think that it can be a separate patch, because unless the other
>> logic is changed, the cache will occupy 32 MB *always*, regardless of
>> the image size, and that's quite a big and unneeded overhead.
> 
> Change the order of both patches then :-)

Do you really think it's necessary? The increase of the default max size 
is directly tied to the functionality change: it will be harmful to 
increase the maximum before the new functionality is implemented, and 
there is no need to change the functionality if the default max is not 
increased.

Leonid.

> 
>   1) If l2-cache-size > l2_metadata_size, then make l2-cache-size =
>      l2_metadata_size. This is already useful on its own, even with the
>      current default of 1MB.
> 
>   2) Increase the default to 32MB. This won't waste additional memory for
>      small images because of the previous patch, and will cover images up
>      to 256GB. If you have larger images you would need to increase
>      l2-cache-size manually if you want to cache all the L2 metadata.
> 
> The way I see it is that the important change is (1): it's safe to
> increase l2-cache-size, it won't waste memory[*]. (2) is nice too
> because it will cover larger images by default, but if you're running
> VMs with disk images larger than 256GB (which is not an extreme
> scenario) you still need to increase the cache.
> 
> [*] In practice it's not wasting too much memory even now, because even
> if you allocate a 32MB cache but only need 1MB, those extra 31MB are
> going to be uninitialized and unused, and therefore not taking up any
> physical memory. But you still need to have Qcow2CachedTable structures
> for those entries, and any loop that needs to walk Qcow2Cache.entries is
> going to be slower. So it's a good idea not to allocate unneeded memory
> and to make this an explicit promise to the user.
> 
> Berto
>
Alberto Garcia Aug. 8, 2018, 3:16 p.m. UTC | #5
On Wed 08 Aug 2018 04:35:19 PM CEST, Leonid Bloch wrote:
>>>> The way I see it: there are two simple changes from the user's point of
>>>> view (they can even be two separate patches).
>>>>
>>>> 1) The default l2-cache-size is now 32MB. DEFAULT_L2_CACHE_CLUSTERS is
>>>>      useless now and disappears.
>>> I don't think that it can be a separate patch, because unless the other
>>> logic is changed, the cache will occupy 32 MB *always*, regardless of
>>> the image size, and that's quite a big and unneeded overhead.
>> 
>> Change the order of both patches then :-)
>
> Do you really think it's necessary? The increase of the default max
> size is directly tied to the functionality change: it will be harmful
> to increase the maximum before the new functionality is implemented,
> and there is no need to change the functionality if the default max is
> not increased.

I think that we're looking at this from two different perspectives.

a) If I understand you correctly, you see this as a way to make the user
   forget about the L2 cache: we guarantee that it's going to be big
   enough for the entire image, so simply forget about it. Exception: if
   you're using very large images you will have to set its size
   manually, but for the vast majority of cases you'll be alright with
   the default (32MB).

b) The way I see it: setting the right L2 cache size is not trivial, it
   depends on the image and cluster sizes, and it involves a trade-off
   between how much memory you want to use and how much performance
   you're willing to sacrifice. QEMU has many use cases and there's no
   good default, you need to make the numbers yourself if you want to
   fine-tune it. Don't blindly trust the new default size (32MB) because
   it won't be enough for many cases. But we can promise you this: make
   l2-cache-size the maximum amount of memory you're willing to spend on
   this disk image's cache, and we guarantee that we'll only use the
   amount that we need to give you the best performance.

I hope (a) was a fair description of what you're trying to achieve with
these patches. But I also hope that you can see why making l2_cache_size
= MIN(l2_cache_size, virtual_disk_size / (s->cluster_size / 8)) is a
worthwhile change on its own, even if we didn't increase the default
cache size to 32MB.

Berto
Alberto Garcia Aug. 8, 2018, 3:37 p.m. UTC | #6
On Wed 08 Aug 2018 03:58:02 PM CEST, Alberto Garcia wrote:
>  1) If l2-cache-size > l2_metadata_size, then make l2-cache-size =
>     l2_metadata_size. This is already useful on its own, even with the
>     current default of 1MB.
>
>  2) Increase the default to 32MB. This won't waste additional memory for
>     small images because of the previous patch, and will cover images up
>     to 256GB. If you have larger images you would need to increase
>     l2-cache-size manually if you want to cache all the L2 metadata.

Let's try this way: we had many users requesting us to add a new option
to set l2-cache-size=100%, but we never agreed on a good API. Patch (1)
would do precisely that (l2-cache-size=1T). Patch (2) changes the
default, which may be better and probably enough for many users, but
it's not what solves the problem.

Berto
Leonid Bloch Aug. 8, 2018, 5:13 p.m. UTC | #7
On 08/08/2018 06:16 PM, Alberto Garcia wrote:
> On Wed 08 Aug 2018 04:35:19 PM CEST, Leonid Bloch wrote:
>>>>> The way I see it: there are two simple changes from the user's point of
>>>>> view (they can even be two separate patches).
>>>>>
>>>>> 1) The default l2-cache-size is now 32MB. DEFAULT_L2_CACHE_CLUSTERS is
>>>>>       useless now and disappears.
>>>> I don't think that it can be a separate patch, because unless the other
>>>> logic is changed, the cache will occupy 32 MB *always*, regardless of
>>>> the image size, and that's quite a big and unneeded overhead.
>>>
>>> Change the order of both patches then :-)
>>
>> Do you really think it's necessary? The increase of the default max
>> size is directly tied to the functionality change: it will be harmful
>> to increase the maximum before the new functionality is implemented,
>> and there is no need to change the functionality if the default max is
>> not increased.
> 
> I think that we're looking at this from two different perspectives.
> 
> a) If I understand you correctly, you see this as a way to make the user
>     forget about the L2 cache: we guarantee that it's going to be big
>     enough for the entire image, so simply forget about it. Exception: if
>     you're using very large images you will have to set its size
>     manually, but for the vast majority of cases you'll be alright with
>     the default (32MB).

Yes, just with a small fix: my aim is not to make the user forget about 
the L2 cache, my aim is to make it as large as needed to cover the 
entire image in order to increase the performance. This implies 
increasing its size. Because for images smaller than 8 GB the 
performance will stay the same, and the memory usage will not be that 
different: less than 1 MB difference, while the overall QEMU memory 
overhead is about 600 MB. That's why I think that increasing the max 
size is an integral part of this patch, because just changing the 
behavior, without changing the max size, will not cause a noticeable 
improvement. But it will cause some complications, like changing the 
code for the current maximal value, and then changing to 32 MB in a 
separate patch. This doesn't look necessary to me.

Leonid.

> 
> b) The way I see it: setting the right L2 cache size is not trivial, it
>     depends on the image and cluster sizes, and it involves a trade-off
>     between how much memory you want to use and how much performance
>     you're willing to sacrifice. QEMU has many use cases and there's no
>     good default, you need to make the numbers yourself if you want to
>     fine-tune it. Don't blindly trust the new default size (32MB) because
>     it won't be enough for many cases. But we can promise you this: make
>     l2-cache-size the maximum amount of memory you're willing to spend on
>     this disk image's cache, and we guarantee that we'll only use the
>     amount that we need to give you the best performance.
> 
> I hope (a) was a fair description of what you're trying to achieve with
> these patches. But I also hope that you can see why making l2_cache_size
> = MIN(l2_cache_size, virtual_disk_size / (s->cluster_size / 8)) is a
> worthwhile change on its own, even if we didn't increase the default
> cache size to 32MB.
> 
> Berto
>
diff mbox series

Patch

diff --git a/block/qcow2.c b/block/qcow2.c
index ec9e6238a0..98cb96aaca 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -777,29 +777,35 @@  static void read_cache_sizes(BlockDriverState *bs, QemuOpts *opts,
                              uint64_t *refcount_cache_size, Error **errp)
 {
     BDRVQcow2State *s = bs->opaque;
-    uint64_t combined_cache_size;
+    uint64_t combined_cache_size, l2_cache_max_setting;
     bool l2_cache_size_set, refcount_cache_size_set, combined_cache_size_set;
-    int min_refcount_cache = MIN_REFCOUNT_CACHE_SIZE * s->cluster_size;
+    uint64_t min_refcount_cache = MIN_REFCOUNT_CACHE_SIZE * s->cluster_size;
 
     combined_cache_size_set = qemu_opt_get(opts, QCOW2_OPT_CACHE_SIZE);
     l2_cache_size_set = qemu_opt_get(opts, QCOW2_OPT_L2_CACHE_SIZE);
     refcount_cache_size_set = qemu_opt_get(opts, QCOW2_OPT_REFCOUNT_CACHE_SIZE);
 
     combined_cache_size = qemu_opt_get_size(opts, QCOW2_OPT_CACHE_SIZE, 0);
-    *l2_cache_size = qemu_opt_get_size(opts, QCOW2_OPT_L2_CACHE_SIZE, 0);
+    l2_cache_max_setting = qemu_opt_get_size(opts, QCOW2_OPT_L2_CACHE_SIZE,
+                                             DEFAULT_L2_CACHE_MAX_SIZE);
     *refcount_cache_size = qemu_opt_get_size(opts,
                                              QCOW2_OPT_REFCOUNT_CACHE_SIZE, 0);
 
     *l2_cache_entry_size = qemu_opt_get_size(
         opts, QCOW2_OPT_L2_CACHE_ENTRY_SIZE, s->cluster_size);
 
+    uint64_t virtual_disk_size = bs->total_sectors * BDRV_SECTOR_SIZE;
+    uint64_t max_l2_cache = virtual_disk_size / (s->cluster_size / 8);
+    *l2_cache_size = MIN(max_l2_cache, l2_cache_max_setting);
+
     if (combined_cache_size_set) {
         if (l2_cache_size_set && refcount_cache_size_set) {
             error_setg(errp, QCOW2_OPT_CACHE_SIZE ", " QCOW2_OPT_L2_CACHE_SIZE
                        " and " QCOW2_OPT_REFCOUNT_CACHE_SIZE " may not be set "
                        "at the same time");
             return;
-        } else if (*l2_cache_size > combined_cache_size) {
+        } else if (l2_cache_size_set &&
+                   (l2_cache_max_setting > combined_cache_size)) {
             error_setg(errp, QCOW2_OPT_L2_CACHE_SIZE " may not exceed "
                        QCOW2_OPT_CACHE_SIZE);
             return;
@@ -814,29 +820,16 @@  static void read_cache_sizes(BlockDriverState *bs, QemuOpts *opts,
         } else if (refcount_cache_size_set) {
             *l2_cache_size = combined_cache_size - *refcount_cache_size;
         } else {
-            uint64_t virtual_disk_size = bs->total_sectors * BDRV_SECTOR_SIZE;
-            uint64_t max_l2_cache = virtual_disk_size / (s->cluster_size / 8);
-
             /* Assign as much memory as possible to the L2 cache, and
              * use the remainder for the refcount cache */
-            if (combined_cache_size >= max_l2_cache + min_refcount_cache) {
-                *l2_cache_size = max_l2_cache;
+            if (combined_cache_size >= *l2_cache_size + min_refcount_cache) {
                 *refcount_cache_size = combined_cache_size - *l2_cache_size;
             } else {
-                *refcount_cache_size =
-                    MIN(combined_cache_size, min_refcount_cache);
+                *refcount_cache_size = MIN(combined_cache_size,
+                                           min_refcount_cache);
                 *l2_cache_size = combined_cache_size - *refcount_cache_size;
             }
         }
-    } else {
-        if (!l2_cache_size_set) {
-            *l2_cache_size = MAX(DEFAULT_L2_CACHE_BYTE_SIZE,
-                                 (uint64_t)DEFAULT_L2_CACHE_CLUSTERS
-                                 * s->cluster_size);
-        }
-        if (!refcount_cache_size_set) {
-            *refcount_cache_size = min_refcount_cache;
-        }
     }
 
     if (*l2_cache_entry_size < (1 << MIN_CLUSTER_BITS) ||
diff --git a/block/qcow2.h b/block/qcow2.h
index 81b844e936..d77a31d932 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -73,9 +73,7 @@ 
 /* Must be at least 4 to cover all cases of refcount table growth */
 #define MIN_REFCOUNT_CACHE_SIZE 4 /* clusters */
 
-/* Whichever is more */
-#define DEFAULT_L2_CACHE_CLUSTERS 8 /* clusters */
-#define DEFAULT_L2_CACHE_BYTE_SIZE 1048576 /* bytes */
+#define DEFAULT_L2_CACHE_MAX_SIZE 0x2000000U /* bytes */
 
 #define DEFAULT_CLUSTER_SIZE 65536
 
diff --git a/docs/qcow2-cache.txt b/docs/qcow2-cache.txt
index 5bf2a8ad29..c7625cdeb3 100644
--- a/docs/qcow2-cache.txt
+++ b/docs/qcow2-cache.txt
@@ -97,12 +97,14 @@  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
+QEMU will use a default L2 cache sufficient to cover the entire virtual
+size of an image, which with the default cluster size will result in 1 MB
+of cache for every 8 GB of virtual image size:
 
-   1048576 / 131072 = 8 GB of virtual disk covered by that cache
-    262144 /  32768 = 8 GB
+   65536 / 8 = 8192 = 8 GB / 1 MB
+
+A default refcount cache is 4 times the cluster size, which defaults to
+256 KB (262144 bytes).
 
 
 How to configure the cache sizes
@@ -121,8 +123,11 @@  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 default L2 cache size will cover the entire virtual size of an
+   image, but is capped at 32 MB (enough for image sizes of up to 256 GB
+   with the default cluster size). This maximum value can be reduced or
+   enlarged using the "l2-cache-size" option. The minimum is 2 clusters
+   (or 2 cache entries, see below).
 
  - The default (and minimum) refcount cache size is 4 clusters.
 
@@ -180,9 +185,8 @@  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.
+   (the default behavior) then none of this is necessary and you can
+   omit the "l2-cache-entry-size" parameter altogether.
 
 
 Reducing the memory usage
diff --git a/qemu-options.hx b/qemu-options.hx
index f6804758d3..d6e15b2f06 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -756,9 +756,9 @@  The maximum total size of the L2 table and refcount block caches in bytes
 
 @item l2-cache-size
 The maximum size of the L2 table cache in bytes
-(default: if cache-size is not defined - 1048576 bytes or 8 clusters, whichever
-is larger; otherwise, as large as possible or needed within the cache-size,
-while permitting the requested or the minimal refcount cache size)
+(default: if cache-size is not defined - 32M; otherwise, as large as possible
+or needed within the cache-size, while permitting the requested or the minimal
+refcount cache size)
 
 @item refcount-cache-size
 The maximum size of the refcount block cache in bytes
diff --git a/tests/qemu-iotests/137 b/tests/qemu-iotests/137
index 87965625d8..e3fb078588 100755
--- a/tests/qemu-iotests/137
+++ b/tests/qemu-iotests/137
@@ -109,7 +109,6 @@  $QEMU_IO \
     -c "reopen -o cache-size=1M,l2-cache-size=64k,refcount-cache-size=64k" \
     -c "reopen -o cache-size=1M,l2-cache-size=2M" \
     -c "reopen -o cache-size=1M,refcount-cache-size=2M" \
-    -c "reopen -o l2-cache-size=256T" \
     -c "reopen -o l2-cache-entry-size=33k" \
     -c "reopen -o l2-cache-entry-size=128k" \
     -c "reopen -o refcount-cache-size=256T" \
diff --git a/tests/qemu-iotests/137.out b/tests/qemu-iotests/137.out
index 6a2ffc71fd..70f245ae7a 100644
--- a/tests/qemu-iotests/137.out
+++ b/tests/qemu-iotests/137.out
@@ -19,7 +19,6 @@  Parameter 'lazy-refcounts' expects 'on' or 'off'
 cache-size, l2-cache-size and refcount-cache-size may not be set at the same time
 l2-cache-size may not exceed cache-size
 refcount-cache-size may not exceed cache-size
-L2 cache size too big
 L2 cache entry size must be a power of two between 512 and the cluster size (65536)
 L2 cache entry size must be a power of two between 512 and the cluster size (65536)
 Refcount cache size too big