qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: aliguori@us.ibm.com, qemu-devel@nongnu.org,
	Luiz Capitulino <lcapitulino@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v1 0/6]: block: Add I/O status support
Date: Fri, 23 Sep 2011 11:29:38 +0200	[thread overview]
Message-ID: <4E7C5182.50108@redhat.com> (raw)
In-Reply-To: <m3k48ziqno.fsf@blackfin.pond.sub.org>

Am 23.09.2011 10:55, schrieb Markus Armbruster:
> Kevin Wolf <kwolf@redhat.com> writes:
> 
>> Am 19.09.2011 16:09, schrieb Luiz Capitulino:
>>> On Mon, 19 Sep 2011 15:40:06 +0200
>>> Kevin Wolf <kwolf@redhat.com> wrote:
>>>
>>>> Am 01.09.2011 20:37, schrieb Luiz Capitulino:
>>>>> This series adds support to the block layer to keep track of devices'
>>>>> I/O status. That information is also made available in QMP and HMP.
>>>>>
>>>>> The goal here is to allow management applications that miss the
>>>>> BLOCK_IO_ERROR event to able to query the VM to determine if any device has
>>>>> caused the VM to stop and which device caused it.
>>>>>
>>>>> Please, note that this series depends on the following series:
>>>>>
>>>>>  o [PATCH v3 0/8]: Introduce the RunState type
>>>>>  o http://lists.gnu.org/archive/html/qemu-devel/2011-09/msg00118.html
>>>>>
>>>>> And to be able to properly test it you'll also need:
>>>>>
>>>>>  o [PATCH 0/3] qcow2/coroutine fixes
>>>>>  o http://lists.gnu.org/archive/html/qemu-devel/2011-09/msg00074.html
>>>>>
>>>>> Here's an HMP example:
>>>>>
>>>>>   (qemu) info status 
>>>>>   VM status: paused (io-error)
>>>>>   (qemu) info block
>>>>>   ide0-hd0: removable=0 io-status=ok file=disks/test2.img ro=0 drv=qcow2 encrypted=0
>>>>>   ide0-hd1: removable=0 io-status=nospace file=/dev/vg_doriath/kvmtest ro=0 drv=qcow2 encrypted=0
>>>>>   ide1-cd0: removable=1 locked=0 io-status=ok [not inserted]
>>>>>   floppy0: removable=1 locked=0 [not inserted]
>>>>>   sd0: removable=1 locked=0 [not inserted]
>>>>>
>>>>> The "info status" command shows that the VM is stopped due to an I/O error.
>>>>> By issuing "info block" it's possible to determine that the 'ide0-hd1' device
>>>>> caused the error, which turns out to be due to no space.
>>>>
>>>> Looks like I didn't reply here yet?
>>>
>>> No, you didn't.
>>>
>>>> I still don't quite like that the devices are involved, but their part
>>>> is minimal and it makes the implementation much easier, so for me that's
>>>> acceptable.
>>>
>>> Suggestions on better ways of implementing this are welcome! :)
>>
>> I don't have one. :-)
>>
>> Surely it would be possible to do everything in block.c, but I see that
>> this would make things much more complicated (would need to get an AIO
>> callback added to the chain that can save the error code). It's not
>> worth the trouble.
> 
> The block layer necessarily detects errors in a huge number of places.
> 
> It also has a rich and complex interface to device models, with error
> reporting in many places.
> 
> virtio-blk, ide and scsi-disk each have a single error handler to handle
> block layer errors.
> 
> For better or worse, these are the only block layer error "chokepoints"
> we have now, and therefore the only easy places to set BDS I/O status.
> But they're still wrong.
> 
> The block layer shouldn't require device models to tell it what it
> already knows.
> 
> Now, I don't want to block your series just because it adds this wart.
> But the wart should be documented in the code.
> 
> Also document that any device model implementing werror=stop|enospc or
> rerror=stop must update I/O status.  Extra points if you find a way to
> enforce it instead.
> 
> Apropos enforcing.  Currently, -drive accepts any werror and rerror
> action with if={ide,virtio,scsi,none}.  We rely on device models not
> implementing an action to check and fail during initialization.
> scsi-generic and the floppy devices do.  All the other qdevified devices
> don't, and that's broken.
> 
> Are werror and rerror really host state?

If you want to convince me of the opposite, show me the real device that
implements them.

In fact, for the implementation of rerror/werror the very same thing is
true as you say about I/O status updates. Other than being easy to
implement, there is really no reason to do it in the devices. The block
layer could just as well stop the VM and queue the requests for
resubmission when the VM is restarted. Of course, you can't keep
migration compatibility when doing such a fundamental change to the
design, but if you take the host state thing serious, this is what you
should do.

Kevin

  reply	other threads:[~2011-09-23  9:26 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-01 18:37 [Qemu-devel] [PATCH v1 0/6]: block: Add I/O status support Luiz Capitulino
2011-09-01 18:37 ` [Qemu-devel] [PATCH 1/6] block: Keep track of devices' I/O status Luiz Capitulino
2011-09-01 18:37 ` [Qemu-devel] [PATCH 2/6] virtio: Support " Luiz Capitulino
2011-09-01 18:37 ` [Qemu-devel] [PATCH 3/6] ide: " Luiz Capitulino
2011-09-01 18:37 ` [Qemu-devel] [PATCH 4/6] scsi: " Luiz Capitulino
2011-09-01 18:37 ` [Qemu-devel] [PATCH 5/6] QMP: query-status: Add 'io-status' key Luiz Capitulino
2011-09-01 18:37 ` [Qemu-devel] [PATCH 6/6] HMP: Print 'io-status' information Luiz Capitulino
2011-09-09 13:07 ` [Qemu-devel] [PATCH v1 0/6]: block: Add I/O status support Luiz Capitulino
2011-09-19 13:40 ` Kevin Wolf
2011-09-19 14:09   ` Luiz Capitulino
2011-09-19 14:29     ` Kevin Wolf
2011-09-23  8:55       ` Markus Armbruster
2011-09-23  9:29         ` Kevin Wolf [this message]
2011-09-23 10:13           ` Markus Armbruster
2011-09-23 13:48         ` Luiz Capitulino
2011-09-23 14:05           ` Markus Armbruster

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=4E7C5182.50108@redhat.com \
    --to=kwolf@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=armbru@redhat.com \
    --cc=lcapitulino@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).