* [PATCH][RFC] Use writeback caching by default with qcow2
@ 2008-11-19 20:24 Anthony Liguori
2008-11-19 22:27 ` Stefan Berger
2008-11-20 7:04 ` Thomas Mueller
0 siblings, 2 replies; 6+ 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] 6+ messages in thread* Re: [PATCH][RFC] Use writeback caching by default with qcow2
2008-11-19 20:24 [PATCH][RFC] Use writeback caching by default with qcow2 Anthony Liguori
@ 2008-11-19 22:27 ` Stefan Berger
2008-11-20 7:04 ` Thomas Mueller
1 sibling, 0 replies; 6+ 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] 6+ messages in thread* Re: [PATCH][RFC] Use writeback caching by default with qcow2
2008-11-19 20:24 [PATCH][RFC] Use writeback caching by default with qcow2 Anthony Liguori
2008-11-19 22:27 ` Stefan Berger
@ 2008-11-20 7:04 ` Thomas Mueller
2008-11-20 9:55 ` Avi Kivity
1 sibling, 1 reply; 6+ messages in thread
From: Thomas Mueller @ 2008-11-20 7:04 UTC (permalink / raw)
To: kvm; +Cc: qemu-devel
On Wed, 19 Nov 2008 14:24:53 -0600, Anthony Liguori 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"?
or contrawise: on the other formats the metadata is updated in the
correct order?
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH][RFC] Use writeback caching by default with qcow2
2008-11-20 7:04 ` Thomas Mueller
@ 2008-11-20 9:55 ` Avi Kivity
2008-11-20 15:53 ` walt
0 siblings, 1 reply; 6+ messages in thread
From: Avi Kivity @ 2008-11-20 9:55 UTC (permalink / raw)
To: Thomas Mueller; +Cc: kvm, qemu-devel
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] 6+ messages in thread
* Re: [PATCH][RFC] Use writeback caching by default with qcow2
2008-11-20 9:55 ` Avi Kivity
@ 2008-11-20 15:53 ` walt
2008-11-20 16:23 ` Thomas Mueller
0 siblings, 1 reply; 6+ messages in thread
From: walt @ 2008-11-20 15:53 UTC (permalink / raw)
To: kvm; +Cc: qemu-devel
On Thu, 20 Nov 2008, Avi Kivity wrote:
> 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.
With that in mind I converted my qcow2 image to raw, and I'm trying to use
that as a base image to create a new raw (writeable) image:
#qemu-img create -b vista.raw vista.delta
Formatting 'vista.delta', fmt=raw, backing_file=vista.raw, size=20971520 kB
qemu-img: Formatting or formatting option not supported for file format 'raw'
Doesn't that seem like a bug? Do people just not use raw images in this
way?
Thanks.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH][RFC] Use writeback caching by default with qcow2
2008-11-20 15:53 ` walt
@ 2008-11-20 16:23 ` Thomas Mueller
0 siblings, 0 replies; 6+ messages in thread
From: Thomas Mueller @ 2008-11-20 16:23 UTC (permalink / raw)
To: kvm; +Cc: qemu-devel
>>
>> > or contrawise: on the other formats the metadata is updated in the
>> > correct order?
>> >
>> >
>> raw is the only format we're sure of.
>
> With that in mind I converted my qcow2 image to raw, and I'm trying to
> use that as a base image to create a new raw (writeable) image:
>
> #qemu-img create -b vista.raw vista.delta Formatting 'vista.delta',
> fmt=raw, backing_file=vista.raw, size=20971520 kB qemu-img: Formatting
> or formatting option not supported for file format 'raw'
>
> Doesn't that seem like a bug? Do people just not use raw images in this
> way?
you can only use a backing file with qcow2 IMHO. also snapshots (savevm/
loadvm) work only with qcow2.
- Thomas
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-11-20 16:23 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-19 20:24 [PATCH][RFC] Use writeback caching by default with qcow2 Anthony Liguori
2008-11-19 22:27 ` Stefan Berger
2008-11-20 7:04 ` Thomas Mueller
2008-11-20 9:55 ` Avi Kivity
2008-11-20 15:53 ` walt
2008-11-20 16:23 ` Thomas Mueller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox