All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 25/37] docs: document how to use the l2-cache-entry-size parameter
Date: Fri,  2 Mar 2018 19:54:36 +0100	[thread overview]
Message-ID: <20180302185448.6314-26-kwolf@redhat.com> (raw)
In-Reply-To: <20180302185448.6314-1-kwolf@redhat.com>

From: Alberto Garcia <berto@igalia.com>

This patch updates docs/qcow2-cache.txt explaining how to use the new
l2-cache-entry-size parameter.

Here's a more detailed technical description of this feature:

   https://lists.gnu.org/archive/html/qemu-block/2017-09/msg00635.html

And here are some performance numbers:

   https://lists.gnu.org/archive/html/qemu-block/2017-12/msg00507.html

Signed-off-by: Alberto Garcia <berto@igalia.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 docs/qcow2-cache.txt | 46 +++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 43 insertions(+), 3 deletions(-)

diff --git a/docs/qcow2-cache.txt b/docs/qcow2-cache.txt
index b0571de4b8..170191a242 100644
--- a/docs/qcow2-cache.txt
+++ b/docs/qcow2-cache.txt
@@ -1,6 +1,6 @@
 qcow2 L2/refcount cache configuration
 =====================================
-Copyright (C) 2015 Igalia, S.L.
+Copyright (C) 2015, 2018 Igalia, S.L.
 Author: Alberto Garcia <berto@igalia.com>
 
 This work is licensed under the terms of the GNU GPL, version 2 or
@@ -118,8 +118,8 @@ There are three options available, and all of them take bytes:
 
 There are two things that need to be taken into account:
 
- - Both caches must have a size that is a multiple of the cluster
-   size.
+ - 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).
 
  - If you only set one of the options above, QEMU will automatically
    adjust the others so that the L2 cache is 4 times bigger than the
@@ -143,6 +143,46 @@ much less often than the L2 cache, so it's perfectly reasonable to
 keep it small.
 
 
+Using smaller cache entries
+---------------------------
+The qcow2 L2 cache stores complete tables by default. This means that
+if QEMU needs an entry from an L2 table then the whole table is read
+from disk and is kept in the cache. If the cache is full then a
+complete table needs to be evicted first.
+
+This can be inefficient with large cluster sizes since it results in
+more disk I/O and wastes more cache memory.
+
+Since QEMU 2.12 you can change the size of the L2 cache entry and make
+it smaller than the cluster size. This can be configured using the
+"l2-cache-entry-size" parameter:
+
+   -drive file=hd.qcow2,l2-cache-size=2097152,l2-cache-entry-size=4096
+
+Some things to take into account:
+
+ - The L2 cache entry size has the same restrictions as the cluster
+   size (power of two, at least 512 bytes).
+
+ - Smaller entry sizes generally improve the cache efficiency and make
+   disk I/O faster. This is particularly true with solid state drives
+   so it's a good idea to reduce the entry size in those cases. With
+   rotating hard drives the situation is a bit more complicated so you
+   should test it first and stay with the default size if unsure.
+
+ - Try different entry sizes to see which one gives faster performance
+   in your case. The block size of the host filesystem is generally a
+   good default (usually 4096 bytes in the case of ext4).
+
+ - Only the L2 cache can be configured this way. The refcount cache
+   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.
+
+
 Reducing the memory usage
 -------------------------
 It is possible to clean unused cache entries in order to reduce the
-- 
2.13.6

  parent reply	other threads:[~2018-03-02 18:56 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-02 18:54 [Qemu-devel] [PULL 00/37] Block layer patches Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 01/37] block: Add .bdrv_co_block_status() callback Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 02/37] nvme: Drop pointless .bdrv_co_get_block_status() Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 03/37] block: Switch passthrough drivers to .bdrv_co_block_status() Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 04/37] file-posix: Switch " Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 05/37] gluster: " Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 06/37] iscsi: Switch cluster_sectors to byte-based Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 07/37] iscsi: Switch iscsi_allocmap_update() " Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 08/37] iscsi: Switch to .bdrv_co_block_status() Kevin Wolf
2018-05-08 15:37   ` Peter Maydell
2018-05-08 16:38     ` Eric Blake
2018-03-02 18:54 ` [Qemu-devel] [PULL 09/37] null: " Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 10/37] parallels: " Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 11/37] qcow: " Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 12/37] qcow2: " Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 13/37] qed: " Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 14/37] raw: " Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 15/37] sheepdog: " Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 16/37] vdi: Avoid bitrot of debugging code Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 17/37] vdi: Switch to .bdrv_co_block_status() Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 18/37] vmdk: " Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 19/37] vpc: " Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 20/37] vvfat: " Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 21/37] block: Drop unused .bdrv_co_get_block_status() Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 22/37] block: fix write with zero flag set and iovector provided Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 23/37] iotest 033: add misaligned write-zeroes test via truncate Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 24/37] specs/qcow2: Fix documentation of the compressed cluster descriptor Kevin Wolf
2018-03-02 18:54 ` Kevin Wolf [this message]
2018-03-02 18:54 ` [Qemu-devel] [PULL 26/37] aio: rename aio_context_in_iothread() to in_aio_context_home_thread() Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 27/37] block: extract AIO_WAIT_WHILE() from BlockDriverState Kevin Wolf
2018-03-05 19:53   ` Eric Blake
2018-03-02 18:54 ` [Qemu-devel] [PULL 28/37] block: add BlockBackend->in_flight counter Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 29/37] block: test blk_aio_flush() with blk->root == NULL Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 30/37] Revert "IDE: Do not flush empty CDROM drives" Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 31/37] block: rename .bdrv_create() to .bdrv_co_create_opts() Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 32/37] qcow2: make qcow2_co_create2() a coroutine_fn Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 33/37] qemu-img: Make resize error message more general Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 34/37] block/ssh: Pull ssh_grow_file() from ssh_create() Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 35/37] block/ssh: Make ssh_grow_file() blocking Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 36/37] block/ssh: Add basic .bdrv_truncate() Kevin Wolf
2018-03-02 18:54 ` [Qemu-devel] [PULL 37/37] qcow2: Replace align_offset() with ROUND_UP() Kevin Wolf
2018-03-05 13:27 ` [Qemu-devel] [PULL 00/37] Block layer patches Peter Maydell

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=20180302185448.6314-26-kwolf@redhat.com \
    --to=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /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.