From: "Daniel P. Berrange" <berrange@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: kwolf@redhat.com, pbonzini@redhat.com, qemu-devel@nongnu.org,
Luiz Capitulino <lcapitulino@redhat.com>
Subject: Re: [Qemu-devel] [RFC 2/3] QMP: rate limit BLOCK_IO_ERROR
Date: Mon, 11 Aug 2014 12:15:18 +0100 [thread overview]
Message-ID: <20140811111518.GQ11762@redhat.com> (raw)
In-Reply-To: <87lhqv2sjc.fsf@blackfin.pond.sub.org>
On Mon, Aug 11, 2014 at 01:07:51PM +0200, Markus Armbruster wrote:
> "Daniel P. Berrange" <berrange@redhat.com> writes:
> > For the BLOCK IO ERROR events this does not work because the events are
> > device and operation specific.
> >
> > QAPI_EVENT_BLOCK_IO_ERROR dev=ide0-hd1 op=read action=stop
> > QAPI_EVENT_BLOCK_IO_ERROR dev=scsi1-hd2 op=write action=stop
> > QAPI_EVENT_BLOCK_IO_ERROR dev=ide0-hd1 op=write action=stop
> >
> > with throttling the app wll only receive
> >
> > QAPI_EVENT_BLOCK_IO_ERROR dev=ide0-hd1 op=write action=stop
> >
> > which means it will have an *incorrect* view of the system state because
> > the info about scsi1-hd2 is irretrievably lost, likewise info about the
> > read operation of ide0-hd1.
>
> Even when the event is lost, the information should not be lost. There
> should be a way to poll for it (libvirt needs that anyway, to cope with
> possible event loss during a libvirt restart).
Yes, that's true.
> > If you want to throttle BLOCK IO ERROR events, then you need to make the
> > monitor throttling more intelligent, so that it hashes on all the contextual
> > state. In this case you'd have to throttle based on (event, dev, op) to get
> > correct application behaviour.
>
> I think there's more than one to skin this cat:
>
> 1. Don't throttle. Client can rely on events as long as it keeps the
> QMP connection alive. Client should poll after establishing the QMP
> connection.
A malicious guest OS can flood libvirt with events in this way. Of course
even if we throttle, a compromised QEMU can still flood libvirt. The only
fail-safe protection is for libvirt to detect flooding and throttle the
rate at which it talks to the (malicious) QEMU.
> 2. Throttle more smartly, so that events only get dropped when they're
> semantically superseded. I figure that's what you proposed in your
> last paragraph.
Yep, that's what I was suggesting.
> 3. Throttle, but accumulate the information carried by the event, i.e.
> any dropped events' data is sent with the next non-dropped event.
I fear this could get rather ugly - fields which are currently scalar
quantities would need to become lists or hashes.
> 4. Throttle without smarts or accumulation.
>
> a. The event's additional information may be incomplete, thus
> worthless. Client needs too poll after getting an event.
Might as well just not bother sending any additionl info in events
if we took this path.
>
> b. Add a flag "throttling has dropped some events". The additional
> information is incomplete when the flag is set. Client needs to
> poll then.
This is a reasonable idea too.
> Backward compatibility considerations may narrow our choice.
I think 1, 2 or 4b are viable from a general design POV, but only 1 or 2
are viable from a back-compat POV, unless there was an explicit command
that client apps issued to turn on the throttling in 4b instead of it
being on by default.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
next prev parent reply other threads:[~2014-08-11 11:15 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-23 13:17 [Qemu-devel] [RFC 0/3] QMP: extend BLOCK_IO_ERROR event Luiz Capitulino
2014-07-23 13:17 ` [Qemu-devel] [RFC 1/3] qapi: block-core.json: improve query-block doc Luiz Capitulino
2014-08-05 12:13 ` Eric Blake
2014-07-23 13:17 ` [Qemu-devel] [RFC 2/3] QMP: rate limit BLOCK_IO_ERROR Luiz Capitulino
2014-08-05 12:14 ` Eric Blake
2014-08-11 8:17 ` Daniel P. Berrange
2014-08-11 11:07 ` Markus Armbruster
2014-08-11 11:15 ` Daniel P. Berrange [this message]
2014-08-17 6:08 ` Paolo Bonzini
2014-08-14 13:13 ` Luiz Capitulino
2014-07-23 13:17 ` [Qemu-devel] [RFC 3/3] QMP: extend BLOCK_IO_ERROR event with no-space indicator Luiz Capitulino
2014-08-05 12:19 ` Eric Blake
2014-08-14 13:07 ` Luiz Capitulino
2014-08-05 9:13 ` [Qemu-devel] [RFC 0/3] QMP: extend BLOCK_IO_ERROR event Kevin Wolf
2014-08-14 13:05 ` Luiz Capitulino
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=20140811111518.GQ11762@redhat.com \
--to=berrange@redhat.com \
--cc=armbru@redhat.com \
--cc=kwolf@redhat.com \
--cc=lcapitulino@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 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.