qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH COLO-Frame v6 03/31] COLO: migrate colo related


From: zhanghailiang
Subject: Re: [Qemu-devel] [PATCH COLO-Frame v6 03/31] COLO: migrate colo related info to slave
Date: Mon, 6 Jul 2015 15:26:13 +0800
User-agent: Mozilla/5.0 (Windows NT 6.1; rv:31.0) Gecko/20100101 Thunderbird/31.1.1

On 2015/7/4 2:03, Dr. David Alan Gilbert wrote:
* zhanghailiang (address@hidden) wrote:
We can know if VM in destination should go into COLO mode by refer to
the info that has been migrated from PVM.

Signed-off-by: zhanghailiang <address@hidden>
Signed-off-by: Yang Hongyang <address@hidden>
Signed-off-by: Lai Jiangshan <address@hidden>
Signed-off-by: Gonglei <address@hidden>
---
  include/migration/migration-colo.h |  2 ++
  migration/Makefile.objs            |  1 +
  migration/colo-comm.c              | 47 ++++++++++++++++++++++++++++++++++++++
  trace-events                       |  3 +++
  vl.c                               |  5 +++-
  5 files changed, 57 insertions(+), 1 deletion(-)
  create mode 100644 migration/colo-comm.c

diff --git a/include/migration/migration-colo.h 
b/include/migration/migration-colo.h
index c6d0c51..e20a0c1 100644
--- a/include/migration/migration-colo.h
+++ b/include/migration/migration-colo.h
@@ -14,7 +14,9 @@
  #define QEMU_MIGRATION_COLO_H

  #include "qemu-common.h"
+#include "migration/migration.h"

  bool colo_supported(void);
+void colo_info_mig_init(void);

  #endif
diff --git a/migration/Makefile.objs b/migration/Makefile.objs
index 5a25d39..cb7bd30 100644
--- a/migration/Makefile.objs
+++ b/migration/Makefile.objs
@@ -1,5 +1,6 @@
  common-obj-y += migration.o tcp.o
  common-obj-$(CONFIG_COLO) += colo.o
+common-obj-y += colo-comm.o
  common-obj-y += vmstate.o
  common-obj-y += qemu-file.o qemu-file-buf.o qemu-file-unix.o qemu-file-stdio.o
  common-obj-y += xbzrle.o
diff --git a/migration/colo-comm.c b/migration/colo-comm.c
new file mode 100644
index 0000000..0b76eb4
--- /dev/null
+++ b/migration/colo-comm.c
@@ -0,0 +1,47 @@
+/*
+ * COarse-grain LOck-stepping Virtual Machines for Non-stop Service (COLO)
+ * (a.k.a. Fault Tolerance or Continuous Replication)
+ *
+ * Copyright (c) 2015 HUAWEI TECHNOLOGIES CO., LTD.
+ * Copyright (c) 2015 FUJITSU LIMITED
+ * Copyright (c) 2015 Intel Corporation
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or
+ * later. See the COPYING file in the top-level directory.
+ *
+ */
+
+#include <migration/migration-colo.h>
+#include "trace.h"
+
+static bool colo_requested;
+
+/* save */
+static void colo_info_save(QEMUFile *f, void *opaque)
+{
+    qemu_put_byte(f, migrate_enable_colo());
+}
+
+/* restore */
+static int colo_info_load(QEMUFile *f, void *opaque, int version_id)
+{
+    int value = qemu_get_byte(f);
+
+    if (value && !colo_requested) {
+        trace_colo_info_load("COLO request!");
+    }
+    colo_requested = value;
+
+    return 0;
+}
+
+static SaveVMHandlers savevm_colo_info_handlers = {
+    .save_state = colo_info_save,
+    .load_state = colo_info_load,
+};
+
+void colo_info_mig_init(void)
+{
+    register_savevm_live(NULL, "colo", -1, 1,
+                         &savevm_colo_info_handlers, NULL);
+}
diff --git a/trace-events b/trace-events
index 52b7efa..3f63019 100644
--- a/trace-events
+++ b/trace-events
@@ -1466,6 +1466,9 @@ rdma_start_incoming_migration_after_rdma_listen(void) ""
  rdma_start_outgoing_migration_after_rdma_connect(void) ""
  rdma_start_outgoing_migration_after_rdma_source_init(void) ""

+# migration/colo-comm.c
+colo_info_load(const char *msg) "%s"
+
  # kvm-all.c
  kvm_ioctl(int type, void *arg) "type 0x%x, arg %p"
  kvm_vm_ioctl(int type, void *arg) "type 0x%x, arg %p"
diff --git a/vl.c b/vl.c
index 2201e27..988567a 100644
--- a/vl.c
+++ b/vl.c
@@ -90,6 +90,7 @@ int main(int argc, char **argv)
  #include "sysemu/dma.h"
  #include "audio/audio.h"
  #include "migration/migration.h"
+#include "migration/migration-colo.h"
  #include "sysemu/kvm.h"
  #include "qapi/qmp/qjson.h"
  #include "qemu/option.h"
@@ -4261,7 +4262,9 @@ int main(int argc, char **argv, char **envp)

      blk_mig_init();
      ram_mig_init();
-
+#ifdef CONFIG_COLO
+    colo_info_mig_init();
+#endif

Does't this still break migration compatibility?  I wouldn't

Yes, it will break migration if the QEMU in destination and source not 
enable/disable (configure) this
feature together, also not compatible with old version on migration.

want to have to have two QEMU builds on a system, one built with COLO
and one built without COLO.   You need to arrange for the
section to only be sent if COLO is enabled (i.e. migrate_set_capability colo 
on).
One way to do that would be to use the new QEMU optional sections
that Juan added recently.


Hmm, his method can address the above problems, (though, we will still fail 
when we configure
with --enable-colo in source side and --disable-colo in destination, but that 
is what
we want, we should not go into colo mode if secondary host is not enable this 
feature).
I will look into his patch, and fix that in next version, thanks,

zhanghailiang

Dave

      /* If the currently selected machine wishes to override the units-per-bus
       * property of its default HBA interface type, do so now. */
      if (machine_class->units_per_default_bus) {
--
1.7.12.4


--
Dr. David Alan Gilbert / address@hidden / Manchester, UK

.






reply via email to

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