* [Qemu-devel] [PATCH][RFC] Use writeback caching by default with qcow2
@ 2008-11-19 20:24 Anthony Liguori
2008-11-19 22:27 ` Stefan Berger
[not found] ` <gg325v$mfc$1@ger.gmane.org>
0 siblings, 2 replies; 3+ messages in thread
From: Anthony Liguori @ 2008-11-19 20:24 UTC (permalink / raw)
To: qemu-devel@nongnu.org; +Cc: kvm-devel
[-- Attachment #1: Type: text/plain, Size: 567 bytes --]
qcow2 writes a cluster reference count on every cluster update. This
causes performance to crater when using anything but cache=writeback.
This is most noticeable when using savevm. Right now, qcow2 isn't a
reliable format regardless of the type of cache your using because
metadata is not updated in the correct order. Considering this, I think
it's somewhat reasonable to use writeback caching by default with qcow2
files.
It at least avoids the massive performance regression for users until we
sort out the issues in qcow2.
Regards,
Anthony Liguori
[-- Attachment #2: block-qcow2-default-caching.patch --]
[-- Type: text/x-patch, Size: 2769 bytes --]
Index: vl.c
===================================================================
--- vl.c (revision 5751)
+++ vl.c (working copy)
@@ -2225,7 +2225,7 @@
unit_id = -1;
translation = BIOS_ATA_TRANSLATION_AUTO;
index = -1;
- cache = 1;
+ cache = 3;
if (machine->use_scsi) {
type = IF_SCSI;
@@ -2496,6 +2496,8 @@
bdrv_flags |= BDRV_O_NOCACHE;
else if (cache == 2) /* write-back */
bdrv_flags |= BDRV_O_CACHE_WB;
+ else if (cache == 3) /* not specified */
+ bdrv_flags |= BDRV_O_CACHE_DEF;
if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0 || qemu_key_check(bdrv, file)) {
fprintf(stderr, "qemu: could not open disk image %s\n",
file);
Index: qemu-doc.texi
===================================================================
--- qemu-doc.texi (revision 5751)
+++ qemu-doc.texi (working copy)
@@ -289,6 +289,12 @@
attempt to do disk IO directly to the guests memory. QEMU may still perform
an internal copy of the data.
+Some block drivers perform badly with @option{cache=writethrough}, most notably,
+qcow2. If performance is more important than correctness,
+@option{cache=writeback} should be used with qcow2. By default, if no explicit
+caching is specified for a qcow2 disk image, @option{cache=writeback} will be
+used. For all other disk types, @option{cache=writethrough} is the default.
+
Instead of @option{-cdrom} you can use:
@example
qemu -drive file=file,index=2,media=cdrom
Index: block-qcow2.c
===================================================================
--- block-qcow2.c (revision 5751)
+++ block-qcow2.c (working copy)
@@ -189,6 +189,14 @@
int len, i, shift, ret;
QCowHeader header;
+ /* Performance is terrible right now with cache=writethrough due mainly
+ * to reference count updates. If the user does not explicitly specify
+ * a caching type, force to writeback caching.
+ */
+ if ((flags & BDRV_O_CACHE_DEF)) {
+ flags |= BDRV_O_CACHE_WB;
+ flags &= ~BDRV_O_CACHE_DEF;
+ }
ret = bdrv_file_open(&s->hd, filename, flags);
if (ret < 0)
return ret;
Index: block.h
===================================================================
--- block.h (revision 5751)
+++ block.h (working copy)
@@ -49,8 +49,9 @@
bdrv_file_open()) */
#define BDRV_O_NOCACHE 0x0020 /* do not use the host page cache */
#define BDRV_O_CACHE_WB 0x0040 /* use write-back caching */
+#define BDRV_O_CACHE_DEF 0x0080 /* use default caching */
-#define BDRV_O_CACHE_MASK (BDRV_O_NOCACHE | BDRV_O_CACHE_WB)
+#define BDRV_O_CACHE_MASK (BDRV_O_NOCACHE | BDRV_O_CACHE_WB | BDRV_O_CACHE_DEF)
void bdrv_info(void);
void bdrv_info_stats(void);
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH][RFC] Use writeback caching by default with qcow2
2008-11-19 20:24 [Qemu-devel] [PATCH][RFC] Use writeback caching by default with qcow2 Anthony Liguori
@ 2008-11-19 22:27 ` Stefan Berger
[not found] ` <gg325v$mfc$1@ger.gmane.org>
1 sibling, 0 replies; 3+ messages in thread
From: Stefan Berger @ 2008-11-19 22:27 UTC (permalink / raw)
To: qemu-devel; +Cc: kvm-devel
[-- Attachment #1: Type: text/plain, Size: 3981 bytes --]
> aliguori@linux.vnet.ibm.com
> Sent by: qemu-devel-bounces+stefanb=us.ibm.com@nongnu.org
>
>
> qcow2 writes a cluster reference count on every cluster update. This
> causes performance to crater when using anything but cache=writeback.
> This is most noticeable when using savevm. Right now, qcow2 isn't a
> reliable format regardless of the type of cache your using because
> metadata is not updated in the correct order. Considering this, I think
> it's somewhat reasonable to use writeback caching by default with qcow2
> files.
>
> It at least avoids the massive performance regression for users until we
> sort out the issues in qcow2.
I applied it and tried 'delvm', 'savevm' and 'loadvm' and at least the
performance problems went away. Thanks.
I see some other problems after restoring a VM and X11 not responding to
keyboard inputs or Linux not shutting down properly. But these may be due
to me making some experiments with the 'unreliable' features of qcow2.
Stefan
>
> Regards,
>
> Anthony Liguori
> Index: vl.c
> ===================================================================
> --- vl.c (revision 5751)
> +++ vl.c (working copy)
> @@ -2225,7 +2225,7 @@
> unit_id = -1;
> translation = BIOS_ATA_TRANSLATION_AUTO;
> index = -1;
> - cache = 1;
> + cache = 3;
>
> if (machine->use_scsi) {
> type = IF_SCSI;
> @@ -2496,6 +2496,8 @@
> bdrv_flags |= BDRV_O_NOCACHE;
> else if (cache == 2) /* write-back */
> bdrv_flags |= BDRV_O_CACHE_WB;
> + else if (cache == 3) /* not specified */
> + bdrv_flags |= BDRV_O_CACHE_DEF;
> if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0 ||
> qemu_key_check(bdrv, file)) {
> fprintf(stderr, "qemu: could not open disk image %s\n",
> file);
> Index: qemu-doc.texi
> ===================================================================
> --- qemu-doc.texi (revision 5751)
> +++ qemu-doc.texi (working copy)
> @@ -289,6 +289,12 @@
> attempt to do disk IO directly to the guests memory. QEMU may still
perform
> an internal copy of the data.
>
> +Some block drivers perform badly with @option{cache=writethrough},
> most notably,
> +qcow2. If performance is more important than correctness,
> +@option{cache=writeback} should be used with qcow2. By default, if
> no explicit
> +caching is specified for a qcow2 disk image, @option{cache=writeback}
will be
> +used. For all other disk types, @option{cache=writethrough} is the
default.
> +
> Instead of @option{-cdrom} you can use:
> @example
> qemu -drive file=file,index=2,media=cdrom
> Index: block-qcow2.c
> ===================================================================
> --- block-qcow2.c (revision 5751)
> +++ block-qcow2.c (working copy)
> @@ -189,6 +189,14 @@
> int len, i, shift, ret;
> QCowHeader header;
>
> + /* Performance is terrible right now with cache=writethrough due
mainly
> + * to reference count updates. If the user does not explicitly
specify
> + * a caching type, force to writeback caching.
> + */
> + if ((flags & BDRV_O_CACHE_DEF)) {
> + flags |= BDRV_O_CACHE_WB;
> + flags &= ~BDRV_O_CACHE_DEF;
> + }
> ret = bdrv_file_open(&s->hd, filename, flags);
> if (ret < 0)
> return ret;
> Index: block.h
> ===================================================================
> --- block.h (revision 5751)
> +++ block.h (working copy)
> @@ -49,8 +49,9 @@
> bdrv_file_open()) */
> #define BDRV_O_NOCACHE 0x0020 /* do not use the host page cache */
> #define BDRV_O_CACHE_WB 0x0040 /* use write-back caching */
> +#define BDRV_O_CACHE_DEF 0x0080 /* use default caching */
>
> -#define BDRV_O_CACHE_MASK (BDRV_O_NOCACHE | BDRV_O_CACHE_WB)
> +#define BDRV_O_CACHE_MASK (BDRV_O_NOCACHE | BDRV_O_CACHE_WB |
> BDRV_O_CACHE_DEF)
>
> void bdrv_info(void);
> void bdrv_info_stats(void);
[-- Attachment #2: Type: text/html, Size: 5702 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Qemu-devel] Re: [PATCH][RFC] Use writeback caching by default with qcow2
[not found] ` <gg325v$mfc$1@ger.gmane.org>
@ 2008-11-20 9:55 ` Avi Kivity
0 siblings, 0 replies; 3+ messages in thread
From: Avi Kivity @ 2008-11-20 9:55 UTC (permalink / raw)
To: Thomas Mueller; +Cc: qemu-devel, kvm
Thomas Mueller wrote:
>> Right now, qcow2 isn't a
>> reliable format regardless of the type of cache your using because
>> metadata is not updated in the correct order.
>>
>
> so you don't advise to use qcow2 as a VBD or what do you mean with "isn't
> reliable"?
>
Right, qcow2 is both very slow with cache=writethrough (or off), and may
corrupt itself if the host crashes at the wrong moment.
> or contrawise: on the other formats the metadata is updated in the
> correct order?
>
raw is the only format we're sure of.
--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2008-11-20 9:55 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-19 20:24 [Qemu-devel] [PATCH][RFC] Use writeback caching by default with qcow2 Anthony Liguori
2008-11-19 22:27 ` Stefan Berger
[not found] ` <gg325v$mfc$1@ger.gmane.org>
2008-11-20 9:55 ` [Qemu-devel] " Avi Kivity
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).