On Thu, Sep 22, 2016 at 01:09:20PM +0200, Martin Kletzander wrote:
On Wed, Sep 21, 2016 at 04:26:31PM +0100, Daniel P. Berrange wrote:
> On Wed, Sep 21, 2016 at 05:10:09PM +0200, Martin Kletzander wrote:
> > On Wed, Sep 21, 2016 at 04:01:23PM +0100, Daniel P. Berrange wrote:
> > > I'm not a fan of the idea of silently picking a different device
> > > for the guest behind the applications back. By not exposing the
> > > different device types with a "model" attribute, we miss a way
> > > to report to the application which models are supported by the
> > > QEMU they're using - eg via domain capabilities.
> > >
> > > This in turn means the application doesn't know whether they're
> > > getting the new or old version, and so don't know if they're
going
> > > to have working migration or not.
> > >
> > > If we expanded the XML to include model, then application can
> > > explicitly request the new model (which supports migration) and
> > > know that they'll get a startup failure if not supported, as
> > > opposed to silently falling back to the non-migratable version.
> > >
> > > Also, it makes life hard for us if the ivshmem-plain device wants
> > > to support use of the 'server' attribute in the future, as we
will
> > > then not know which to create.
> > >
> > > We've often been burnt in the past by trying todo magic like this,
> > > instead of explicitly representing stuff in the XML, so I think we
> > > should be being explicit about ivshmem models here.
> > >
> > > Of course, if we do add <model> support, we have to allow for it
> > > to be missing for sake of upgrades. So there's a question of which
> > > model we should select as the default, if not seen in the XML.
> > >
> >
> > If selecting the newest one whenever the element is missing is fine,
> > then I'm OK with that. But that would change the device when upgrading
> > libvirt (without user intervention), which you didn't like IIUC.
>
> Yes, I don't think we can do that - at least note exactly in the way
> you do it in this patch. eg Looking at the ivshmem code in QEMU there
> is this comment about guest interupt setup:
>
> * Do nothing unless the device actually uses INTx. Here's how
> * the device variants signal interrupts, what they put in PCI
> * config space:
> * Device variant Interrupt Interrupt Pin MSI-X cap.
> * ivshmem-plain none 0 no
> * ivshmem-doorbell MSI-X 1 yes(1)
> * ivshmem,msi=off INTx 1 no
> * ivshmem,msi=on MSI-X 1(2) yes(1)
> * (1) if guest enabled MSI-X
> * (2) the device lies
>
> Note that neither ivshmem-plain or ivshmem-doorbell support use of
> INTx for interupts. I'm also concerned about the footnote (2) there,
> as that seems to imply that ivshmem,msi=on, is not in fact the
> same as ivshmem-doorbell, because ivshmem lies about the interrupt
> pin (whatever that means).
>
> I'm inclined so that that we should do
>
> if (ivshmem exists) {
> use ivshmem
> } else {
> if (server) {
> if(msi) {
> use ivshmem-doorbell
> } else {
> error config unsupported
> }
> } else {
> use ivshmem-plain
> }
> }
>
> That way if a distro compiles-out 'ivshmem' we'll use one of the
> new devices if they're available, otherwise we'll stick with the
> conversative behaviour of using the legacy device for guaranteed
> bug compatibility.
>
OK, we can do that. But before I go and do this variant, I would like
to clarify two more things (so that I can hope that's the last variant I
have to post) =) Should we support setting the role to 'peer'/'master'
(with ivshmem that maps to role=peer/master and with ivshmem-plain that
maps to master=on/off)? Basically master means that the domain can
migrate (with the data being copied) and peer (or master=off) has
migration disabled in qemu, so we would disable that as well. That's
why hotplug is being implemented, basically. Currently we don't use
that parameter, which means role=auto. That is special value that ends
up being 'master' for non-server, for server it tries to pick correctly.
Shouldn't be used, but rather explicitly stated (or just peer for
everyone and copy the data yourself). New ivshmem defaults to master=off.
Yep, given that the choice of master/peer impacts whether you can migrate
or not, I think it is important to give applications the ability to
set that, to override the potentially incorrect defaults.
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 :|