diff mbox series

[1/3] migration: Fix missing qemu_fflush() on buffer file in bg_migration_thread

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

Commit Message

Andrey Gruzdev March 18, 2021, 5:46 p.m. UTC
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(-)

Comments

David Hildenbrand March 19, 2021, 12:39 p.m. UTC | #1
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;
>
Andrey Gruzdev March 19, 2021, 1:13 p.m. UTC | #2
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 mbox series

Patch

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;