[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/3] migration: implement query migration threadinfo by name
From: |
Jiang Jiacheng |
Subject: |
[PATCH 2/3] migration: implement query migration threadinfo by name |
Date: |
Fri, 20 Jan 2023 16:47:34 +0800 |
Introduce interface query-migrationthreads. The interface is use
with the migration thread name reported by qemu and returns with
migration thread name and its pid.
Introduce threadinfo.c to manage threads with migration.
Signed-off-by: Jiang Jiacheng <jiangjiacheng@huawei.com>
---
migration/meson.build | 1 +
migration/threadinfo.c | 70 ++++++++++++++++++++++++++++++++++++++++++
migration/threadinfo.h | 30 ++++++++++++++++++
qapi/migration.json | 30 ++++++++++++++++++
4 files changed, 131 insertions(+)
create mode 100644 migration/threadinfo.c
create mode 100644 migration/threadinfo.h
diff --git a/migration/meson.build b/migration/meson.build
index 690487cf1a..ed7d27f11a 100644
--- a/migration/meson.build
+++ b/migration/meson.build
@@ -25,6 +25,7 @@ softmmu_ss.add(files(
'savevm.c',
'socket.c',
'tls.c',
+ 'threadinfo.c',
), gnutls)
softmmu_ss.add(when: rdma, if_true: files('rdma.c'))
diff --git a/migration/threadinfo.c b/migration/threadinfo.c
new file mode 100644
index 0000000000..0df668d427
--- /dev/null
+++ b/migration/threadinfo.c
@@ -0,0 +1,70 @@
+/*
+ * Migration Threads info
+ *
+ * Copyright (c) 2022 HUAWEI TECHNOLOGIES CO., LTD.
+ *
+ * Authors:
+ * Jiang Jiacheng <jiangjiacheng@huawei.com>
+ *
+ * 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 "threadinfo.h"
+
+static QLIST_HEAD(, MigrationThread) migration_threads;
+
+MigrationThread* MigrationThreadAdd(const char *name, int thread_id)
+{
+ MigrationThread *thread = NULL;
+
+ thread = g_new0(MigrationThread, 1);
+ thread->name = (char*)name;
+ thread->thread_id = thread_id;
+
+ QLIST_INSERT_HEAD(&migration_threads, thread, node);
+
+ return thread;
+}
+
+void MigrationThreadDel(MigrationThread* thread)
+{
+ if (thread) {
+ QLIST_REMOVE(thread, node);
+ g_free(thread);
+ }
+}
+
+MigrationThread* MigrationThreadQuery(const char* name)
+{
+ MigrationThread *thread = NULL;
+
+ QLIST_FOREACH(thread, &migration_threads, node) {
+ if (!strcmp(thread->name, name)) {
+ return thread;
+ }
+ }
+
+ return NULL;
+}
+
+MigrationThreadInfo* qmp_query_migrationthreads(const char* name, Error **errp)
+{
+ MigrationThread *thread = NULL;
+ MigrationThreadInfo *info = NULL;
+
+ thread = MigrationThreadQuery(name);
+ if (!thread) {
+ goto err;
+ }
+
+ info = g_new0(MigrationThreadInfo, 1);
+ info->name = g_strdup(thread->name);
+ info->thread_id = thread->thread_id;
+
+ return info;
+
+err:
+ error_setg(errp, "thread '%s' doesn't exist", name);
+ return NULL;
+}
diff --git a/migration/threadinfo.h b/migration/threadinfo.h
new file mode 100644
index 0000000000..f62a6ff261
--- /dev/null
+++ b/migration/threadinfo.h
@@ -0,0 +1,30 @@
+/*
+ * Migration Threads info
+ *
+ * Copyright (c) 2022 HUAWEI TECHNOLOGIES CO., LTD.
+ *
+ * Authors:
+ * Jiang Jiacheng <jiangjiacheng@huawei.com>
+ *
+ * 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 "qemu/queue.h"
+#include "qemu/osdep.h"
+#include "qapi/error.h"
+#include "qapi/qapi-commands-migration.h"
+
+typedef struct MigrationThread MigrationThread;
+
+struct MigrationThread {
+ char *name; /* the name of migration thread */
+ int thread_id; /* ID of the underlying host thread */
+ QLIST_ENTRY(MigrationThread) node;
+};
+
+MigrationThread *MigrationThreadAdd(const char *name, int thread_id);
+
+void MigrationThreadDel(MigrationThread* info);
+
+MigrationThread* MigrationThreadQuery(const char* name);
diff --git a/qapi/migration.json b/qapi/migration.json
index b0cf366ac0..e93c3e560a 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -1970,6 +1970,36 @@
{ 'command': 'query-vcpu-dirty-limit',
'returns': [ 'DirtyLimitInfo' ] }
+##
+# @MigrationThreadInfo:
+#
+# Information about migrationthreads
+#
+# @name: the name of migration thread
+#
+# @thread-id: ID of the underlying host thread
+#
+# Since: 7.2
+##
+{ 'struct': 'MigrationThreadInfo',
+ 'data': {'name': 'str',
+ 'thread-id': 'int'} }
+
+##
+# @query-migrationthreads:
+#
+# Returns threadInfo about the thread specified by name
+#
+# data: migration thread name
+#
+# returns: information about the specified thread
+#
+# Since: 7.2
+##
+{ 'command': 'query-migrationthreads',
+ 'data': { 'name': 'str' },
+ 'returns': 'MigrationThreadInfo' }
+
##
# @snapshot-save:
#
--
2.33.0
[PATCH 2/3] migration: implement query migration threadinfo by name,
Jiang Jiacheng <=
[PATCH 1/3] migration: report migration thread name to libvirt, Jiang Jiacheng, 2023/01/20