From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Subject: [Qemu-devel] [RFC 0/6] block: generic copy-on-read
Date: Mon, 17 Oct 2011 16:47:26 +0100 [thread overview]
Message-ID: <1318866452-30026-1-git-send-email-stefanha@linux.vnet.ibm.com> (raw)
The new -drive copy-on-read=on|off feature populates the image file with data
from the backing file on read. This is useful when accessing images backed
over a slow medium (e.g. http over internet). All read data will be stored in
the local image file so it does not need to be fetched again in the future.
This series is a prerequisite for the image streaming feature, which uses
copy-on-read to populate the image file in the background while the VM is
running. However, the copy-on-read feature is useful on its own.
Copy-on-read is implemented by checking whether or not data is allocated in the
image file before reading it. If data is not allocated then it needs to be
read and written back to the image file.
The tricky bit is avoiding races with other I/O requests. These patches add
request tracking to BlockDriverState so that the list of pending requests is
available. Copy-on-read prevents races by serializing overlapping requests.
Finally, there is a performance impact when enabling this feature since an
additional write is performed. Serializing overlapping requests also means
that I/O patterns where multiple requests access the same cluster will see a
loss in parallelism. Perhaps we can be smarter about preventing corruption in
the future and win back some performance.
Git repo:
http://repo.or.cz/w/qemu/stefanha.git/shortlog/refs/heads/generic-copy-on-read
Stefan Hajnoczi (6):
block: add request tracking
block: add bdrv_set_copy_on_read()
block: wait for overlapping requests
block: request overlap detection
block: core copy-on-read logic
block: add -drive copy-on-read=on|off
block.c | 243 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
block.h | 3 +
block_int.h | 9 ++
blockdev.c | 6 ++
hmp-commands.hx | 5 +-
qemu-config.c | 4 +
qemu-options.hx | 9 ++-
trace-events | 1 +
8 files changed, 276 insertions(+), 4 deletions(-)
--
1.7.6.3
next reply other threads:[~2011-10-17 15:48 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-17 15:47 Stefan Hajnoczi [this message]
2011-10-17 15:47 ` [Qemu-devel] [RFC 1/6] block: add request tracking Stefan Hajnoczi
2011-11-02 16:30 ` Kevin Wolf
2011-11-03 7:57 ` Stefan Hajnoczi
2011-11-07 11:00 ` Zhi Yong Wu
2011-11-07 11:41 ` Stefan Hajnoczi
2011-11-08 6:13 ` Zhi Yong Wu
2011-10-17 15:47 ` [Qemu-devel] [RFC 2/6] block: add bdrv_set_copy_on_read() Stefan Hajnoczi
2011-11-02 16:36 ` Kevin Wolf
2011-11-03 8:01 ` Stefan Hajnoczi
2011-10-17 15:47 ` [Qemu-devel] [RFC 3/6] block: wait for overlapping requests Stefan Hajnoczi
2011-10-18 13:48 ` Marcelo Tosatti
2011-10-20 17:34 ` Stefan Hajnoczi
2011-11-03 14:17 ` Kevin Wolf
2011-10-17 15:47 ` [Qemu-devel] [RFC 4/6] block: request overlap detection Stefan Hajnoczi
2011-11-07 11:49 ` Zhi Yong Wu
2011-11-07 14:37 ` Stefan Hajnoczi
2011-11-08 6:34 ` Zhi Yong Wu
2011-11-08 8:16 ` Stefan Hajnoczi
2011-11-08 9:49 ` Zhi Yong Wu
2011-10-17 15:47 ` [Qemu-devel] [RFC 5/6] block: core copy-on-read logic Stefan Hajnoczi
2011-10-18 14:00 ` Marcelo Tosatti
2011-10-20 17:40 ` Stefan Hajnoczi
2011-10-18 14:03 ` Marcelo Tosatti
2011-11-03 14:30 ` Kevin Wolf
2011-10-17 15:47 ` [Qemu-devel] [RFC 6/6] block: add -drive copy-on-read=on|off Stefan Hajnoczi
2011-11-03 14:32 ` Kevin Wolf
2011-11-03 16:21 ` Stefan Hajnoczi
2011-11-01 14:28 ` [Qemu-devel] [RFC 0/6] block: generic copy-on-read Stefan Hajnoczi
2011-11-01 15:07 ` Marcelo Tosatti
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=1318866452-30026-1-git-send-email-stefanha@linux.vnet.ibm.com \
--to=stefanha@linux.vnet.ibm.com \
--cc=kwolf@redhat.com \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--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 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).