Cornelia Huck
2018-Jun-22 15:09 UTC
[virtio-dev] Re: [Qemu-devel] [PATCH] qemu: Introduce VIRTIO_NET_F_STANDBY feature bit to virtio_net
On Thu, 21 Jun 2018 21:20:13 +0300 "Michael S. Tsirkin" <mst at redhat.com> wrote:> On Thu, Jun 21, 2018 at 04:59:13PM +0200, Cornelia Huck wrote: > > OK, so what about the following: > > > > - introduce a new feature bit, VIRTIO_NET_F_STANDBY_UUID that indicates > > that we have a new uuid field in the virtio-net config space > > - in QEMU, add a property for virtio-net that allows to specify a uuid, > > offer VIRTIO_NET_F_STANDBY_UUID if set > > - when configuring, set the property to the group UUID of the vfio-pci > > device > > - in the guest, use the uuid from the virtio-net device's config space > > if applicable; else, fall back to matching by MAC as done today > > > > That should work for all virtio transports. > > True. I'm a bit unhappy that it's virtio net specific though > since down the road I expect we'll have a very similar feature > for scsi (and maybe others). > > But we do not have a way to have fields that are portable > both across devices and transports, and I think it would > be a useful addition. How would this work though? Any idea?Can we introduce some kind of device-independent config space area? Pushing back the device-specific config space by a certain value if the appropriate feature is negotiated and use that for things like the uuid? But regardless of that, I'm not sure whether extending this approach to other device types is the way to go. Tying together two different devices is creating complicated situations at least in the hypervisor (even if it's fairly straightforward in the guest). [I have not come around again to look at the "how to handle visibility in QEMU" questions due to lack of cycles, sorry about that.] So, what's the goal of this approach? Only to allow migration with vfio-pci, or also to plug in a faster device and use it instead of an already attached paravirtualized device? What about migration of vfio devices that are not easily replaced by a paravirtualized device? I'm thinking of vfio-ccw, where our main (and currently only) supported device is dasd (disks) -- which can do a lot of specialized things that virtio-blk does not support (and should not or even cannot support). Would it be more helpful to focus on generic migration support for vfio instead of going about it device by device? This network device approach already seems far along, so it makes sense to continue with it. But I'm not sure whether we want to spend time and energy on that for other device types rather than working on a general solution for vfio migration.
Michael S. Tsirkin
2018-Jun-22 19:05 UTC
[virtio-dev] Re: [Qemu-devel] [PATCH] qemu: Introduce VIRTIO_NET_F_STANDBY feature bit to virtio_net
On Fri, Jun 22, 2018 at 05:09:55PM +0200, Cornelia Huck wrote:> On Thu, 21 Jun 2018 21:20:13 +0300 > "Michael S. Tsirkin" <mst at redhat.com> wrote: > > > On Thu, Jun 21, 2018 at 04:59:13PM +0200, Cornelia Huck wrote: > > > OK, so what about the following: > > > > > > - introduce a new feature bit, VIRTIO_NET_F_STANDBY_UUID that indicates > > > that we have a new uuid field in the virtio-net config space > > > - in QEMU, add a property for virtio-net that allows to specify a uuid, > > > offer VIRTIO_NET_F_STANDBY_UUID if set > > > - when configuring, set the property to the group UUID of the vfio-pci > > > device > > > - in the guest, use the uuid from the virtio-net device's config space > > > if applicable; else, fall back to matching by MAC as done today > > > > > > That should work for all virtio transports. > > > > True. I'm a bit unhappy that it's virtio net specific though > > since down the road I expect we'll have a very similar feature > > for scsi (and maybe others). > > > > But we do not have a way to have fields that are portable > > both across devices and transports, and I think it would > > be a useful addition. How would this work though? Any idea? > > Can we introduce some kind of device-independent config space area? > Pushing back the device-specific config space by a certain value if the > appropriate feature is negotiated and use that for things like the uuid?So config moves back and forth? Reminds me of the msi vector mess we had with pci. I'd rather have every transport add a new config.> But regardless of that, I'm not sure whether extending this approach to > other device types is the way to go. Tying together two different > devices is creating complicated situations at least in the hypervisor > (even if it's fairly straightforward in the guest). [I have not come > around again to look at the "how to handle visibility in QEMU" > questions due to lack of cycles, sorry about that.] > > So, what's the goal of this approach? Only to allow migration with > vfio-pci, or also to plug in a faster device and use it instead of an > already attached paravirtualized device?These are two sides of the same coin, I think the second approach is closer to what we are doing here.> What about migration of vfio devices that are not easily replaced by a > paravirtualized device? I'm thinking of vfio-ccw, where our main (and > currently only) supported device is dasd (disks) -- which can do a lot > of specialized things that virtio-blk does not support (and should not > or even cannot support).But maybe virtio-scsi can?> Would it be more helpful to focus on generic > migration support for vfio instead of going about it device by device? > > This network device approach already seems far along, so it makes sense > to continue with it. But I'm not sure whether we want to spend time and > energy on that for other device types rather than working on a general > solution for vfio migration.I'm inclined to say finalizing this feature would be a good first step and will teach us how we can move forward. -- MST
Siwei Liu
2018-Jun-22 20:21 UTC
[virtio-dev] Re: [Qemu-devel] [PATCH] qemu: Introduce VIRTIO_NET_F_STANDBY feature bit to virtio_net
On Fri, Jun 22, 2018 at 12:05 PM, Michael S. Tsirkin <mst at redhat.com> wrote:> On Fri, Jun 22, 2018 at 05:09:55PM +0200, Cornelia Huck wrote: >> On Thu, 21 Jun 2018 21:20:13 +0300 >> "Michael S. Tsirkin" <mst at redhat.com> wrote: >> >> > On Thu, Jun 21, 2018 at 04:59:13PM +0200, Cornelia Huck wrote: >> > > OK, so what about the following: >> > > >> > > - introduce a new feature bit, VIRTIO_NET_F_STANDBY_UUID that indicates >> > > that we have a new uuid field in the virtio-net config space >> > > - in QEMU, add a property for virtio-net that allows to specify a uuid, >> > > offer VIRTIO_NET_F_STANDBY_UUID if set >> > > - when configuring, set the property to the group UUID of the vfio-pci >> > > device >> > > - in the guest, use the uuid from the virtio-net device's config space >> > > if applicable; else, fall back to matching by MAC as done today >> > > >> > > That should work for all virtio transports. >> > >> > True. I'm a bit unhappy that it's virtio net specific though >> > since down the road I expect we'll have a very similar feature >> > for scsi (and maybe others). >> > >> > But we do not have a way to have fields that are portable >> > both across devices and transports, and I think it would >> > be a useful addition. How would this work though? Any idea? >> >> Can we introduce some kind of device-independent config space area? >> Pushing back the device-specific config space by a certain value if the >> appropriate feature is negotiated and use that for things like the uuid? > > So config moves back and forth? > Reminds me of the msi vector mess we had with pci. > I'd rather have every transport add a new config. > >> But regardless of that, I'm not sure whether extending this approach to >> other device types is the way to go. Tying together two different >> devices is creating complicated situations at least in the hypervisor >> (even if it's fairly straightforward in the guest). [I have not come >> around again to look at the "how to handle visibility in QEMU" >> questions due to lack of cycles, sorry about that.] >> >> So, what's the goal of this approach? Only to allow migration with >> vfio-pci, or also to plug in a faster device and use it instead of an >> already attached paravirtualized device? > > These are two sides of the same coin, I think the second approach > is closer to what we are doing here.I'm leaning towards being conservative to keep the potential of doing both. It's the vfio migration itself that has to be addessed, not to make every virtio device to have an accelerated datapath, right? -Siwei> >> What about migration of vfio devices that are not easily replaced by a >> paravirtualized device? I'm thinking of vfio-ccw, where our main (and >> currently only) supported device is dasd (disks) -- which can do a lot >> of specialized things that virtio-blk does not support (and should not >> or even cannot support). > > But maybe virtio-scsi can? > >> Would it be more helpful to focus on generic >> migration support for vfio instead of going about it device by device? >> >> This network device approach already seems far along, so it makes sense >> to continue with it. But I'm not sure whether we want to spend time and >> energy on that for other device types rather than working on a general >> solution for vfio migration. > > I'm inclined to say finalizing this feature would be a good first step > and will teach us how we can move forward. > > -- > MST
Michael S. Tsirkin
2018-Jun-22 21:43 UTC
[virtio-dev] Re: [Qemu-devel] [PATCH] qemu: Introduce VIRTIO_NET_F_STANDBY feature bit to virtio_net
On Fri, Jun 22, 2018 at 05:09:55PM +0200, Cornelia Huck wrote:> Would it be more helpful to focus on generic > migration support for vfio instead of going about it device by device?Just to note this approach is actually device by device *type*. It's mostly device agnostic for a given device type so you can migrate between hosts with very different hardware. And support for more PV device types has other advantages such as security and forward compatibility to future hosts. Finally, it all can happen mostly within QEMU. User is currently required to enable it but it's pretty lightweight. OTOH vfio migration generally requires actual device-specific work, and only works when hosts are mostly identical. When they aren't it's easy to blame the user, but tools for checking host compatiblity are currently non-existent. Upper layer management will also have to learn about host and device compatibility wrt migration. At the moment they can't even figure it out wrt software versions of vhost in kernel and dpdk so I won't hold my breath for all of this happening quickly. -- MST
Cornelia Huck
2018-Jun-25 09:55 UTC
[virtio-dev] Re: [Qemu-devel] [PATCH] qemu: Introduce VIRTIO_NET_F_STANDBY feature bit to virtio_net
On Fri, 22 Jun 2018 22:05:50 +0300 "Michael S. Tsirkin" <mst at redhat.com> wrote:> On Fri, Jun 22, 2018 at 05:09:55PM +0200, Cornelia Huck wrote: > > On Thu, 21 Jun 2018 21:20:13 +0300 > > "Michael S. Tsirkin" <mst at redhat.com> wrote: > > > > > On Thu, Jun 21, 2018 at 04:59:13PM +0200, Cornelia Huck wrote: > > > > OK, so what about the following: > > > > > > > > - introduce a new feature bit, VIRTIO_NET_F_STANDBY_UUID that indicates > > > > that we have a new uuid field in the virtio-net config space > > > > - in QEMU, add a property for virtio-net that allows to specify a uuid, > > > > offer VIRTIO_NET_F_STANDBY_UUID if set > > > > - when configuring, set the property to the group UUID of the vfio-pci > > > > device > > > > - in the guest, use the uuid from the virtio-net device's config space > > > > if applicable; else, fall back to matching by MAC as done today > > > > > > > > That should work for all virtio transports. > > > > > > True. I'm a bit unhappy that it's virtio net specific though > > > since down the road I expect we'll have a very similar feature > > > for scsi (and maybe others). > > > > > > But we do not have a way to have fields that are portable > > > both across devices and transports, and I think it would > > > be a useful addition. How would this work though? Any idea? > > > > Can we introduce some kind of device-independent config space area? > > Pushing back the device-specific config space by a certain value if the > > appropriate feature is negotiated and use that for things like the uuid? > > So config moves back and forth? > Reminds me of the msi vector mess we had with pci.Yes, that would be a bit unfortunate.> I'd rather have every transport add a new config.You mean via different mechanisms?> > > But regardless of that, I'm not sure whether extending this approach to > > other device types is the way to go. Tying together two different > > devices is creating complicated situations at least in the hypervisor > > (even if it's fairly straightforward in the guest). [I have not come > > around again to look at the "how to handle visibility in QEMU" > > questions due to lack of cycles, sorry about that.] > > > > So, what's the goal of this approach? Only to allow migration with > > vfio-pci, or also to plug in a faster device and use it instead of an > > already attached paravirtualized device? > > These are two sides of the same coin, I think the second approach > is closer to what we are doing here.Thinking about it, do we need any knob to keep the vfio device invisible if the virtio device is not present? IOW, how does the hypervisor know that the vfio device is supposed to be paired with a virtio device? It seems we need an explicit tie-in.> > > What about migration of vfio devices that are not easily replaced by a > > paravirtualized device? I'm thinking of vfio-ccw, where our main (and > > currently only) supported device is dasd (disks) -- which can do a lot > > of specialized things that virtio-blk does not support (and should not > > or even cannot support). > > But maybe virtio-scsi can?I don't think so. Dasds have some channel commands that don't map easily to scsi commands.> > > Would it be more helpful to focus on generic > > migration support for vfio instead of going about it device by device? > > > > This network device approach already seems far along, so it makes sense > > to continue with it. But I'm not sure whether we want to spend time and > > energy on that for other device types rather than working on a general > > solution for vfio migration. > > I'm inclined to say finalizing this feature would be a good first step > and will teach us how we can move forward.I'm not opposed to figuring out this one, but I'm not sure whether we want to extend it to more device types. Are people looking into generic migration support? I have it on my things-to-look-at list (figuring out what needs to be device specific and what can be generic, figuring out how we can support vfio-ccw, etc.).
Cornelia Huck
2018-Jun-27 10:10 UTC
[virtio-dev] Re: [Qemu-devel] [PATCH] qemu: Introduce VIRTIO_NET_F_STANDBY feature bit to virtio_net
On Sat, 23 Jun 2018 00:43:24 +0300 "Michael S. Tsirkin" <mst at redhat.com> wrote:> On Fri, Jun 22, 2018 at 05:09:55PM +0200, Cornelia Huck wrote: > > Would it be more helpful to focus on generic > > migration support for vfio instead of going about it device by device? > > Just to note this approach is actually device by device *type*. It's > mostly device agnostic for a given device type so you can migrate > between hosts with very different hardware.This enables heterogeneous environments, yes. But one drawback of that is that you cannot exploit any hardware specialities - it seems you're limited to what the paravirtual device supports. This is limiting for more homogeneous environments.> > And support for more PV device types has other advantages > such as security and forward compatibility to future hosts.But again the drawback is that we can't exploit new capabilities easily, can we?> > Finally, it all can happen mostly within QEMU. User is currently > required to enable it but it's pretty lightweight. > > OTOH vfio migration generally requires actual device-specific work, and > only works when hosts are mostly identical. When they aren't it's easy > to blame the user, but tools for checking host compatiblity are > currently non-existent. Upper layer management will also have to learn > about host and device compatibility wrt migration. At the moment they > can't even figure it out wrt software versions of vhost in kernel and > dpdk so I won't hold my breath for all of this happening quickly.Yes, that's a real problem. I think one issue here is that we want to support really different environments. For the case here, we have a lot of different networking adapters, but the guests are basically interested in one thing: doing network traffic. On the other hand, I'm thinking of the mainframe environment, where we have a very limited set of devices to support, but at the same time want to exploit their specialities, so the pv approach is limiting. For that use case, generic migration looks more useful.