From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:45728) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SWrmC-0007Ia-0C for qemu-devel@nongnu.org; Tue, 22 May 2012 12:17:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SWrm8-0001Yw-Qd for qemu-devel@nongnu.org; Tue, 22 May 2012 12:17:35 -0400 Received: from mail-pb0-f45.google.com ([209.85.160.45]:45575) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SWrm8-0001YK-I8 for qemu-devel@nongnu.org; Tue, 22 May 2012 12:17:32 -0400 Received: by pbbro12 with SMTP id ro12so10359091pbb.4 for ; Tue, 22 May 2012 09:17:30 -0700 (PDT) Sender: Paolo Bonzini From: Paolo Bonzini Date: Tue, 22 May 2012 18:17:11 +0200 Message-Id: <1337703438-9764-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 1.2 0/7] Manual writethrough cache and cache mode toggle List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com 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 patch: real 9m22.416s user 12m8.955s sys 3m46.331s real 9m21.602s user 12m20.124s sys 3m51.126s real 9m22.258s user 12m14.900s sys 3m48.595s with patch: real 9m17.617s user 12m16.837s sys 3m48.637s real 9m18.926s user 12m20.083s sys 3m50.458s real 9m15.751s user 12m41.944s sys 3m56.447s Unlike the RFC, this is tested exactly with these seven patches. The RFC was tested with follow-up cleanups that hid the problem in patch 3. v1->v2: only patch 3 changed, was completely backwards in v1 Paolo Bonzini (7): block: flush in writethrough mode after writes savevm: flush after saving vm state block: always open protocol in writeback mode block: copy enable_write_cache in bdrv_append block: add bdrv_set_enable_write_cache ide: support enable/disable write cache qcow2: always operate caches in writeback mode 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 +- 8 files changed, 39 insertions(+), 51 deletions(-)