From: Eduardo Habkost <ehabkost@redhat.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Andrea Bolognani <abologna@redhat.com>,
Libvirt <libvir-list@redhat.com>,
qemu list <qemu-devel@nongnu.org>, Laine Stump <laine@laine.org>
Subject: Re: [Qemu-devel] [libvirt] clean/simple Q35 support in libvirt+QEMU for guest OSes that don't support virtio-1.0
Date: Wed, 22 Aug 2018 12:49:48 -0300 [thread overview]
Message-ID: <20180822154948.GR18995@localhost.localdomain> (raw)
In-Reply-To: <20180822145720.GL12750@redhat.com>
On Wed, Aug 22, 2018 at 03:57:20PM +0100, Daniel P. Berrangé wrote:
> On Wed, Aug 22, 2018 at 11:18:28AM -0300, Eduardo Habkost wrote:
> > On Wed, Aug 22, 2018 at 02:44:40PM +0100, Daniel P. Berrangé wrote:
[...]
> > > An explicit virtio-transitional device is still two separate
> > > devices pretending to be the same thing, but magically changing
> > > their identity at runtime. We've already got that situation with
> > > existing device models, and I'm loathe to see us add 2nd device
> > > model with that same behaviour, just for sake of having a slightly
> > > different PCI bus placement strategy to support outdated guest OS.
> >
> > Your seem to be describing what the current "virtio" device is:
> > it becomes a non-transitional (modern-only) Virtio device on some
> > cases, and becomes a transitional Virtio device on other cases.
> > It is two devices pretending to be the same thing. That's
> > exactly what I would like applications to get rid of.
> >
> > Now, the above is really not an accurate description of
> > transitional Virtio devices. A transitional Virtio device is
> > something clearly specified in the Virtio spec, and it just means
> > a device that supports two types of drivers. It's not different
> > from a x86_64 CPU that can run 32-bit OSes.
> >
> > See:
> > http://docs.oasis-open.org/virtio/virtio/v1.0/cs04/virtio-v1.0-cs04.html#x1-60001
> > http://docs.oasis-open.org/virtio/virtio/v1.0/cs04/virtio-v1.0-cs04.html#x1-3090004
>
> When I say a device pretending to be 2 different devices, I'm
> generally referring to the fact that a single QEMU device model
> can expose two different PCI device IDs depending on how it is
> configured and/or placed.
Understood. Then you are not describing transitional Virtio, you
are just describing QEMU's disable-legacy=auto behavior (which is
the default).
>
> > > > > Honestly though, the longer this discussion goes on, the more I think
> > > > > the answer is just "do nothing". All this time spent on discussion,
> > > > > and future time spent on implementing new logic in apps, is merely
> > > > > to support running RHEL-6 on Q35. I think we should just say that
> > > > > RHEL-6 should use i440fx forever and be done with it.
> > > >
> > > > I'm not sure if you are saying that we (Red Hat) shouldn't spend
> > > > time implementing it, or that the libvirt upstream project should
> > > > reject the patches if somebody implements it. I would understand
> > > > the former, but not the latter.
> > >
> > > Even if someone is willing to implement it in libvirt, we have to
> > > consider the cost of supporting it in both libvirt and applications
> > > using libvirt and the complexity it adds to our story about the
> > > docs / best practices for configuring guests.
> > >
> > > Even though I do kind of like the virtio-0.9/virtio-1.0 device model
> > > as concepts, I'm yet to be convinced that implementing them in libvirt
> > > and then also in all the downstream applications (oVirt, OpenStack,
> > > virt-manager, cockpit, etc) is actually worth the cost.
> > >
> > > There's little compelling reason to care about running outdated OS
> > > like RHEL-6 on Q35 in general. The motivation behind it is just
> > > coming from an artifically created problem downstream, by wishing
> > > to drop the i440fx machine at some still undeteremined point in the
> > > future. By the time that future comes, RHEL-6 may well even be
> > > end of life making the entire exercise a pointless.
> >
> > I'm all for making a cost/benefit analysis, but I don't think you
> > are taking into account the costs of keeping the confusing
> > semantics of existing "virtio" devices.
> >
> > If you still want to refuse to provide a sane way to configure
> > transitional Virtio devices, I really won't care. But I believe
> > the interface you are trying to keep is actually the one you are
> > criticizing ("two separate devices pretending to be the same
> > thing, but magically changing their identity at runtime").
>
> Yeah, I guess I should make a distinction between what I would
> do if it was a clean slate, and what we should do given our existing
> practice.
>
> If we had a clean slate I would not like to see our current impl
> done. Given that it already exists, however, we're stuck with
> that forever. So the question is whether implementing any of
> the alternative options is a net benefit for libvirt & mgmt apps
> overall. My gut feeling is that despite the downsides of the
> current impl, it is not worth trying todo something different.
Fair enough.
>
> The thing that has really tipped my mind this way is that even
> if we provide new device models, mgmt apps will be loathe to
> actually use them because it will prevent live migration of
> those guests to hosts with older libvirt.
This might be an issue for some apps, but is it going to happen
in practice? Don't they all need mechanisms to flip a switch and
enable features that require newer host software, already?
>
> So my feeling is we should do the work to enable use of Q35
> by default in mgmt apps, for guest OS where it is known to
> work correctly today. Every other OS should just stick with
> i440fx as we already know that works for them today and Q35
> doesn't offer legacy OS compelling enough benefits to switch.
I'd still prefer if libvirt provided a saner configuration
mechanism, and let libosinfo and management apps decide what
works best for them.
If it helps, I can send QEMU patches to make
virtio-0.9/virtio-1.0-non-transitional/virtio-1.0-transitional
appear as different device types. libvirt would then be able to
check if the device type implements "pci-express-device" or
"conventional-pci-device", instead of adding device-specific
placement logic.
--
Eduardo
next prev parent reply other threads:[~2018-08-22 15:53 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-16 22:20 [Qemu-devel] clean/simple Q35 support in libvirt+QEMU for guest OSes that don't support virtio-1.0 Laine Stump
2018-08-17 7:05 ` [Qemu-devel] [libvirt] " Gerd Hoffmann
2018-08-17 9:29 ` [Qemu-devel] " Daniel P. Berrangé
2018-08-17 10:35 ` [Qemu-devel] [libvirt] " Andrea Bolognani
2018-08-17 10:43 ` Daniel P. Berrangé
2018-08-17 13:13 ` Markus Armbruster
2018-08-17 13:24 ` Daniel P. Berrangé
2018-08-29 11:25 ` Markus Armbruster
2018-08-17 13:59 ` Andrea Bolognani
2018-08-21 18:21 ` Laine Stump
2018-08-22 10:36 ` Andrea Bolognani
2018-08-22 10:52 ` Daniel P. Berrangé
2018-08-22 12:01 ` Eduardo Habkost
2018-08-22 12:26 ` Daniel P. Berrangé
2018-08-22 12:54 ` Eduardo Habkost
2018-08-22 13:44 ` Daniel P. Berrangé
2018-08-22 14:18 ` Eduardo Habkost
2018-08-22 14:57 ` Daniel P. Berrangé
2018-08-22 15:49 ` Eduardo Habkost [this message]
2018-08-22 16:02 ` Daniel P. Berrangé
2018-08-22 14:37 ` Laine Stump
2018-08-22 15:01 ` Daniel P. Berrangé
2018-08-23 16:08 ` Markus Armbruster
2018-08-23 16:26 ` Daniel P. Berrangé
2018-08-23 17:04 ` Eduardo Habkost
2018-08-23 19:10 ` 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=20180822154948.GR18995@localhost.localdomain \
--to=ehabkost@redhat.com \
--cc=abologna@redhat.com \
--cc=berrange@redhat.com \
--cc=laine@laine.org \
--cc=libvir-list@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.