From: Joao Martins <joao.m.martins@oracle.com>
To: Peter Xu <peterx@redhat.com>, Avihai Horon <avihaih@nvidia.com>
Cc: qemu-devel@nongnu.org, Fabiano Rosas <farosas@suse.de>,
Jan Kiszka <jan.kiszka@siemens.com>
Subject: Re: [PATCH] migration: Don't serialize migration while can't switchover
Date: Tue, 27 Feb 2024 10:44:53 +0000 [thread overview]
Message-ID: <72be3b8d-6879-45aa-81ee-f71013c3ee1e@oracle.com> (raw)
In-Reply-To: <Zd2SPGPVhW80b1Hu@x1n>
On 27/02/2024 07:41, Peter Xu wrote:
> On Thu, Feb 22, 2024 at 05:56:27PM +0200, Avihai Horon wrote:
>> This bug was observed in several VFIO migration scenarios where some
>> workload on the VM prevented RAM from ever reaching a hard zero, not
>> allowing VFIO initial pre-copy data to be sent, and thus destination
>> could not ack switchover. Note that the same scenario, but without
>> switchover-ack, would converge.
>>
>> Fix it by not serializing device data sending during pre-copy iterative
>> phase if switchover was not acked yet.
>
> I am still not fully convinced that it's even legal that one device can
> consume all iterator's bandwidth, ignoring the rest.. Though again it's
> not about this patch, but about commit 90697be889.
>
> I'm thinking whether we should allow each device to have its own portion of
> chance to push data for each call to qemu_savevm_state_iterate(),
> irrelevant of vfio's switchover-ack capability.
>
I guess that this means the only change needed is (...)
>> diff --git a/migration/savevm.c b/migration/savevm.c
>> index d612c8a9020..3a012796375 100644
>> --- a/migration/savevm.c
>> +++ b/migration/savevm.c
>> @@ -1386,7 +1386,7 @@ int qemu_savevm_state_resume_prepare(MigrationState *s)
>> * 0 : We haven't finished, caller have to go again
>> * 1 : We have finished, we can go to complete phase
>> */
>> -int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy)
>> +int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy, bool can_switchover)
>> {
>> SaveStateEntry *se;
>> int ret = 1;
>> @@ -1430,12 +1430,20 @@ int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy)
>> "%d(%s): %d",
>> se->section_id, se->idstr, ret);
>> qemu_file_set_error(f, ret);
>> + return ret;
>> }
>> - if (ret <= 0) {
>> - /* Do not proceed to the next vmstate before this one reported
>> - completion of the current stage. This serializes the migration
>> - and reduces the probability that a faster changing state is
>> - synchronized over and over again. */
>> +
>> + if (ret == 0 && can_switchover) {
>> + /*
>> + * Do not proceed to the next vmstate before this one reported
>> + * completion of the current stage. This serializes the migration
>> + * and reduces the probability that a faster changing state is
>> + * synchronized over and over again.
>> + * Do it only if migration can switchover. If migration can't
>> + * switchover yet, do proceed to let other devices send their data
>> + * too, as this may be required for switchover to be acked and
>> + * migration to converge.
>> + */
>> break;
>> }
>> }
(...) is here to have:
if (ret < 0) {
break;
}
? Or you were thinking in some heuristic?
Joao
next prev parent reply other threads:[~2024-02-27 10:45 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-22 15:56 [PATCH] migration: Don't serialize migration while can't switchover Avihai Horon
2024-02-27 3:16 ` Wang, Lei
2024-02-28 9:56 ` Avihai Horon
2024-02-27 7:41 ` Peter Xu
2024-02-27 10:44 ` Joao Martins [this message]
2024-02-28 0:00 ` Avihai Horon
2024-02-28 3:04 ` Peter Xu
2024-02-28 9:39 ` Avihai Horon
2024-02-28 10:17 ` Peter Xu
2024-02-28 10:27 ` Avihai Horon
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=72be3b8d-6879-45aa-81ee-f71013c3ee1e@oracle.com \
--to=joao.m.martins@oracle.com \
--cc=avihaih@nvidia.com \
--cc=farosas@suse.de \
--cc=jan.kiszka@siemens.com \
--cc=peterx@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).