From: Jason Gunthorpe <jgg@nvidia.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: "Tian, Kevin" <kevin.tian@intel.com>,
Yishai Hadas <yishaih@nvidia.com>,
"bhelgaas@google.com" <bhelgaas@google.com>,
"saeedm@nvidia.com" <saeedm@nvidia.com>,
"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"kuba@kernel.org" <kuba@kernel.org>,
"leonro@nvidia.com" <leonro@nvidia.com>,
"kwankhede@nvidia.com" <kwankhede@nvidia.com>,
"mgurtovoy@nvidia.com" <mgurtovoy@nvidia.com>,
"maorg@nvidia.com" <maorg@nvidia.com>,
"Raj, Ashok" <ashok.raj@intel.com>,
"shameerali.kolothum.thodi@huawei.com"
<shameerali.kolothum.thodi@huawei.com>
Subject: Re: [PATCH V7 mlx5-next 08/15] vfio: Define device migration protocol v2
Date: Tue, 15 Feb 2022 21:17:00 -0400 [thread overview]
Message-ID: <20220216011700.GB4160@nvidia.com> (raw)
In-Reply-To: <20220215163231.57f0ebb6.alex.williamson@redhat.com>
On Tue, Feb 15, 2022 at 04:32:31PM -0700, Alex Williamson wrote:
> > I suppose you have to do as Alex says and try to estimate how much
> > time the stop phase of migration will take and grant only the
> > remaining time from the SLA to the guest to finish its PRI flushing,
> > otherwise go back to PRE_COPY and try again later if the timer hits.
> >
> > This suggests to me the right interface from the driver is some
> > estimate of time to enter STOP_COPY and resulting required transfer
> > size.
> >
> > Still, I just don't see how SLAs can really be feasible with this kind
> > of HW that requires guest co-operation..
>
> Devil's advocate, does this discussion raise any concerns whether a
> synchronous vs asynchronous arc transition ioctl is still the right
> solution here?
v2 switched to the data_fd which allows almost everything important to
be async, assuming someone wants to implement it in qemu and a driver.
It allows RUNNING -> STOP_COPY to be made async because the driver can
return SET_STATE immediately, backround the state save and indicate
completion/progress/error via poll(readable) on the data_fd. However
the device does still have to suspend DMA synchronously.
RESUMING -> STOP can also be async. The driver will make the data_fd
not writable before the last byte using its internal knowledge of the
data framing. Once the driver allows the last byte to be delivered
qemu will immediately do SET_STATE which will be low latency.
The entire data transfer flow itself is now async event driven and can
be run in parallel across devices with an epoll or iouring type
scheme.
STOP->RUNNING should be low latency for any reasonable device design.
For the P2P extension the RUNNING -> RUNNING_P2P has stopped vCPUs,
but I think a reasonable implementation must make this low latency,
just like suspending DMA to get to STOP_COPY must be low latency.
Making it async won't make it faster, though I would like to see it
run in parallel for all P2P devices.
The other arcs have the vCPU running, so don't matter to this.
In essence, compared to v1, we already made it almost fully async.
Also, at least with the mlx5 design, we can run all the commands async
(though there is a blocker preventing this right now) however we
cannot abort commands in progress. So as far as a SLA is concerned I
don't think async necessarily helps much.
I also think acc and several other drivers we are looking at would not
implement, or gain any advantage from async arcs.
Are there more arcs that benefit from async? PRI draining has come
up.
Keep in mind, qemu can still userspace thread SET_STATE. There has
also been talk about a generic iouring based kernel threaded
ioctl: https://lwn.net/Articles/844875/
What I suggested to Kevin is also something to look at, userspace
provides an event FD to SET_STATE and the event FD is triggered when
the background action is done.
So, I'm not worried about this. There are more than enough options to
address any async requirements down the road.
> and processors. The mlx5 driver already places an upper bound on
> migration data size internally.
We did that because it seemed unreasonable to allow userspace to
allocate unlimited kernel memory during resuming. Ideally we'd limit
it to the device's max capability but the device doesn't know how to
do that today.
> Maybe some of these can come as DEVICE_FEATURES as we go, but for any
> sort of cloud vendor SLA, I'm afraid we're only enabling migration of
> devices with negligible transition latencies and negligible device
> states
Even if this is true, it is not a failure! Most of the migration
drivers we foresee are of this class.
My feeling is that more complex devices would benefit from some stuff,
eg like estimating times, but I'd rather collect actual field data and
understand where things lie, and what device changes are needed,
before we design something.
> with some hand waving how to determine that either of those are
> the case without device specific knowledge in the orchestration.
I don't think the orchestration necessarily needs special
knowledge. Certainly when the cloud operator designs the VMs and sets
the SLA parameters they need to do it with understanding of what the
mix of devices are and what kind of migration performance they get out
of the entire system.
More than anything system migration performance is going to be
impacted by the network for devices like mlx5 that have a non-trivial
STOP_COPY data blob.
Basically, I think it is worth thinking about, but not worth acting on
right now.
Jason
next prev parent reply other threads:[~2022-02-16 1:17 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-07 17:22 [PATCH V7 mlx5-next 00/15] Add mlx5 live migration driver and v2 migration protocol Yishai Hadas
2022-02-07 17:22 ` [PATCH V7 mlx5-next 01/15] PCI/IOV: Add pci_iov_vf_id() to get VF index Yishai Hadas
2022-02-07 17:22 ` [PATCH V7 mlx5-next 02/15] net/mlx5: Reuse exported virtfn index function call Yishai Hadas
2022-02-07 17:22 ` [PATCH V7 mlx5-next 03/15] net/mlx5: Disable SRIOV before PF removal Yishai Hadas
2022-02-07 17:22 ` [PATCH V7 mlx5-next 04/15] PCI/IOV: Add pci_iov_get_pf_drvdata() to allow VF reaching the drvdata of a PF Yishai Hadas
2022-02-07 17:22 ` [PATCH V7 mlx5-next 05/15] net/mlx5: Expose APIs to get/put the mlx5 core device Yishai Hadas
2022-02-07 17:22 ` [PATCH V7 mlx5-next 06/15] net/mlx5: Introduce migration bits and structures Yishai Hadas
2022-02-07 17:22 ` [PATCH V7 mlx5-next 07/15] vfio: Have the core code decode the VFIO_DEVICE_FEATURE ioctl Yishai Hadas
2022-02-07 17:22 ` [PATCH V7 mlx5-next 08/15] vfio: Define device migration protocol v2 Yishai Hadas
2022-02-09 0:07 ` Alex Williamson
2022-02-09 2:36 ` Jason Gunthorpe
2022-02-15 10:41 ` Tian, Kevin
2022-02-15 16:04 ` Jason Gunthorpe
2022-02-15 23:32 ` Alex Williamson
2022-02-16 1:17 ` Jason Gunthorpe [this message]
2022-02-16 3:17 ` Tian, Kevin
2022-02-16 12:14 ` Jason Gunthorpe
2022-02-17 2:29 ` Tian, Kevin
2022-02-15 10:58 ` Tian, Kevin
2022-02-15 13:13 ` Jason Gunthorpe
2022-02-15 8:04 ` Tian, Kevin
2022-02-15 15:33 ` Jason Gunthorpe
2022-02-16 3:04 ` Tian, Kevin
2022-02-07 17:22 ` [PATCH V7 mlx5-next 09/15] vfio: Extend the device migration protocol with RUNNING_P2P Yishai Hadas
2022-02-15 10:18 ` Tian, Kevin
2022-02-15 15:56 ` Jason Gunthorpe
2022-02-16 2:52 ` Tian, Kevin
2022-02-16 12:11 ` Jason Gunthorpe
2022-02-07 17:22 ` [PATCH V7 mlx5-next 10/15] vfio: Remove migration protocol v1 documentation Yishai Hadas
2022-02-11 11:03 ` Cornelia Huck
2022-02-07 17:22 ` [PATCH V7 mlx5-next 11/15] vfio/mlx5: Expose migration commands over mlx5 device Yishai Hadas
2022-02-07 17:22 ` [PATCH V7 mlx5-next 12/15] vfio/mlx5: Implement vfio_pci driver for mlx5 devices Yishai Hadas
2022-02-09 0:07 ` Alex Williamson
2022-02-07 17:22 ` [PATCH V7 mlx5-next 13/15] vfio/pci: Expose vfio_pci_core_aer_err_detected() Yishai Hadas
2022-02-07 17:22 ` [PATCH V7 mlx5-next 14/15] vfio/mlx5: Use its own PCI reset_done error handler Yishai Hadas
2022-02-09 0:08 ` Alex Williamson
2022-02-09 2:39 ` Jason Gunthorpe
2022-02-10 16:48 ` Alex Williamson
2022-02-10 17:27 ` Jason Gunthorpe
2022-02-07 17:22 ` [PATCH V7 mlx5-next 15/15] vfio: Extend the device migration protocol with PRE_COPY Yishai Hadas
2022-02-17 17:15 ` Alex Williamson
2022-02-18 0:03 ` Jason Gunthorpe
2022-02-18 8:01 ` Tian, Kevin
2022-02-18 14:06 ` Jason Gunthorpe
2022-02-22 1:43 ` Tian, Kevin
2022-02-22 15:50 ` Jason Gunthorpe
2022-02-23 0:40 ` Tian, Kevin
2022-02-23 0:44 ` Jason Gunthorpe
2022-02-23 1:46 ` Tian, Kevin
2022-02-18 8:11 ` [PATCH V7 mlx5-next 00/15] Add mlx5 live migration driver and v2 migration protocol Tarun Gupta (SW-GPU)
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=20220216011700.GB4160@nvidia.com \
--to=jgg@nvidia.com \
--cc=alex.williamson@redhat.com \
--cc=ashok.raj@intel.com \
--cc=bhelgaas@google.com \
--cc=kevin.tian@intel.com \
--cc=kuba@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=kwankhede@nvidia.com \
--cc=leonro@nvidia.com \
--cc=linux-pci@vger.kernel.org \
--cc=maorg@nvidia.com \
--cc=mgurtovoy@nvidia.com \
--cc=netdev@vger.kernel.org \
--cc=saeedm@nvidia.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=yishaih@nvidia.com \
/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.