From: Anthony Liguori <anthony@codemonkey.ws>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC] block-queue: Delay and batch metadata writes
Date: Mon, 20 Sep 2010 10:40:33 -0500 [thread overview]
Message-ID: <4C978071.2010209@codemonkey.ws> (raw)
In-Reply-To: <4C9778EC.9060704@redhat.com>
On 09/20/2010 10:08 AM, Kevin Wolf wrote:
>> If you're comfortable with a writeback cache for metadata, then you
>> should also be comfortable with a writeback cache for data in which
>> case, cache=writeback is the answer.
>>
> Well, there is a difference: We don't pollute the host page cache with
> guest data and we don't get a virtual "disk cache" as big as the host
> RAM, but only a very limited queue of metadata.
>
> Basically, in qemu we have three different types of caching:
>
> 1. O_DSYNC, everything is always synced without any explicit request.
> This is cache=writethrough.
>
I actually think O_DSYNC is the wrong implementation of
cache=writethrough. cache=writethrough should behave just like
cache=none except that data goes through the page cache.
> 2. Nothing is ever synced. This is cache=unsafe.
>
> 3. We present a writeback disk cache to the guest and the guest needs
> to explicitly flush to gets its data safe on disk. This is
> cache=writeback and cache=none.
>
We shouldn't tie the virtual disk cache to which cache= option is used
in the host. cache=none means that all requests go directly to the
disk. cache=writeback means the host acts as a writeback cache.
If your disk is in writethrough mode, exposing cache=none as a writeback
disk cache is not correct.
> We're still lacking modes for O_DSYNC | O_DIRECT and unsafe | O_DIRECT,
> but they are entirely possible, because it's two different dimensions.
> (And I think Christoph was planning to actually make it two independent
> options)
>
I don't really think O_DSYNC | O_DIRECT makes much sense.
>> If it's a matter of batching, batching can't occur if you have a barrier
>> between steps 3 and 5. The only way you can get batching is by doing a
>> writeback cache for the metadata such that you can complete your request
>> before the metadata is written.
>>
>> Am I misunderstanding the idea?
>>
> No, I think you understand it right, but maybe you were not completely
> aware that cache=none doesn't mean writethrough.
>
No, cache=none means don't cache on the host.
In my mind, cache=none|cache=writethrough is specifically about
eliminating the host from the cache hierarchy. This is not a
correctness issue with respect to integrity but rather about data loss.
If you have strong storage with battery backed caches, then you can
relax flushes. However, if you've got a cache in the host and the host
isn't battery backed, that's no longer safe to do.
So even with cache=none, if we added a writeback cache for metadata, it
would really need to be an optional feature. Something like
cache=none|writethrough|metadata|writeback.
Regards,
Anthony Liguori
> Kevin
>
next prev parent reply other threads:[~2010-09-20 15:40 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-20 13:56 [Qemu-devel] [RFC] block-queue: Delay and batch metadata writes Kevin Wolf
2010-09-20 14:31 ` Anthony Liguori
2010-09-20 14:56 ` Anthony Liguori
2010-09-20 15:33 ` Kevin Wolf
2010-09-20 15:48 ` Anthony Liguori
2010-09-20 15:08 ` Kevin Wolf
2010-09-20 15:33 ` Avi Kivity
2010-09-20 15:38 ` Avi Kivity
2010-09-20 15:46 ` Kevin Wolf
2010-09-20 15:40 ` Anthony Liguori [this message]
2010-09-20 15:55 ` Kevin Wolf
2010-09-20 16:34 ` Anthony Liguori
2010-09-20 15:51 ` Anthony Liguori
2010-09-20 16:05 ` Avi Kivity
2010-09-21 9:13 ` Kevin Wolf
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=4C978071.2010209@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=kwolf@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 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.