From: Peter Xu Date: Tue, 27 Jan 2026 18:52:43 +0000 (-0500) Subject: migration/postcopy: Send device states without copying buffer X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e188607fa61276055c1f9c454ce3cf8fe3c8d38;p=thirdparty%2Fqemu.git migration/postcopy: Send device states without copying buffer Put buffer can be async as long as the flush happens before the buffer will be recycled / reused. Do it for postcopy package data. Quick measurement shows a small VM the time to push / flush the package shrinks from 91us to 38us. Signed-off-by: Peter Xu Reviewed-by: Fabiano Rosas Tested-by: Lukas Straub Link: https://lore.kernel.org/qemu-devel/20260127185254.3954634-14-peterx@redhat.com Signed-off-by: Fabiano Rosas --- diff --git a/migration/savevm.c b/migration/savevm.c index 9d2109718a..d41e89228d 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -1136,7 +1136,8 @@ int qemu_savevm_send_packaged(QEMUFile *f, const uint8_t *buf, size_t len) trace_qemu_savevm_send_packaged(); qemu_savevm_command_send(f, MIG_CMD_PACKAGED, 4, (uint8_t *)&tmp); - qemu_put_buffer(f, buf, len); + /* We can use async put because the qemufile will be flushed right away */ + qemu_put_buffer_async(f, buf, len, false); qemu_fflush(f); return 0;