All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC PATCH 0/7] Manual writethrough cache and cache mode toggle
@ 2012-05-18 14:18 Paolo Bonzini
  2012-05-18 14:18 ` [Qemu-devel] [RFC PATCH 1/7] block: flush in writethrough mode after writes Paolo Bonzini
                   ` (6 more replies)
  0 siblings, 7 replies; 10+ messages in thread
From: Paolo Bonzini @ 2012-05-18 14:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, stefanha, anthony

This is an alternative implementation of writethrough caching.  By always
opening protocols in writethrough mode and doing flushes manually after
every write, it achieves two results: 1) it makes flipping the cache mode
extremely easy; 2) it lets formats control flushes during metadata updates
even in writethrough mode, which makes the updates more efficient; 3)
it makes cache=writethrough automatically flush metadata without needing
extra work in the formats.

In practice, the performance result is a wash.  I measured "make -j3
vmlinux" on a 2-core guest/4-core host, with 2GB memory in the guest
and 8GB in the host.

Performance was measured starting qemu-kvm with an empty qcow2 image,
a virtio disk and cache=writethrough (F16 installation + exploded kernel
tarball in the backing file), and the results are as follows:

        without patches:
        real    9m25.057s user  12m11.091s sys  3m48.281s
        real    9m23.429s user  11m58.628s sys  3m47.125s
        real    9m23.524s user  12m2.458s sys   3m44.722s

        with patches:
        real    9m25.808s user  12m16.543s sys  3m50.648s
        real    9m22.711s user  12m12.172s sys  3m49.426s
        real    9m21.516s user  12m18.127s sys  3m50.762s

So 1%-2% more CPU usage was measured in the guest, but that doesn't make
much sense for virtio with ioeventfd, so I assume it is all within noise.

Any opinions?  Should I run any more tests, perhaps with cache=directsync?
Does performance of cache=writethrough matter much, especially if we flip
the default?

Thanks,

Paolo

Paolo Bonzini (7):
  block: flush in writethrough mode after writes
  block: flush in writethrough mode after snapshot operations
  savevm: flush after saving vm state
  block: do not pass BDRV_O_CACHE_WB to the protocol
  block: copy enable_write_cache in bdrv_append
  block: add bdrv_set_enable_write_cache
  ide: support enable/disable write cache
  block: do not handle writethrough in qcow2 caches

 block.c                |   20 +++++++++++++++++---
 block.h                |    1 +
 block/qcow2-cache.c    |   25 ++-----------------------
 block/qcow2-refcount.c |   12 ------------
 block/qcow2.c          |    7 ++-----
 block/qcow2.h          |    5 +----
 hw/ide/core.c          |   18 +++++++++++++++---
 savevm.c               |    2 +-
 9 files changed, 39 insertions(+), 51 deletions(-)

-- 
1.7.10.1

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2012-05-23 12:11 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-18 14:18 [Qemu-devel] [RFC PATCH 0/7] Manual writethrough cache and cache mode toggle Paolo Bonzini
2012-05-18 14:18 ` [Qemu-devel] [RFC PATCH 1/7] block: flush in writethrough mode after writes Paolo Bonzini
2012-05-18 14:18 ` [Qemu-devel] [RFC PATCH 2/7] savevm: flush after saving vm state Paolo Bonzini
2012-05-18 14:18 ` [Qemu-devel] [RFC PATCH 3/7] block: do not pass BDRV_O_CACHE_WB to the protocol Paolo Bonzini
2012-05-23 12:06   ` Stefan Hajnoczi
2012-05-23 12:11     ` Paolo Bonzini
2012-05-18 14:18 ` [Qemu-devel] [RFC PATCH 4/7] block: copy enable_write_cache in bdrv_append Paolo Bonzini
2012-05-18 14:18 ` [Qemu-devel] [RFC PATCH 5/7] block: add bdrv_set_enable_write_cache Paolo Bonzini
2012-05-18 14:18 ` [Qemu-devel] [RFC PATCH 6/7] ide: support enable/disable write cache Paolo Bonzini
2012-05-18 14:18 ` [Qemu-devel] [RFC PATCH 7/7] block: do not handle writethrough in qcow2 caches Paolo Bonzini

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.