On Thu, Jun 22, 2023 at 10:59:58AM +0100, Daniel P. Berrangé wrote:
On Thu, Jun 22, 2023 at 10:52:12AM +0200, Juan Quintela wrote:
> Paolo Bonzini <pbonzini(a)redhat.com> wrote:
> > On 6/12/23 22:51, Juan Quintela wrote:
> >>> Shall we just leave it there? Or is deprecating it helps us in any
form?
> >> See the patches two weeks ago when people complained that lisen(.., num)
> >> was too low. And there are other parameters that work the same way
> >> (that I convenientely had forgotten). So the easiest way to get things
> >> right is to use "defer" always. Using -incoming "uri"
should only be
> >> for people that "know what they are doing", so we had to ways to
do it:
> >> - review all migration options and see which ones work without defer
> >> and document it
> >> - deprecate everything that is not defer.
> >
> > "-incoming <uri>" is literally the same as running
"migrate-incoming"
> > as the first thing on the monitor:
> >
> > if (incoming) {
> > Error *local_err = NULL;
> > if (strcmp(incoming, "defer") != 0) {
> > qmp_migrate_incoming(incoming, &local_err);
> > if (local_err) {
> > error_reportf_err(local_err, "-incoming %s: ",
incoming);
> > exit(1);
> > }
> > }
> > } else if (autostart) {
> > qmp_cont(NULL);
> > }
> >
> > It's the only piece of code which distinguishes "-incoming defer"
from
> > "-incoming <uri>".
> >
> > So I'm not sure what the problem would be with keeping it?
>
> User friendliness.
>
> First of all, I use it all the time. And I know that it is useful for
> developers. I was the one asking peter to implement -global
> migration.foo to be able to test multifd with it.
>
> The problem is that if you use more than two channels with multifd, on
> the incoming side, you need to do:
>
> - migrate_set_parameter multifd-channels 16
> - migrate_incoming <uri>
>
> And people continue to do:
>
> - qemu -incoming <uri>
> - migrate_set_parameter multifd-channels 16 (on the command line)
>
> And they complain that it fails, because we are calling listen with the
> wrong value.
IMHO if we want to improve user friendliness then arguing about use
of the CLI vs QMP for migration is completely missing the bigger
picture IMHO.
I've mentioned several times before that the user should never need to
set this multifd-channels parameter (nor many other parameters) on the
destination in the first place.
The QEMU migration stream should be changed to add a full
bi-directional handshake, with negotiation of most parameters.
IOW, the src QEMU should be configured with 16 channels, and
it should connect the primary control channel, and then directly
tell the dest that it wants to use 16 multifd channels.
If we're expecting the user to pass this info across to the dest
manually we've already spectacularly failed wrt user friendliness.
I can try to move the todo even higher. Trying to list the initial goals
here:
- One extra phase of handshake between src/dst (maybe the time to boost
QEMU_VM_FILE_VERSION) before anything else happens.
- Dest shouldn't need to apply any cap/param, it should get all from src.
Dest still need to be setup with an URI and that should be all it needs.
- Src shouldn't need to worry on the binary version of dst anymore as long
as dest qemu supports handshake, because src can fetch it from dest.
- Handshake can always fail gracefully if anything wrong happened, it
normally should mean dest qemu is not compatible with src's setup (either
machine, device, or migration configs) for whatever reason. Src should
be able to get a solid error from dest if so.
- Handshake protocol should always be self-bootstrap-able, it means when we
change the handshake protocol it should always works with old binaries.
- When src is newer it should be able to know what's missing on dest and
skip the new bits.
- When dst is newer it should all rely on src (which is older) and it
should always understand src's language.
- All !main channels need to be established later than the handshake - if
we're going to do this anyway we probably should do it altogether to make
channels named, so each channel used in migration needs to have a common
header. Prepare to deprecate the old tricks of channel orderings.
Does it look reasonable? Anything to add/remove?
Thanks,
--
Peter Xu