Message ID | 20210318174611.293520-2-andrey.gruzdev@virtuozzo.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | migration: Fixes to the 'background-snapshot' code | expand |
On 18.03.21 18:46, Andrey Gruzdev wrote: > Added missing qemu_fflush() on buffer file holding precopy device state. > Increased initial QIOChannelBuffer allocation to 512KB to avoid reallocs. > Typical configurations often require >200KB for device state and VMDESC. > > Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com> > --- > migration/migration.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/migration/migration.c b/migration/migration.c > index 36768391b6..496cf6e17b 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -3857,7 +3857,7 @@ static void *bg_migration_thread(void *opaque) > * with vCPUs running and, finally, write stashed non-RAM part of > * the vmstate from the buffer to the migration stream. > */ > - s->bioc = qio_channel_buffer_new(128 * 1024); > + s->bioc = qio_channel_buffer_new(512 * 1024); ^ would that better be a separate patch? It sounds more like an improvement than a fix. > qio_channel_set_name(QIO_CHANNEL(s->bioc), "vmstate-buffer"); > fb = qemu_fopen_channel_output(QIO_CHANNEL(s->bioc)); > object_unref(OBJECT(s->bioc)); > @@ -3911,6 +3911,8 @@ static void *bg_migration_thread(void *opaque) > if (qemu_savevm_state_complete_precopy_non_iterable(fb, false, false)) { > goto fail; > } > + qemu_fflush(fb); Fixes: ? > + > /* Now initialize UFFD context and start tracking RAM writes */ > if (ram_write_tracking_start()) { > goto fail; >
On 19.03.2021 15:39, David Hildenbrand wrote: > On 18.03.21 18:46, Andrey Gruzdev wrote: >> Added missing qemu_fflush() on buffer file holding precopy device state. >> Increased initial QIOChannelBuffer allocation to 512KB to avoid >> reallocs. >> Typical configurations often require >200KB for device state and VMDESC. >> >> Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com> >> --- >> migration/migration.c | 4 +++- >> 1 file changed, 3 insertions(+), 1 deletion(-) >> >> diff --git a/migration/migration.c b/migration/migration.c >> index 36768391b6..496cf6e17b 100644 >> --- a/migration/migration.c >> +++ b/migration/migration.c >> @@ -3857,7 +3857,7 @@ static void *bg_migration_thread(void *opaque) >> * with vCPUs running and, finally, write stashed non-RAM part of >> * the vmstate from the buffer to the migration stream. >> */ >> - s->bioc = qio_channel_buffer_new(128 * 1024); >> + s->bioc = qio_channel_buffer_new(512 * 1024); > > ^ would that better be a separate patch? It sounds more like an > improvement than a fix. > >> qio_channel_set_name(QIO_CHANNEL(s->bioc), "vmstate-buffer"); >> fb = qemu_fopen_channel_output(QIO_CHANNEL(s->bioc)); >> object_unref(OBJECT(s->bioc)); >> @@ -3911,6 +3911,8 @@ static void *bg_migration_thread(void *opaque) >> if (qemu_savevm_state_complete_precopy_non_iterable(fb, false, >> false)) { >> goto fail; >> } >> + qemu_fflush(fb); > > Fixes: ? > It fixes unflushed QEMUFile, not an improvement. If not flushed, the migrate_get_current()->bioc->data would stay missing some bytes at the tail. >> + >> /* Now initialize UFFD context and start tracking RAM writes */ >> if (ram_write_tracking_start()) { >> goto fail; >> > >
diff --git a/migration/migration.c b/migration/migration.c index 36768391b6..496cf6e17b 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -3857,7 +3857,7 @@ static void *bg_migration_thread(void *opaque) * with vCPUs running and, finally, write stashed non-RAM part of * the vmstate from the buffer to the migration stream. */ - s->bioc = qio_channel_buffer_new(128 * 1024); + s->bioc = qio_channel_buffer_new(512 * 1024); qio_channel_set_name(QIO_CHANNEL(s->bioc), "vmstate-buffer"); fb = qemu_fopen_channel_output(QIO_CHANNEL(s->bioc)); object_unref(OBJECT(s->bioc)); @@ -3911,6 +3911,8 @@ static void *bg_migration_thread(void *opaque) if (qemu_savevm_state_complete_precopy_non_iterable(fb, false, false)) { goto fail; } + qemu_fflush(fb); + /* Now initialize UFFD context and start tracking RAM writes */ if (ram_write_tracking_start()) { goto fail;
Added missing qemu_fflush() on buffer file holding precopy device state. Increased initial QIOChannelBuffer allocation to 512KB to avoid reallocs. Typical configurations often require >200KB for device state and VMDESC. Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com> --- migration/migration.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)