On 22.03.2021 23:17, Peter Xu wrote: > On Fri, Mar 19, 2021 at 05:52:47PM +0300, 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 >> --- >> migration/migration.c | 4 +++- >> 1 file changed, 3 insertions(+), 1 deletion(-) >> >> diff --git a/migration/migration.c b/migration/migration.c >> index ca8b97baa5..32b48fe9f5 100644 >> --- a/migration/migration.c >> +++ b/migration/migration.c >> @@ -3812,7 +3812,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)); >> @@ -3866,6 +3866,8 @@ static void *bg_migration_thread(void *opaque) >> if (qemu_savevm_state_complete_precopy_non_iterable(fb, false, false)) { >> goto fail; >> } >> + qemu_fflush(fb); > What will happen if the vmstates are bigger than 512KB? Would the extra data > be dropped? No, the buffer shall be reallocated and the original content shall be kept. > In that case, I'm wondering whether we'll need a qemu_file_get_error() after > the flush to detect it, and whether we need to retry with a bigger buffer size? > > Thanks, > I think for QIOBufferChannel we don't need that, as I can see from the buffer channel implementation.