All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC][PATCH v1 0/7] *** Add Multifd support for TLS migration ***
@ 2020-09-09 14:52 Chuan Zheng
  2020-09-09 14:52 ` [PATCH v1 1/7] migration/tls: save hostname into MigrationState Chuan Zheng
                   ` (6 more replies)
  0 siblings, 7 replies; 19+ messages in thread
From: Chuan Zheng @ 2020-09-09 14:52 UTC (permalink / raw)
  To: quintela, eblake, dgilbert, berrange
  Cc: zhengchuan, zhang.zhanghailiang, yuxiating, qemu-devel,
	xiexiangyou, alex.chen, jinyan12

TLS migration could easily reach bottleneck of cpu because of encryption
and decryption in migration thread.
In our test, the tls migration could only reach 300MB/s under bandwidth
of 500MB/s.

Inspired by multifd, we add multifd support for tls migration to make fully
use of given net bandwidth at the cost of multi-cpus and could reduce
at most of 100% migration time with 4U16G test vm.

Evaluate migration time of migration vm.
The VM specifications for migration are as follows:
- VM use 4-K page;
- the number of VCPU is 4;
- the total memory is 16Gigabit;
- use 'mempress' tool to pressurize VM(mempress 4096 100);
- migration flag is 73755 (8219 + 65536 (TLS)) vs 204827 (8219 + 65536 (TLS) + 131072(Multifd))

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|                      |         TLS           |      MultiFD + TLS (2 channel)    |
--------------------------------------------------------t---------------------------
| mempress 1024 120    |       25.035s         |           15.067s                 |
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| mempress 1024 200    |       48.798s         |           25.334s                 |
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| mempress 1024 300    |   Migration Failed    |           25.617s                 |
------------------------------------------------------------------------------------

Chuan Zheng (7):
  migration/tls: save hostname into MigrationState
  migration/tls: extract migration_tls_client_create for common-use
  migration/tls: add MigrationState into MultiFDSendParams
  migration/tls: extract cleanup function for common-use
  migration/tls: add support for tls check
  migration/tls: add support for multifd tls-handshake
  migration/tls: add trace points for multifd-tls

 migration/channel.c    |   5 ++
 migration/migration.c  |   1 +
 migration/migration.h  |   5 ++
 migration/multifd.c    | 121 +++++++++++++++++++++++++++++++++++++++++++------
 migration/multifd.h    |   2 +
 migration/tls.c        |  26 +++++++----
 migration/tls.h        |   6 +++
 migration/trace-events |   5 ++
 8 files changed, 149 insertions(+), 22 deletions(-)

-- 
1.8.3.1



^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v1 1/7] migration/tls: save hostname into MigrationState
  2020-09-09 14:52 [RFC][PATCH v1 0/7] *** Add Multifd support for TLS migration *** Chuan Zheng
@ 2020-09-09 14:52 ` Chuan Zheng
  2020-09-10 13:11   ` Daniel P. Berrangé
  2020-09-09 14:52 ` [PATCH v1 2/7] migration/tls: extract migration_tls_client_create for common-use Chuan Zheng
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 19+ messages in thread
From: Chuan Zheng @ 2020-09-09 14:52 UTC (permalink / raw)
  To: quintela, eblake, dgilbert, berrange
  Cc: zhengchuan, zhang.zhanghailiang, yuxiating, qemu-devel,
	xiexiangyou, alex.chen, jinyan12

hostname is need in multifd-tls, save hostname into MigrationState

Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
Signed-off-by: Yan Jin <jinyan12@huawei.com>
---
 migration/channel.c   | 5 +++++
 migration/migration.c | 1 +
 migration/migration.h | 5 +++++
 3 files changed, 11 insertions(+)

diff --git a/migration/channel.c b/migration/channel.c
index 20e4c8e..2af3069 100644
--- a/migration/channel.c
+++ b/migration/channel.c
@@ -66,6 +66,11 @@ void migration_channel_connect(MigrationState *s,
     trace_migration_set_outgoing_channel(
         ioc, object_get_typename(OBJECT(ioc)), hostname, error);
 
+    /* Save hostname into MigrationState for handshake */
+    if (hostname) {
+        s->hostname = g_strdup(hostname);
+    }
+
     if (!error) {
         if (s->parameters.tls_creds &&
             *s->parameters.tls_creds &&
diff --git a/migration/migration.c b/migration/migration.c
index 58a5452..e20b778 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1883,6 +1883,7 @@ void migrate_init(MigrationState *s)
     s->migration_thread_running = false;
     error_free(s->error);
     s->error = NULL;
+    s->hostname = NULL;
 
     migrate_set_state(&s->state, MIGRATION_STATUS_NONE, MIGRATION_STATUS_SETUP);
 
diff --git a/migration/migration.h b/migration/migration.h
index ae497bd..758f803 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -261,6 +261,11 @@ struct MigrationState
      * (which is in 4M chunk).
      */
     uint8_t clear_bitmap_shift;
+
+    /*
+     * This save hostname when out-going migration starts
+     */
+    char *hostname;
 };
 
 void migrate_set_state(int *state, int old_state, int new_state);
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v1 2/7] migration/tls: extract migration_tls_client_create for common-use
  2020-09-09 14:52 [RFC][PATCH v1 0/7] *** Add Multifd support for TLS migration *** Chuan Zheng
  2020-09-09 14:52 ` [PATCH v1 1/7] migration/tls: save hostname into MigrationState Chuan Zheng
@ 2020-09-09 14:52 ` Chuan Zheng
  2020-09-10 13:16   ` Daniel P. Berrangé
  2020-09-09 14:52 ` [PATCH v1 3/7] migration/tls: add MigrationState into MultiFDSendParams Chuan Zheng
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 19+ messages in thread
From: Chuan Zheng @ 2020-09-09 14:52 UTC (permalink / raw)
  To: quintela, eblake, dgilbert, berrange
  Cc: zhengchuan, zhang.zhanghailiang, yuxiating, qemu-devel,
	xiexiangyou, alex.chen, jinyan12

migration_tls_client_create will be used in multifd-tls, let's
extract it.

Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
Signed-off-by: Yan Jin <jinyan12@huawei.com>
---
 migration/tls.c | 26 ++++++++++++++++++--------
 migration/tls.h |  6 ++++++
 2 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/migration/tls.c b/migration/tls.c
index 7a02ec8..e888698 100644
--- a/migration/tls.c
+++ b/migration/tls.c
@@ -22,7 +22,6 @@
 #include "channel.h"
 #include "migration.h"
 #include "tls.h"
-#include "io/channel-tls.h"
 #include "crypto/tlscreds.h"
 #include "qemu/error-report.h"
 #include "qapi/error.h"
@@ -125,11 +124,10 @@ static void migration_tls_outgoing_handshake(QIOTask *task,
     object_unref(OBJECT(ioc));
 }
 
-
-void migration_tls_channel_connect(MigrationState *s,
-                                   QIOChannel *ioc,
-                                   const char *hostname,
-                                   Error **errp)
+QIOChannelTLS *migration_tls_client_create(MigrationState *s,
+                                 QIOChannel *ioc,
+                                 const char *hostname,
+                                 Error **errp)
 {
     QCryptoTLSCreds *creds;
     QIOChannelTLS *tioc;
@@ -137,7 +135,7 @@ void migration_tls_channel_connect(MigrationState *s,
     creds = migration_tls_get_creds(
         s, QCRYPTO_TLS_CREDS_ENDPOINT_CLIENT, errp);
     if (!creds) {
-        return;
+        return NULL;
     }
 
     if (s->parameters.tls_hostname && *s->parameters.tls_hostname) {
@@ -145,11 +143,23 @@ void migration_tls_channel_connect(MigrationState *s,
     }
     if (!hostname) {
         error_setg(errp, "No hostname available for TLS");
-        return;
+        return NULL;
     }
 
     tioc = qio_channel_tls_new_client(
         ioc, creds, hostname, errp);
+
+    return tioc;
+}
+
+void migration_tls_channel_connect(MigrationState *s,
+                                   QIOChannel *ioc,
+                                   const char *hostname,
+                                   Error **errp)
+{
+    QIOChannelTLS *tioc;
+
+    tioc = migration_tls_client_create(s, ioc, hostname, errp);
     if (!tioc) {
         return;
     }
diff --git a/migration/tls.h b/migration/tls.h
index cdd7000..d4a0861 100644
--- a/migration/tls.h
+++ b/migration/tls.h
@@ -22,11 +22,17 @@
 #define QEMU_MIGRATION_TLS_H
 
 #include "io/channel.h"
+#include "io/channel-tls.h"
 
 void migration_tls_channel_process_incoming(MigrationState *s,
                                             QIOChannel *ioc,
                                             Error **errp);
 
+QIOChannelTLS *migration_tls_client_create(MigrationState *s,
+                                   QIOChannel *ioc,
+                                   const char *hostname,
+                                   Error **errp);
+
 void migration_tls_channel_connect(MigrationState *s,
                                    QIOChannel *ioc,
                                    const char *hostname,
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v1 3/7] migration/tls: add MigrationState into MultiFDSendParams
  2020-09-09 14:52 [RFC][PATCH v1 0/7] *** Add Multifd support for TLS migration *** Chuan Zheng
  2020-09-09 14:52 ` [PATCH v1 1/7] migration/tls: save hostname into MigrationState Chuan Zheng
  2020-09-09 14:52 ` [PATCH v1 2/7] migration/tls: extract migration_tls_client_create for common-use Chuan Zheng
@ 2020-09-09 14:52 ` Chuan Zheng
  2020-09-10 13:38   ` Daniel P. Berrangé
  2020-09-09 14:52 ` [PATCH v1 4/7] migration/tls: extract cleanup function for common-use Chuan Zheng
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 19+ messages in thread
From: Chuan Zheng @ 2020-09-09 14:52 UTC (permalink / raw)
  To: quintela, eblake, dgilbert, berrange
  Cc: zhengchuan, zhang.zhanghailiang, yuxiating, qemu-devel,
	xiexiangyou, alex.chen, jinyan12

MigrationState is need for tls session build, add MigrationState
into MultiFDSendParams.

Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
Signed-off-by: Yan Jin <jinyan12@huawei.com>
---
 migration/multifd.c | 2 ++
 migration/multifd.h | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/migration/multifd.c b/migration/multifd.c
index d044120..2e04803 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -543,6 +543,7 @@ void multifd_save_cleanup(void)
 
         socket_send_channel_destroy(p->c);
         p->c = NULL;
+        p->s = NULL;
         qemu_mutex_destroy(&p->mutex);
         qemu_sem_destroy(&p->sem);
         qemu_sem_destroy(&p->sem_sync);
@@ -738,6 +739,7 @@ static void multifd_new_send_channel_async(QIOTask *task, gpointer opaque)
         object_unref(OBJECT(sioc));
         error_free(local_err);
     } else {
+        p->s = migrate_get_current();
         p->c = QIO_CHANNEL(sioc);
         qio_channel_set_delay(p->c, false);
         p->running = true;
diff --git a/migration/multifd.h b/migration/multifd.h
index 448a03d..8175b3c 100644
--- a/migration/multifd.h
+++ b/migration/multifd.h
@@ -66,6 +66,8 @@ typedef struct {
 } MultiFDPages_t;
 
 typedef struct {
+    /* Migration State */
+    MigrationState *s;
     /* this fields are not changed once the thread is created */
     /* channel number */
     uint8_t id;
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v1 4/7] migration/tls: extract cleanup function for common-use
  2020-09-09 14:52 [RFC][PATCH v1 0/7] *** Add Multifd support for TLS migration *** Chuan Zheng
                   ` (2 preceding siblings ...)
  2020-09-09 14:52 ` [PATCH v1 3/7] migration/tls: add MigrationState into MultiFDSendParams Chuan Zheng
@ 2020-09-09 14:52 ` Chuan Zheng
  2020-09-10 13:18   ` Daniel P. Berrangé
  2020-09-09 14:52 ` [PATCH v1 5/7] migration/tls: add support for tls check Chuan Zheng
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 19+ messages in thread
From: Chuan Zheng @ 2020-09-09 14:52 UTC (permalink / raw)
  To: quintela, eblake, dgilbert, berrange
  Cc: zhengchuan, zhang.zhanghailiang, yuxiating, qemu-devel,
	xiexiangyou, alex.chen, jinyan12

multifd channel cleanup is need  if multifd handshake failed,
let's extract it.

Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
Signed-off-by: Yan Jin <jinyan12@huawei.com>
---
 migration/multifd.c | 34 ++++++++++++++++++++++------------
 1 file changed, 22 insertions(+), 12 deletions(-)

diff --git a/migration/multifd.c b/migration/multifd.c
index 2e04803..b2e741c 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -718,6 +718,23 @@ out:
     return NULL;
 }
 
+static void multifd_new_send_channel_cleanup(MultiFDSendParams *p,
+                                             QIOChannel *ioc, Error *err)
+{
+     migrate_set_error(migrate_get_current(), err);
+     /* Error happen, we need to tell who pay attention to me */
+     qemu_sem_post(&multifd_send_state->channels_ready);
+     qemu_sem_post(&p->sem_sync);
+     /*
+      * Although multifd_send_thread is not created, but main migration
+      * thread neet to judge whether it is running, so we need to mark
+      * its status.
+      */
+     p->quit = true;
+     object_unref(OBJECT(ioc));
+     error_free(err);
+}
+
 static void multifd_new_send_channel_async(QIOTask *task, gpointer opaque)
 {
     MultiFDSendParams *p = opaque;
@@ -726,18 +743,7 @@ static void multifd_new_send_channel_async(QIOTask *task, gpointer opaque)
 
     trace_multifd_new_send_channel_async(p->id);
     if (qio_task_propagate_error(task, &local_err)) {
-        migrate_set_error(migrate_get_current(), local_err);
-        /* Error happen, we need to tell who pay attention to me */
-        qemu_sem_post(&multifd_send_state->channels_ready);
-        qemu_sem_post(&p->sem_sync);
-        /*
-         * Although multifd_send_thread is not created, but main migration
-         * thread neet to judge whether it is running, so we need to mark
-         * its status.
-         */
-        p->quit = true;
-        object_unref(OBJECT(sioc));
-        error_free(local_err);
+        goto cleanup;
     } else {
         p->s = migrate_get_current();
         p->c = QIO_CHANNEL(sioc);
@@ -745,7 +751,11 @@ static void multifd_new_send_channel_async(QIOTask *task, gpointer opaque)
         p->running = true;
         qemu_thread_create(&p->thread, p->name, multifd_send_thread, p,
                            QEMU_THREAD_JOINABLE);
+        return;
     }
+
+cleanup:
+    multifd_new_send_channel_cleanup(p, sioc, local_err);
 }
 
 int multifd_save_setup(Error **errp)
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v1 5/7] migration/tls: add support for tls check
  2020-09-09 14:52 [RFC][PATCH v1 0/7] *** Add Multifd support for TLS migration *** Chuan Zheng
                   ` (3 preceding siblings ...)
  2020-09-09 14:52 ` [PATCH v1 4/7] migration/tls: extract cleanup function for common-use Chuan Zheng
@ 2020-09-09 14:52 ` Chuan Zheng
  2020-09-10 13:36   ` Daniel P. Berrangé
  2020-09-09 14:52 ` [PATCH v1 6/7] migration/tls: add support for multifd tls-handshake Chuan Zheng
  2020-09-09 14:52 ` [PATCH v1 7/7] migration/tls: add trace points for multifd-tls Chuan Zheng
  6 siblings, 1 reply; 19+ messages in thread
From: Chuan Zheng @ 2020-09-09 14:52 UTC (permalink / raw)
  To: quintela, eblake, dgilbert, berrange
  Cc: zhengchuan, zhang.zhanghailiang, yuxiating, qemu-devel,
	xiexiangyou, alex.chen, jinyan12

add multifd_channel_connect to support for tls check.

Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
Signed-off-by: Yan Jin <jinyan12@huawei.com>
---
 migration/multifd.c | 47 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 45 insertions(+), 2 deletions(-)

diff --git a/migration/multifd.c b/migration/multifd.c
index b2e741c..b2076d7 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -20,6 +20,7 @@
 #include "ram.h"
 #include "migration.h"
 #include "socket.h"
+#include "tls.h"
 #include "qemu-file.h"
 #include "trace.h"
 #include "multifd.h"
@@ -718,6 +719,47 @@ out:
     return NULL;
 }
 
+static void multifd_tls_channel_connect(MultiFDSendParams *p,
+                                    QIOChannel *ioc,
+                                    Error **errp)
+{
+    /* TODO */
+}
+
+static bool multifd_channel_connect(MultiFDSendParams *p,
+                                    QIOChannel *ioc,
+                                    Error *error)
+{
+    MigrationState *s = p->s;
+
+    if (!error) {
+        if (s->parameters.tls_creds &&
+            *s->parameters.tls_creds &&
+            !object_dynamic_cast(OBJECT(ioc),
+                                 TYPE_QIO_CHANNEL_TLS)) {
+            multifd_tls_channel_connect(p, ioc, &error);
+            if (!error) {
+                /*
+                 * tls_channel_connect will call back to this
+                 * function after the TLS handshake,
+                 * so we mustn't call multifd_send_thread until then
+                 */
+                return false;
+            } else {
+                return true;
+            }
+        } else {
+            /* update for tls qio channel */
+            p->c = ioc;
+            qemu_thread_create(&p->thread, p->name, multifd_send_thread, p,
+                                   QEMU_THREAD_JOINABLE);
+       }
+       return false;
+    }
+
+    return true;
+}
+
 static void multifd_new_send_channel_cleanup(MultiFDSendParams *p,
                                              QIOChannel *ioc, Error *err)
 {
@@ -749,8 +791,9 @@ static void multifd_new_send_channel_async(QIOTask *task, gpointer opaque)
         p->c = QIO_CHANNEL(sioc);
         qio_channel_set_delay(p->c, false);
         p->running = true;
-        qemu_thread_create(&p->thread, p->name, multifd_send_thread, p,
-                           QEMU_THREAD_JOINABLE);
+        if (multifd_channel_connect(p, sioc, local_err)) {
+            goto cleanup;
+        }
         return;
     }
 
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v1 6/7] migration/tls: add support for multifd tls-handshake
  2020-09-09 14:52 [RFC][PATCH v1 0/7] *** Add Multifd support for TLS migration *** Chuan Zheng
                   ` (4 preceding siblings ...)
  2020-09-09 14:52 ` [PATCH v1 5/7] migration/tls: add support for tls check Chuan Zheng
@ 2020-09-09 14:52 ` Chuan Zheng
  2020-09-10 13:25   ` Daniel P. Berrangé
  2020-09-09 14:52 ` [PATCH v1 7/7] migration/tls: add trace points for multifd-tls Chuan Zheng
  6 siblings, 1 reply; 19+ messages in thread
From: Chuan Zheng @ 2020-09-09 14:52 UTC (permalink / raw)
  To: quintela, eblake, dgilbert, berrange
  Cc: zhengchuan, zhang.zhanghailiang, yuxiating, qemu-devel,
	xiexiangyou, alex.chen, jinyan12

add support for multifd tls-handshake

Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
Signed-off-by: Yan Jin <jinyan12@huawei.com>
---
 migration/multifd.c | 32 +++++++++++++++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)

diff --git a/migration/multifd.c b/migration/multifd.c
index b2076d7..2509187 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -719,11 +719,41 @@ out:
     return NULL;
 }
 
+static bool multifd_channel_connect(MultiFDSendParams *p,
+                                    QIOChannel *ioc,
+                                    Error *error);
+
+static void multifd_tls_outgoing_handshake(QIOTask *task,
+                                           gpointer opaque)
+{
+    MultiFDSendParams *p = opaque;
+    QIOChannel *ioc = QIO_CHANNEL(qio_task_get_source(task));
+    Error *err = NULL;
+
+    qio_task_propagate_error(task, &err);
+    multifd_channel_connect(p, ioc, err);
+}
+
 static void multifd_tls_channel_connect(MultiFDSendParams *p,
                                     QIOChannel *ioc,
                                     Error **errp)
 {
-    /* TODO */
+    MigrationState *s = p->s;
+    const char *hostname = s->hostname;
+    QIOChannelTLS *tioc;
+
+    tioc = migration_tls_client_create(s, ioc, hostname, errp);
+    if (!tioc) {
+        return;
+    }
+
+    qio_channel_set_name(QIO_CHANNEL(tioc), "multifd-tls-outgoing");
+    qio_channel_tls_handshake(tioc,
+                              multifd_tls_outgoing_handshake,
+                              p,
+                              NULL,
+                              NULL);
+
 }
 
 static bool multifd_channel_connect(MultiFDSendParams *p,
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v1 7/7] migration/tls: add trace points for multifd-tls
  2020-09-09 14:52 [RFC][PATCH v1 0/7] *** Add Multifd support for TLS migration *** Chuan Zheng
                   ` (5 preceding siblings ...)
  2020-09-09 14:52 ` [PATCH v1 6/7] migration/tls: add support for multifd tls-handshake Chuan Zheng
@ 2020-09-09 14:52 ` Chuan Zheng
  2020-09-10 13:37   ` Daniel P. Berrangé
  6 siblings, 1 reply; 19+ messages in thread
From: Chuan Zheng @ 2020-09-09 14:52 UTC (permalink / raw)
  To: quintela, eblake, dgilbert, berrange
  Cc: zhengchuan, zhang.zhanghailiang, yuxiating, qemu-devel,
	xiexiangyou, alex.chen, jinyan12

add trace points for multifd-tls for debug.

Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
Signed-off-by: Yan Jin <jinyan12@huawei.com>
---
 migration/multifd.c    | 10 +++++++++-
 migration/trace-events |  5 +++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/migration/multifd.c b/migration/multifd.c
index 2509187..26935b6 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -730,7 +730,11 @@ static void multifd_tls_outgoing_handshake(QIOTask *task,
     QIOChannel *ioc = QIO_CHANNEL(qio_task_get_source(task));
     Error *err = NULL;
 
-    qio_task_propagate_error(task, &err);
+    if (qio_task_propagate_error(task, &err)) {
+        trace_multifd_tls_outgoing_handshake_error(error_get_pretty(err));
+    } else {
+        trace_multifd_tls_outgoing_handshake_complete();
+    }
     multifd_channel_connect(p, ioc, err);
 }
 
@@ -747,6 +751,7 @@ static void multifd_tls_channel_connect(MultiFDSendParams *p,
         return;
     }
 
+    trace_multifd_tls_outgoing_handshake_start(hostname);
     qio_channel_set_name(QIO_CHANNEL(tioc), "multifd-tls-outgoing");
     qio_channel_tls_handshake(tioc,
                               multifd_tls_outgoing_handshake,
@@ -762,6 +767,9 @@ static bool multifd_channel_connect(MultiFDSendParams *p,
 {
     MigrationState *s = p->s;
 
+    trace_multifd_set_outgoing_channel(
+        ioc, object_get_typename(OBJECT(ioc)), s->hostname, error);
+
     if (!error) {
         if (s->parameters.tls_creds &&
             *s->parameters.tls_creds &&
diff --git a/migration/trace-events b/migration/trace-events
index 4ab0a50..860d2c4 100644
--- a/migration/trace-events
+++ b/migration/trace-events
@@ -109,6 +109,11 @@ multifd_send_sync_main_wait(uint8_t id) "channel %d"
 multifd_send_terminate_threads(bool error) "error %d"
 multifd_send_thread_end(uint8_t id, uint64_t packets, uint64_t pages) "channel %d packets %" PRIu64 " pages %"  PRIu64
 multifd_send_thread_start(uint8_t id) "%d"
+multifd_tls_outgoing_handshake_start(const char *hostname) "hostname=%s"
+multifd_tls_outgoing_handshake_error(const char *err) "err=%s"
+multifd_tls_outgoing_handshake_complete(void) ""
+multifd_set_outgoing_channel(void *ioc, const char *ioctype, const char *hostname, void *err)  "ioc=%p ioctype=%s hostname=%s err=%p"
+
 ram_discard_range(const char *rbname, uint64_t start, size_t len) "%s: start: %" PRIx64 " %zx"
 ram_load_loop(const char *rbname, uint64_t addr, int flags, void *host) "%s: addr: 0x%" PRIx64 " flags: 0x%x host: %p"
 ram_load_postcopy_loop(uint64_t addr, int flags) "@%" PRIx64 " %x"
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH v1 1/7] migration/tls: save hostname into MigrationState
  2020-09-09 14:52 ` [PATCH v1 1/7] migration/tls: save hostname into MigrationState Chuan Zheng
@ 2020-09-10 13:11   ` Daniel P. Berrangé
  2020-09-10 13:55     ` Zheng Chuan
  0 siblings, 1 reply; 19+ messages in thread
From: Daniel P. Berrangé @ 2020-09-10 13:11 UTC (permalink / raw)
  To: Chuan Zheng
  Cc: zhang.zhanghailiang, quintela, yuxiating, dgilbert, xiexiangyou,
	qemu-devel, alex.chen, jinyan12

On Wed, Sep 09, 2020 at 10:52:51PM +0800, Chuan Zheng wrote:
> hostname is need in multifd-tls, save hostname into MigrationState
> 
> Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
> Signed-off-by: Yan Jin <jinyan12@huawei.com>
> ---
>  migration/channel.c   | 5 +++++
>  migration/migration.c | 1 +
>  migration/migration.h | 5 +++++
>  3 files changed, 11 insertions(+)
> 
> diff --git a/migration/channel.c b/migration/channel.c
> index 20e4c8e..2af3069 100644
> --- a/migration/channel.c
> +++ b/migration/channel.c
> @@ -66,6 +66,11 @@ void migration_channel_connect(MigrationState *s,
>      trace_migration_set_outgoing_channel(
>          ioc, object_get_typename(OBJECT(ioc)), hostname, error);
>  
> +    /* Save hostname into MigrationState for handshake */
> +    if (hostname) {
> +        s->hostname = g_strdup(hostname);
> +    }
> +
>      if (!error) {
>          if (s->parameters.tls_creds &&
>              *s->parameters.tls_creds &&
> diff --git a/migration/migration.c b/migration/migration.c
> index 58a5452..e20b778 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -1883,6 +1883,7 @@ void migrate_init(MigrationState *s)
>      s->migration_thread_running = false;
>      error_free(s->error);
>      s->error = NULL;
> +    s->hostname = NULL;
>  
>      migrate_set_state(&s->state, MIGRATION_STATUS_NONE, MIGRATION_STATUS_SETUP);
>  
> diff --git a/migration/migration.h b/migration/migration.h
> index ae497bd..758f803 100644
> --- a/migration/migration.h
> +++ b/migration/migration.h
> @@ -261,6 +261,11 @@ struct MigrationState
>       * (which is in 4M chunk).
>       */
>      uint8_t clear_bitmap_shift;
> +
> +    /*
> +     * This save hostname when out-going migration starts
> +     */
> +    char *hostname;
>  };

Something needs to free(hostname) at the appropriate time, otherwise
well have a memory leak if we run migration multiple times.


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v1 2/7] migration/tls: extract migration_tls_client_create for common-use
  2020-09-09 14:52 ` [PATCH v1 2/7] migration/tls: extract migration_tls_client_create for common-use Chuan Zheng
@ 2020-09-10 13:16   ` Daniel P. Berrangé
  2020-09-10 13:55     ` Zheng Chuan
  0 siblings, 1 reply; 19+ messages in thread
From: Daniel P. Berrangé @ 2020-09-10 13:16 UTC (permalink / raw)
  To: Chuan Zheng
  Cc: zhang.zhanghailiang, quintela, yuxiating, dgilbert, xiexiangyou,
	qemu-devel, alex.chen, jinyan12

On Wed, Sep 09, 2020 at 10:52:52PM +0800, Chuan Zheng wrote:
> migration_tls_client_create will be used in multifd-tls, let's
> extract it.
> 
> Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
> Signed-off-by: Yan Jin <jinyan12@huawei.com>
> ---
>  migration/tls.c | 26 ++++++++++++++++++--------
>  migration/tls.h |  6 ++++++
>  2 files changed, 24 insertions(+), 8 deletions(-)
> 
> diff --git a/migration/tls.c b/migration/tls.c
> index 7a02ec8..e888698 100644
> --- a/migration/tls.c
> +++ b/migration/tls.c
> @@ -22,7 +22,6 @@
>  #include "channel.h"
>  #include "migration.h"
>  #include "tls.h"
> -#include "io/channel-tls.h"
>  #include "crypto/tlscreds.h"
>  #include "qemu/error-report.h"
>  #include "qapi/error.h"
> @@ -125,11 +124,10 @@ static void migration_tls_outgoing_handshake(QIOTask *task,
>      object_unref(OBJECT(ioc));
>  }
>  
> -
> -void migration_tls_channel_connect(MigrationState *s,
> -                                   QIOChannel *ioc,
> -                                   const char *hostname,
> -                                   Error **errp)
> +QIOChannelTLS *migration_tls_client_create(MigrationState *s,
> +                                 QIOChannel *ioc,
> +                                 const char *hostname,
> +                                 Error **errp)

Alignment of parameters is messed up.

>  {
>      QCryptoTLSCreds *creds;
>      QIOChannelTLS *tioc;
> @@ -137,7 +135,7 @@ void migration_tls_channel_connect(MigrationState *s,
>      creds = migration_tls_get_creds(
>          s, QCRYPTO_TLS_CREDS_ENDPOINT_CLIENT, errp);
>      if (!creds) {
> -        return;
> +        return NULL;
>      }
>  
>      if (s->parameters.tls_hostname && *s->parameters.tls_hostname) {
> @@ -145,11 +143,23 @@ void migration_tls_channel_connect(MigrationState *s,
>      }
>      if (!hostname) {
>          error_setg(errp, "No hostname available for TLS");
> -        return;
> +        return NULL;
>      }
>  
>      tioc = qio_channel_tls_new_client(
>          ioc, creds, hostname, errp);
> +
> +    return tioc;
> +}
> +
> +void migration_tls_channel_connect(MigrationState *s,
> +                                   QIOChannel *ioc,
> +                                   const char *hostname,
> +                                   Error **errp)
> +{
> +    QIOChannelTLS *tioc;
> +
> +    tioc = migration_tls_client_create(s, ioc, hostname, errp);
>      if (!tioc) {
>          return;
>      }
> diff --git a/migration/tls.h b/migration/tls.h
> index cdd7000..d4a0861 100644
> --- a/migration/tls.h
> +++ b/migration/tls.h
> @@ -22,11 +22,17 @@
>  #define QEMU_MIGRATION_TLS_H
>  
>  #include "io/channel.h"
> +#include "io/channel-tls.h"
>  
>  void migration_tls_channel_process_incoming(MigrationState *s,
>                                              QIOChannel *ioc,
>                                              Error **errp);
>  
> +QIOChannelTLS *migration_tls_client_create(MigrationState *s,
> +                                   QIOChannel *ioc,
> +                                   const char *hostname,
> +                                   Error **errp);

Again alignment is messed up.

Assuming that's fixed

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>



Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v1 4/7] migration/tls: extract cleanup function for common-use
  2020-09-09 14:52 ` [PATCH v1 4/7] migration/tls: extract cleanup function for common-use Chuan Zheng
@ 2020-09-10 13:18   ` Daniel P. Berrangé
  0 siblings, 0 replies; 19+ messages in thread
From: Daniel P. Berrangé @ 2020-09-10 13:18 UTC (permalink / raw)
  To: Chuan Zheng
  Cc: zhang.zhanghailiang, quintela, yuxiating, dgilbert, xiexiangyou,
	qemu-devel, alex.chen, jinyan12

On Wed, Sep 09, 2020 at 10:52:54PM +0800, Chuan Zheng wrote:
> multifd channel cleanup is need  if multifd handshake failed,
> let's extract it.
> 
> Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
> Signed-off-by: Yan Jin <jinyan12@huawei.com>
> ---
>  migration/multifd.c | 34 ++++++++++++++++++++++------------
>  1 file changed, 22 insertions(+), 12 deletions(-)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v1 6/7] migration/tls: add support for multifd tls-handshake
  2020-09-09 14:52 ` [PATCH v1 6/7] migration/tls: add support for multifd tls-handshake Chuan Zheng
@ 2020-09-10 13:25   ` Daniel P. Berrangé
  2020-09-10 13:56     ` Zheng Chuan
  0 siblings, 1 reply; 19+ messages in thread
From: Daniel P. Berrangé @ 2020-09-10 13:25 UTC (permalink / raw)
  To: Chuan Zheng
  Cc: zhang.zhanghailiang, quintela, yuxiating, dgilbert, xiexiangyou,
	qemu-devel, alex.chen, jinyan12

On Wed, Sep 09, 2020 at 10:52:56PM +0800, Chuan Zheng wrote:
> add support for multifd tls-handshake
> 
> Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
> Signed-off-by: Yan Jin <jinyan12@huawei.com>
> ---
>  migration/multifd.c | 32 +++++++++++++++++++++++++++++++-
>  1 file changed, 31 insertions(+), 1 deletion(-)
> 
> diff --git a/migration/multifd.c b/migration/multifd.c
> index b2076d7..2509187 100644
> --- a/migration/multifd.c
> +++ b/migration/multifd.c
> @@ -719,11 +719,41 @@ out:
>      return NULL;
>  }
>  
> +static bool multifd_channel_connect(MultiFDSendParams *p,
> +                                    QIOChannel *ioc,
> +                                    Error *error);
> +
> +static void multifd_tls_outgoing_handshake(QIOTask *task,
> +                                           gpointer opaque)
> +{
> +    MultiFDSendParams *p = opaque;
> +    QIOChannel *ioc = QIO_CHANNEL(qio_task_get_source(task));
> +    Error *err = NULL;
> +
> +    qio_task_propagate_error(task, &err);
> +    multifd_channel_connect(p, ioc, err);
> +}
> +
>  static void multifd_tls_channel_connect(MultiFDSendParams *p,
>                                      QIOChannel *ioc,
>                                      Error **errp)
>  {
> -    /* TODO */
> +    MigrationState *s = p->s;
> +    const char *hostname = s->hostname;
> +    QIOChannelTLS *tioc;
> +
> +    tioc = migration_tls_client_create(s, ioc, hostname, errp);
> +    if (!tioc) {
> +        return;
> +    }
> +
> +    qio_channel_set_name(QIO_CHANNEL(tioc), "multifd-tls-outgoing");
> +    qio_channel_tls_handshake(tioc,
> +                              multifd_tls_outgoing_handshake,
> +                              p,
> +                              NULL,
> +                              NULL);
> +
>  }


Please squash this back into the previous patch, and both are
inter-dependant on each other, and thus don't make sense to split

Assuming it is squashed in

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>



Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v1 5/7] migration/tls: add support for tls check
  2020-09-09 14:52 ` [PATCH v1 5/7] migration/tls: add support for tls check Chuan Zheng
@ 2020-09-10 13:36   ` Daniel P. Berrangé
  0 siblings, 0 replies; 19+ messages in thread
From: Daniel P. Berrangé @ 2020-09-10 13:36 UTC (permalink / raw)
  To: Chuan Zheng
  Cc: zhang.zhanghailiang, quintela, yuxiating, dgilbert, xiexiangyou,
	qemu-devel, alex.chen, jinyan12

On Wed, Sep 09, 2020 at 10:52:55PM +0800, Chuan Zheng wrote:
> add multifd_channel_connect to support for tls check.
> 
> Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
> Signed-off-by: Yan Jin <jinyan12@huawei.com>
> ---
>  migration/multifd.c | 47 +++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 45 insertions(+), 2 deletions(-)
> 
> diff --git a/migration/multifd.c b/migration/multifd.c
> index b2e741c..b2076d7 100644
> --- a/migration/multifd.c
> +++ b/migration/multifd.c
> @@ -20,6 +20,7 @@
>  #include "ram.h"
>  #include "migration.h"
>  #include "socket.h"
> +#include "tls.h"
>  #include "qemu-file.h"
>  #include "trace.h"
>  #include "multifd.h"
> @@ -718,6 +719,47 @@ out:
>      return NULL;
>  }
>  
> +static void multifd_tls_channel_connect(MultiFDSendParams *p,
> +                                    QIOChannel *ioc,
> +                                    Error **errp)
> +{
> +    /* TODO */
> +}
> +
> +static bool multifd_channel_connect(MultiFDSendParams *p,
> +                                    QIOChannel *ioc,
> +                                    Error *error)
> +{
> +    MigrationState *s = p->s;
> +
> +    if (!error) {
> +        if (s->parameters.tls_creds &&
> +            *s->parameters.tls_creds &&
> +            !object_dynamic_cast(OBJECT(ioc),
> +                                 TYPE_QIO_CHANNEL_TLS)) {
> +            multifd_tls_channel_connect(p, ioc, &error);
> +            if (!error) {
> +                /*
> +                 * tls_channel_connect will call back to this
> +                 * function after the TLS handshake,
> +                 * so we mustn't call multifd_send_thread until then
> +                 */
> +                return false;
> +            } else {
> +                return true;
> +            }
> +        } else {
> +            /* update for tls qio channel */
> +            p->c = ioc;
> +            qemu_thread_create(&p->thread, p->name, multifd_send_thread, p,
> +                                   QEMU_THREAD_JOINABLE);
> +       }
> +       return false;
> +    }
> +
> +    return true;
> +}
> +
>  static void multifd_new_send_channel_cleanup(MultiFDSendParams *p,
>                                               QIOChannel *ioc, Error *err)
>  {
> @@ -749,8 +791,9 @@ static void multifd_new_send_channel_async(QIOTask *task, gpointer opaque)
>          p->c = QIO_CHANNEL(sioc);
>          qio_channel_set_delay(p->c, false);
>          p->running = true;
> -        qemu_thread_create(&p->thread, p->name, multifd_send_thread, p,
> -                           QEMU_THREAD_JOINABLE);
> +        if (multifd_channel_connect(p, sioc, local_err)) {
> +            goto cleanup;
> +        }
>          return;
>      }

If this is squashed with the following patch then

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v1 7/7] migration/tls: add trace points for multifd-tls
  2020-09-09 14:52 ` [PATCH v1 7/7] migration/tls: add trace points for multifd-tls Chuan Zheng
@ 2020-09-10 13:37   ` Daniel P. Berrangé
  2020-09-10 13:57     ` Zheng Chuan
  0 siblings, 1 reply; 19+ messages in thread
From: Daniel P. Berrangé @ 2020-09-10 13:37 UTC (permalink / raw)
  To: Chuan Zheng
  Cc: zhang.zhanghailiang, quintela, yuxiating, dgilbert, xiexiangyou,
	qemu-devel, alex.chen, jinyan12

On Wed, Sep 09, 2020 at 10:52:57PM +0800, Chuan Zheng wrote:
> add trace points for multifd-tls for debug.
> 
> Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
> Signed-off-by: Yan Jin <jinyan12@huawei.com>
> ---
>  migration/multifd.c    | 10 +++++++++-
>  migration/trace-events |  5 +++++
>  2 files changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/migration/multifd.c b/migration/multifd.c
> index 2509187..26935b6 100644
> --- a/migration/multifd.c
> +++ b/migration/multifd.c
> @@ -730,7 +730,11 @@ static void multifd_tls_outgoing_handshake(QIOTask *task,
>      QIOChannel *ioc = QIO_CHANNEL(qio_task_get_source(task));
>      Error *err = NULL;
>  
> -    qio_task_propagate_error(task, &err);
> +    if (qio_task_propagate_error(task, &err)) {
> +        trace_multifd_tls_outgoing_handshake_error(error_get_pretty(err));
> +    } else {
> +        trace_multifd_tls_outgoing_handshake_complete();
> +    }
>      multifd_channel_connect(p, ioc, err);
>  }
>  
> @@ -747,6 +751,7 @@ static void multifd_tls_channel_connect(MultiFDSendParams *p,
>          return;
>      }
>  
> +    trace_multifd_tls_outgoing_handshake_start(hostname);
>      qio_channel_set_name(QIO_CHANNEL(tioc), "multifd-tls-outgoing");
>      qio_channel_tls_handshake(tioc,
>                                multifd_tls_outgoing_handshake,
> @@ -762,6 +767,9 @@ static bool multifd_channel_connect(MultiFDSendParams *p,
>  {
>      MigrationState *s = p->s;
>  
> +    trace_multifd_set_outgoing_channel(
> +        ioc, object_get_typename(OBJECT(ioc)), s->hostname, error);
> +
>      if (!error) {
>          if (s->parameters.tls_creds &&
>              *s->parameters.tls_creds &&
> diff --git a/migration/trace-events b/migration/trace-events
> index 4ab0a50..860d2c4 100644
> --- a/migration/trace-events
> +++ b/migration/trace-events
> @@ -109,6 +109,11 @@ multifd_send_sync_main_wait(uint8_t id) "channel %d"
>  multifd_send_terminate_threads(bool error) "error %d"
>  multifd_send_thread_end(uint8_t id, uint64_t packets, uint64_t pages) "channel %d packets %" PRIu64 " pages %"  PRIu64
>  multifd_send_thread_start(uint8_t id) "%d"
> +multifd_tls_outgoing_handshake_start(const char *hostname) "hostname=%s"
> +multifd_tls_outgoing_handshake_error(const char *err) "err=%s"
> +multifd_tls_outgoing_handshake_complete(void) ""

I'd suggest adding 'void *ioc' for all of these to make it clearer to
correlate the traces.

> +multifd_set_outgoing_channel(void *ioc, const char *ioctype, const char *hostname, void *err)  "ioc=%p ioctype=%s hostname=%s err=%p"
> +
>  ram_discard_range(const char *rbname, uint64_t start, size_t len) "%s: start: %" PRIx64 " %zx"
>  ram_load_loop(const char *rbname, uint64_t addr, int flags, void *host) "%s: addr: 0x%" PRIx64 " flags: 0x%x host: %p"
>  ram_load_postcopy_loop(uint64_t addr, int flags) "@%" PRIx64 " %x"
> -- 
> 1.8.3.1
> 

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v1 3/7] migration/tls: add MigrationState into MultiFDSendParams
  2020-09-09 14:52 ` [PATCH v1 3/7] migration/tls: add MigrationState into MultiFDSendParams Chuan Zheng
@ 2020-09-10 13:38   ` Daniel P. Berrangé
  0 siblings, 0 replies; 19+ messages in thread
From: Daniel P. Berrangé @ 2020-09-10 13:38 UTC (permalink / raw)
  To: Chuan Zheng
  Cc: zhang.zhanghailiang, quintela, yuxiating, dgilbert, xiexiangyou,
	qemu-devel, alex.chen, jinyan12

On Wed, Sep 09, 2020 at 10:52:53PM +0800, Chuan Zheng wrote:
> MigrationState is need for tls session build, add MigrationState
> into MultiFDSendParams.
> 
> Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
> Signed-off-by: Yan Jin <jinyan12@huawei.com>
> ---
>  migration/multifd.c | 2 ++
>  migration/multifd.h | 2 ++
>  2 files changed, 4 insertions(+)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v1 1/7] migration/tls: save hostname into MigrationState
  2020-09-10 13:11   ` Daniel P. Berrangé
@ 2020-09-10 13:55     ` Zheng Chuan
  0 siblings, 0 replies; 19+ messages in thread
From: Zheng Chuan @ 2020-09-10 13:55 UTC (permalink / raw)
  To: Daniel P. Berrangé
  Cc: zhang.zhanghailiang, quintela, yuxiating, dgilbert, xiexiangyou,
	qemu-devel, alex.chen, jinyan12



On 2020/9/10 21:11, Daniel P. Berrangé wrote:
> On Wed, Sep 09, 2020 at 10:52:51PM +0800, Chuan Zheng wrote:
>> hostname is need in multifd-tls, save hostname into MigrationState
>>
>> Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
>> Signed-off-by: Yan Jin <jinyan12@huawei.com>
>> ---
>>  migration/channel.c   | 5 +++++
>>  migration/migration.c | 1 +
>>  migration/migration.h | 5 +++++
>>  3 files changed, 11 insertions(+)
>>
>> diff --git a/migration/channel.c b/migration/channel.c
>> index 20e4c8e..2af3069 100644
>> --- a/migration/channel.c
>> +++ b/migration/channel.c
>> @@ -66,6 +66,11 @@ void migration_channel_connect(MigrationState *s,
>>      trace_migration_set_outgoing_channel(
>>          ioc, object_get_typename(OBJECT(ioc)), hostname, error);
>>  
>> +    /* Save hostname into MigrationState for handshake */
>> +    if (hostname) {
>> +        s->hostname = g_strdup(hostname);
>> +    }
>> +
>>      if (!error) {
>>          if (s->parameters.tls_creds &&
>>              *s->parameters.tls_creds &&
>> diff --git a/migration/migration.c b/migration/migration.c
>> index 58a5452..e20b778 100644
>> --- a/migration/migration.c
>> +++ b/migration/migration.c
>> @@ -1883,6 +1883,7 @@ void migrate_init(MigrationState *s)
>>      s->migration_thread_running = false;
>>      error_free(s->error);
>>      s->error = NULL;
>> +    s->hostname = NULL;
>>  
>>      migrate_set_state(&s->state, MIGRATION_STATUS_NONE, MIGRATION_STATUS_SETUP);
>>  
>> diff --git a/migration/migration.h b/migration/migration.h
>> index ae497bd..758f803 100644
>> --- a/migration/migration.h
>> +++ b/migration/migration.h
>> @@ -261,6 +261,11 @@ struct MigrationState
>>       * (which is in 4M chunk).
>>       */
>>      uint8_t clear_bitmap_shift;
>> +
>> +    /*
>> +     * This save hostname when out-going migration starts
>> +     */
>> +    char *hostname;
>>  };
> 
> Something needs to free(hostname) at the appropriate time, otherwise
> well have a memory leak if we run migration multiple times.
> 
Hi, Daniel
Thank you for your review.

Yes, it will have a memory leak. Maybe i could just assign incoming parameters
when it is not NULL other than g_strdup it.

However, i am doubt if it is the best idea to save hostname into current_migration:(


> 
> Regards,
> Daniel
> 



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v1 2/7] migration/tls: extract migration_tls_client_create for common-use
  2020-09-10 13:16   ` Daniel P. Berrangé
@ 2020-09-10 13:55     ` Zheng Chuan
  0 siblings, 0 replies; 19+ messages in thread
From: Zheng Chuan @ 2020-09-10 13:55 UTC (permalink / raw)
  To: Daniel P. Berrangé
  Cc: zhang.zhanghailiang, quintela, yuxiating, dgilbert, xiexiangyou,
	qemu-devel, alex.chen, jinyan12



On 2020/9/10 21:16, Daniel P. Berrangé wrote:
> On Wed, Sep 09, 2020 at 10:52:52PM +0800, Chuan Zheng wrote:
>> migration_tls_client_create will be used in multifd-tls, let's
>> extract it.
>>
>> Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
>> Signed-off-by: Yan Jin <jinyan12@huawei.com>
>> ---
>>  migration/tls.c | 26 ++++++++++++++++++--------
>>  migration/tls.h |  6 ++++++
>>  2 files changed, 24 insertions(+), 8 deletions(-)
>>
>> diff --git a/migration/tls.c b/migration/tls.c
>> index 7a02ec8..e888698 100644
>> --- a/migration/tls.c
>> +++ b/migration/tls.c
>> @@ -22,7 +22,6 @@
>>  #include "channel.h"
>>  #include "migration.h"
>>  #include "tls.h"
>> -#include "io/channel-tls.h"
>>  #include "crypto/tlscreds.h"
>>  #include "qemu/error-report.h"
>>  #include "qapi/error.h"
>> @@ -125,11 +124,10 @@ static void migration_tls_outgoing_handshake(QIOTask *task,
>>      object_unref(OBJECT(ioc));
>>  }
>>  
>> -
>> -void migration_tls_channel_connect(MigrationState *s,
>> -                                   QIOChannel *ioc,
>> -                                   const char *hostname,
>> -                                   Error **errp)
>> +QIOChannelTLS *migration_tls_client_create(MigrationState *s,
>> +                                 QIOChannel *ioc,
>> +                                 const char *hostname,
>> +                                 Error **errp)
> 
> Alignment of parameters is messed up.
> 
Sure, will fix in v2
>>  {
>>      QCryptoTLSCreds *creds;
>>      QIOChannelTLS *tioc;
>> @@ -137,7 +135,7 @@ void migration_tls_channel_connect(MigrationState *s,
>>      creds = migration_tls_get_creds(
>>          s, QCRYPTO_TLS_CREDS_ENDPOINT_CLIENT, errp);
>>      if (!creds) {
>> -        return;
>> +        return NULL;
>>      }
>>  
>>      if (s->parameters.tls_hostname && *s->parameters.tls_hostname) {
>> @@ -145,11 +143,23 @@ void migration_tls_channel_connect(MigrationState *s,
>>      }
>>      if (!hostname) {
>>          error_setg(errp, "No hostname available for TLS");
>> -        return;
>> +        return NULL;
>>      }
>>  
>>      tioc = qio_channel_tls_new_client(
>>          ioc, creds, hostname, errp);
>> +
>> +    return tioc;
>> +}
>> +
>> +void migration_tls_channel_connect(MigrationState *s,
>> +                                   QIOChannel *ioc,
>> +                                   const char *hostname,
>> +                                   Error **errp)
>> +{
>> +    QIOChannelTLS *tioc;
>> +
>> +    tioc = migration_tls_client_create(s, ioc, hostname, errp);
>>      if (!tioc) {
>>          return;
>>      }
>> diff --git a/migration/tls.h b/migration/tls.h
>> index cdd7000..d4a0861 100644
>> --- a/migration/tls.h
>> +++ b/migration/tls.h
>> @@ -22,11 +22,17 @@
>>  #define QEMU_MIGRATION_TLS_H
>>  
>>  #include "io/channel.h"
>> +#include "io/channel-tls.h"
>>  
>>  void migration_tls_channel_process_incoming(MigrationState *s,
>>                                              QIOChannel *ioc,
>>                                              Error **errp);
>>  
>> +QIOChannelTLS *migration_tls_client_create(MigrationState *s,
>> +                                   QIOChannel *ioc,
>> +                                   const char *hostname,
>> +                                   Error **errp);
> 
> Again alignment is messed up.
> 
> Assuming that's fixed
> 
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> 
> 
> 
> Regards,
> Daniel
> 



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v1 6/7] migration/tls: add support for multifd tls-handshake
  2020-09-10 13:25   ` Daniel P. Berrangé
@ 2020-09-10 13:56     ` Zheng Chuan
  0 siblings, 0 replies; 19+ messages in thread
From: Zheng Chuan @ 2020-09-10 13:56 UTC (permalink / raw)
  To: Daniel P. Berrangé
  Cc: zhang.zhanghailiang, quintela, yuxiating, dgilbert, xiexiangyou,
	qemu-devel, alex.chen, jinyan12



On 2020/9/10 21:25, Daniel P. Berrangé wrote:
> On Wed, Sep 09, 2020 at 10:52:56PM +0800, Chuan Zheng wrote:
>> add support for multifd tls-handshake
>>
>> Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
>> Signed-off-by: Yan Jin <jinyan12@huawei.com>
>> ---
>>  migration/multifd.c | 32 +++++++++++++++++++++++++++++++-
>>  1 file changed, 31 insertions(+), 1 deletion(-)
>>
>> diff --git a/migration/multifd.c b/migration/multifd.c
>> index b2076d7..2509187 100644
>> --- a/migration/multifd.c
>> +++ b/migration/multifd.c
>> @@ -719,11 +719,41 @@ out:
>>      return NULL;
>>  }
>>  
>> +static bool multifd_channel_connect(MultiFDSendParams *p,
>> +                                    QIOChannel *ioc,
>> +                                    Error *error);
>> +
>> +static void multifd_tls_outgoing_handshake(QIOTask *task,
>> +                                           gpointer opaque)
>> +{
>> +    MultiFDSendParams *p = opaque;
>> +    QIOChannel *ioc = QIO_CHANNEL(qio_task_get_source(task));
>> +    Error *err = NULL;
>> +
>> +    qio_task_propagate_error(task, &err);
>> +    multifd_channel_connect(p, ioc, err);
>> +}
>> +
>>  static void multifd_tls_channel_connect(MultiFDSendParams *p,
>>                                      QIOChannel *ioc,
>>                                      Error **errp)
>>  {
>> -    /* TODO */
>> +    MigrationState *s = p->s;
>> +    const char *hostname = s->hostname;
>> +    QIOChannelTLS *tioc;
>> +
>> +    tioc = migration_tls_client_create(s, ioc, hostname, errp);
>> +    if (!tioc) {
>> +        return;
>> +    }
>> +
>> +    qio_channel_set_name(QIO_CHANNEL(tioc), "multifd-tls-outgoing");
>> +    qio_channel_tls_handshake(tioc,
>> +                              multifd_tls_outgoing_handshake,
>> +                              p,
>> +                              NULL,
>> +                              NULL);
>> +
>>  }
> 
> 
> Please squash this back into the previous patch, and both are
> inter-dependant on each other, and thus don't make sense to split
> 
> Assuming it is squashed in
> 
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> 
OK, will squash it in v2
> 
> 
> Regards,
> Daniel
> 



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v1 7/7] migration/tls: add trace points for multifd-tls
  2020-09-10 13:37   ` Daniel P. Berrangé
@ 2020-09-10 13:57     ` Zheng Chuan
  0 siblings, 0 replies; 19+ messages in thread
From: Zheng Chuan @ 2020-09-10 13:57 UTC (permalink / raw)
  To: Daniel P. Berrangé
  Cc: zhang.zhanghailiang, quintela, yuxiating, dgilbert, xiexiangyou,
	qemu-devel, alex.chen, jinyan12



On 2020/9/10 21:37, Daniel P. Berrangé wrote:
> On Wed, Sep 09, 2020 at 10:52:57PM +0800, Chuan Zheng wrote:
>> add trace points for multifd-tls for debug.
>>
>> Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
>> Signed-off-by: Yan Jin <jinyan12@huawei.com>
>> ---
>>  migration/multifd.c    | 10 +++++++++-
>>  migration/trace-events |  5 +++++
>>  2 files changed, 14 insertions(+), 1 deletion(-)
>>
>> diff --git a/migration/multifd.c b/migration/multifd.c
>> index 2509187..26935b6 100644
>> --- a/migration/multifd.c
>> +++ b/migration/multifd.c
>> @@ -730,7 +730,11 @@ static void multifd_tls_outgoing_handshake(QIOTask *task,
>>      QIOChannel *ioc = QIO_CHANNEL(qio_task_get_source(task));
>>      Error *err = NULL;
>>  
>> -    qio_task_propagate_error(task, &err);
>> +    if (qio_task_propagate_error(task, &err)) {
>> +        trace_multifd_tls_outgoing_handshake_error(error_get_pretty(err));
>> +    } else {
>> +        trace_multifd_tls_outgoing_handshake_complete();
>> +    }
>>      multifd_channel_connect(p, ioc, err);
>>  }
>>  
>> @@ -747,6 +751,7 @@ static void multifd_tls_channel_connect(MultiFDSendParams *p,
>>          return;
>>      }
>>  
>> +    trace_multifd_tls_outgoing_handshake_start(hostname);
>>      qio_channel_set_name(QIO_CHANNEL(tioc), "multifd-tls-outgoing");
>>      qio_channel_tls_handshake(tioc,
>>                                multifd_tls_outgoing_handshake,
>> @@ -762,6 +767,9 @@ static bool multifd_channel_connect(MultiFDSendParams *p,
>>  {
>>      MigrationState *s = p->s;
>>  
>> +    trace_multifd_set_outgoing_channel(
>> +        ioc, object_get_typename(OBJECT(ioc)), s->hostname, error);
>> +
>>      if (!error) {
>>          if (s->parameters.tls_creds &&
>>              *s->parameters.tls_creds &&
>> diff --git a/migration/trace-events b/migration/trace-events
>> index 4ab0a50..860d2c4 100644
>> --- a/migration/trace-events
>> +++ b/migration/trace-events
>> @@ -109,6 +109,11 @@ multifd_send_sync_main_wait(uint8_t id) "channel %d"
>>  multifd_send_terminate_threads(bool error) "error %d"
>>  multifd_send_thread_end(uint8_t id, uint64_t packets, uint64_t pages) "channel %d packets %" PRIu64 " pages %"  PRIu64
>>  multifd_send_thread_start(uint8_t id) "%d"
>> +multifd_tls_outgoing_handshake_start(const char *hostname) "hostname=%s"
>> +multifd_tls_outgoing_handshake_error(const char *err) "err=%s"
>> +multifd_tls_outgoing_handshake_complete(void) ""
> 
> I'd suggest adding 'void *ioc' for all of these to make it clearer to
> correlate the traces.
> 
OK, will add it in v2

>> +multifd_set_outgoing_channel(void *ioc, const char *ioctype, const char *hostname, void *err)  "ioc=%p ioctype=%s hostname=%s err=%p"
>> +
>>  ram_discard_range(const char *rbname, uint64_t start, size_t len) "%s: start: %" PRIx64 " %zx"
>>  ram_load_loop(const char *rbname, uint64_t addr, int flags, void *host) "%s: addr: 0x%" PRIx64 " flags: 0x%x host: %p"
>>  ram_load_postcopy_loop(uint64_t addr, int flags) "@%" PRIx64 " %x"
>> -- 
>> 1.8.3.1
>>
> 
> Regards,
> Daniel
> 



^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2020-09-10 13:59 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-09 14:52 [RFC][PATCH v1 0/7] *** Add Multifd support for TLS migration *** Chuan Zheng
2020-09-09 14:52 ` [PATCH v1 1/7] migration/tls: save hostname into MigrationState Chuan Zheng
2020-09-10 13:11   ` Daniel P. Berrangé
2020-09-10 13:55     ` Zheng Chuan
2020-09-09 14:52 ` [PATCH v1 2/7] migration/tls: extract migration_tls_client_create for common-use Chuan Zheng
2020-09-10 13:16   ` Daniel P. Berrangé
2020-09-10 13:55     ` Zheng Chuan
2020-09-09 14:52 ` [PATCH v1 3/7] migration/tls: add MigrationState into MultiFDSendParams Chuan Zheng
2020-09-10 13:38   ` Daniel P. Berrangé
2020-09-09 14:52 ` [PATCH v1 4/7] migration/tls: extract cleanup function for common-use Chuan Zheng
2020-09-10 13:18   ` Daniel P. Berrangé
2020-09-09 14:52 ` [PATCH v1 5/7] migration/tls: add support for tls check Chuan Zheng
2020-09-10 13:36   ` Daniel P. Berrangé
2020-09-09 14:52 ` [PATCH v1 6/7] migration/tls: add support for multifd tls-handshake Chuan Zheng
2020-09-10 13:25   ` Daniel P. Berrangé
2020-09-10 13:56     ` Zheng Chuan
2020-09-09 14:52 ` [PATCH v1 7/7] migration/tls: add trace points for multifd-tls Chuan Zheng
2020-09-10 13:37   ` Daniel P. Berrangé
2020-09-10 13:57     ` Zheng Chuan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.