qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v1 1/3] migration: Fix missing qemu_fflush() on buffer file i


From: Andrey Gruzdev
Subject: Re: [PATCH v1 1/3] migration: Fix missing qemu_fflush() on buffer file in bg_migration_thread
Date: Tue, 23 Mar 2021 20:21:43 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.3.2

On 23.03.2021 17:54, Peter Xu wrote:
On Tue, Mar 23, 2021 at 10:51:57AM +0300, Andrey Gruzdev wrote:
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 <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 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.
Oh right..

Would you comment above qemu_fflush() about it (maybe also move it right before
the call to qemu_put_buffer)?  Otherwise it indeed looks more like an
optimization rather than a bugfix.
Agree, better to have a comment here.
For the long term I think we'd better have a helper:

        qemu_put_qio_channel_buffer(QEMUFile *file, QIOChannelBuffer *bioc)

So as to hide this flush operation, which is tricky. We'll have two users so
far:

        bg_migration_completion
        colo_do_checkpoint_transaction

IMHO it'll be nicer if you'd do it in this patch altogether!

Thanks,

Sorry, can't get the idea, what's wrong with the fix.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]