qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: Kevin Wolf <kwolf@redhat.com>,
	QEMU Developers <qemu-devel@nongnu.org>,
	Christoph Hellwig <hch@lst.de>
Subject: Re: [Qemu-devel] [PATCH] RFC: Add new block driver for the VDI format
Date: Mon, 03 Aug 2009 16:02:58 +0300	[thread overview]
Message-ID: <4A76E002.2060301@redhat.com> (raw)
In-Reply-To: <4A764AAA.1030509@codemonkey.ws>

On 08/03/2009 05:25 AM, Anthony Liguori wrote:
> Avi Kivity wrote:
>> On 07/06/2009 04:37 PM, Anthony Liguori wrote:
>>>
>>> I'd really like to get rid of synchronous IO functions in the block 
>>> layer.  One way to do this is to insist that all new block drivers 
>>> only implement the AIO functions.
>>>
>>> I think we should make this decree but I'd like to know if other 
>>> people think this is unreasonable first.  One potential model of 
>>> block drivers would involve synchronous IO and threads.  I'm not a 
>>> big fan of that model and I don't think it's an easy conversion from 
>>> today's synchronous IO drivers to that model because the locking and 
>>> re-entrance needs careful consideration.
>>>
>>
>> I agree that sync+threads is not easy, but well performing async is 
>> much, much harder.  Consider that qcow2 still has synchronous 
>> operations, and that eliminating the RMW when writing a partial 
>> cluster concurrently (a very common operation with 64K clusters) is 
>> very hard to do ayncly and much easier syncly.
>
> Supporting parallel RMW operations is certainly difficult, but you're 
> confusing parallel RMW ops with asynchronous RMW ops.  You just have 
> to queue requests and handle them in order.  It's only mildly more 
> difficult to deal with asynchronous I/O and it avoids all the 
> nastiness associated with threads and locking.

I'm talking about a guest sequential write emitted as multiple adjacent 
requests in parallel.  Currently we'll write the first request and the 
second request in different locations, then do a rmw to merge the two 
blocks (I think...).

> Fundamentally, threads don't help the RMW problem because you probably 
> would just hold a look for the entire RMW operation so you're 
> effectively queuing any RMW op.

You do get some queuing but layout is improved, and it's not a W-RMW; 
instead it's a W-WW.

Theoretically anything you can do with threads you can do with async 
operations but experience has proven that async is much more difficult.  
Consider the last qcow2 bug.

>
>> Given in addition the large numbers of format drivers, I think we 
>> should prefer sync+threads over trying to convert all format drivers 
>> to full async.
>
> It's just shifting the problem from one place to another.  Instead of 
> figuring out the state machine, you have to figure out how to do the 
> locking.  The danger of the later is that it gives you the illusion 
> that it's an easy problem and is therefore prone to error.

Locking _is_ an easier problem than figuring out the state machine.  I 
can't prove this but there's numerous anecdotal evidence on the subject.

-- 
error compiling committee.c: too many arguments to function

  reply	other threads:[~2009-08-03 12:57 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-03 19:24 [Qemu-devel] [PATCH] RFC: Add new block driver for the VDI format Stefan Weil
2009-07-03 19:29 ` [Qemu-devel] [PATCH] Check availability of uuid header / lib Stefan Weil
2009-07-03 19:29   ` [Qemu-devel] [PATCH] Add new block driver for the VDI format Stefan Weil
2009-07-05  8:05     ` Christoph Hellwig
2009-07-05 14:02       ` Stefan Weil
2009-07-06 10:25         ` Christoph Hellwig
2009-07-06 17:19           ` Stefan Weil
2009-07-05 14:44     ` Kevin Wolf
2009-07-06 13:37 ` [Qemu-devel] [PATCH] RFC: " Anthony Liguori
2009-07-06 21:10   ` Stefan Weil
2009-07-06 21:28     ` Anthony Liguori
2009-07-07  7:55     ` Kevin Wolf
2009-07-07  9:04       ` Jamie Lokier
2009-07-07 10:30       ` Christoph Hellwig
2009-07-07 10:33         ` Kevin Wolf
2009-08-02 14:27   ` Avi Kivity
2009-08-03  2:25     ` Anthony Liguori
2009-08-03 13:02       ` Avi Kivity [this message]
2009-08-03 15:20         ` Christoph Hellwig
2009-07-23 15:58 ` [Qemu-devel] [PATCH] RFC: Add new block driver for the VDI format (aio version) Stefan Weil
2009-07-23 20:27   ` [Qemu-devel] [PATCH] Check availability of uuid header / lib Stefan Weil
2009-07-24  6:32     ` Christoph Egger
2009-10-01 18:13       ` Stefan Weil
2009-10-02  8:32         ` Christoph Egger
2009-10-01 18:10     ` [Qemu-devel] [PATCH] Check availability of uuid header / library Stefan Weil
2009-07-23 20:29   ` [Qemu-devel] [PATCH] Add new block driver for the VDI format (use aio) Stefan Weil
2009-07-24  9:18     ` Kevin Wolf
2009-07-24 16:20       ` Stefan Weil
2009-07-27  8:00         ` Kevin Wolf
2009-07-27  9:23           ` Jamie Lokier
2009-07-28  6:37             ` Amit Shah
2009-07-28  8:34               ` Jamie Lokier
2009-07-28  8:56                 ` Daniel P. Berrange
2009-07-28  9:03                   ` Jamie Lokier
2009-07-28  9:11                     ` Kevin Wolf
2009-07-31 15:04           ` Christoph Hellwig
2009-07-31 19:53             ` Stefan Weil
2009-07-31 15:25     ` Anthony Liguori
2009-07-31 18:27       ` Stefan Weil
2009-07-31 19:45         ` [Qemu-devel] [PATCH] Add new block driver for the VDI format (only aio supported) Stefan Weil
2009-07-23 20:30   ` [Qemu-devel] [PATCH] add support for new option of vdi format Stefan Weil
2009-07-23 20:34     ` [Qemu-devel] " Stefan Weil
2009-07-31 14:59     ` [Qemu-devel] " Christoph Hellwig
2009-08-13 16:53     ` Christoph Hellwig

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=4A76E002.2060301@redhat.com \
    --to=avi@redhat.com \
    --cc=anthony@codemonkey.ws \
    --cc=hch@lst.de \
    --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 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).