From c934558ff8d535a91146be93d45c730b8023a8cd Mon Sep 17 00:00:00 2001 From: zhengchuan <zhengchuan@huawei.com> Date: Wed, 14 Dec 2022 11:07:58 +0800 Subject: [PATCH] migration/migration-pin:add some migration/multiFd params add migration/multiFd params. Signed-off-by:zhengchuan<zhengchuan@huawei.com> --- src/conf/domain_conf.c | 8 ++++++++ src/conf/domain_conf.h | 12 ++++++++++++ src/libvirt_private.syms | 1 + src/qemu/qemu_domain.c | 6 ++++++ src/qemu/qemu_domain.h | 5 ++++- src/qemu/qemu_migration.c | 1 + src/util/vircgroup.c | 3 +++ src/util/vircgroup.h | 1 + 8 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 22ad43e1d7..f54f99f379 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -31075,6 +31075,14 @@ virDomainDefHasSpiceGraphics(const virDomainDef *def) return false; } +void +virDomainMigrationIDDefFree(virDomainMigrationIDDefPtr def) +{ + if (!def) + return; + virBitmapFree(def->cpumask); + VIR_FREE(def); +} ssize_t virDomainWatchdogDefFind(const virDomainDef *def, diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index ed07859bc5..196053d950 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -27,6 +27,7 @@ #include <libxml/xpath.h> #include "internal.h" +#include "viralloc.h" #include "virconftypes.h" #include "capabilities.h" #include "cpu_conf.h" @@ -4498,3 +4499,14 @@ virDomainObjGetMessages(virDomainObj *vm, bool virDomainDefHasSpiceGraphics(const virDomainDef *def); + +typedef struct _virDomainMigrationIDDef virDomainMigrationIDDef; +typedef virDomainMigrationIDDef *virDomainMigrationIDDefPtr; +struct _virDomainMigrationIDDef { + bool autofill; + int thread_id; + virBitmap *cpumask; + virDomainThreadSchedParam sched; +}; + +void virDomainMigrationIDDefFree(virDomainMigrationIDDefPtr def); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 553b01b8c0..4d712f0d79 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -523,6 +523,7 @@ virDomainMemoryModelTypeToString; virDomainMemoryRemove; virDomainMemorySourceTypeFromString; virDomainMemorySourceTypeToString; +virDomainMigrationIDDefFree; virDomainMouseModeTypeFromString; virDomainMouseModeTypeToString; virDomainNetAllocateActualDevice; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 953808fcfe..6b09c15f7a 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1879,6 +1879,12 @@ qemuDomainObjPrivateFree(void *data) virObjectUnref(priv->monConfig); g_free(priv->lockState); g_free(priv->origname); + VIR_FREE(priv->migrationPids); + virBitmapFree(priv->pcpumap); + + VIR_FREE(priv->migrationMultiFdPids); + priv->migrationMultiFdPids = NULL; + priv->migrationMultiFdCount = 0; virChrdevFree(priv->devs); diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 1e56e50672..0eff9eab72 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -146,7 +146,9 @@ struct _qemuDomainObjPrivate { unsigned long long preMigrationMemlock; /* Original RLIMIT_MEMLOCK in case it was changed for the current migration job. */ - + char *migrationPids; + char *migrationMultiFdPids; + unsigned int migrationMultiFdCount; virChrdevs *devs; qemuDomainCleanupCallback *cleanupCallbacks; @@ -166,6 +168,7 @@ struct _qemuDomainObjPrivate { /* Bitmaps below hold data from the auto NUMA feature */ virBitmap *autoNodeset; virBitmap *autoCpuset; + virBitmap *pcpumap; bool signalIOError; /* true if the domain condition should be signalled on I/O error */ diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 7ae1cd7051..b13f2e0c24 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3362,6 +3362,7 @@ qemuMigrationDstPrepareFresh(virQEMUDriver *driver, priv = vm->privateData; priv->origname = g_strdup(origname); + VIR_FREE(priv->migrationPids); if (taint_hook) { /* Domain XML has been altered by a hook script. */ diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index b424e1b5d4..62c6df2206 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -1123,6 +1123,9 @@ virCgroupNewThread(virCgroup *domain, case VIR_CGROUP_THREAD_IOTHREAD: name = g_strdup_printf("iothread%d", id); break; + case VIR_CGROUP_THREAD_MIGRATION_THREAD: + name = g_strdup_printf("migthread%d", id); + break; case VIR_CGROUP_THREAD_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, _("unexpected name value %1$d"), nameval); diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h index adf3850b22..c5f6ddd7a6 100644 --- a/src/util/vircgroup.h +++ b/src/util/vircgroup.h @@ -53,6 +53,7 @@ typedef enum { VIR_CGROUP_THREAD_VCPU = 0, VIR_CGROUP_THREAD_EMULATOR, VIR_CGROUP_THREAD_IOTHREAD, + VIR_CGROUP_THREAD_MIGRATION_THREAD, VIR_CGROUP_THREAD_LAST } virCgroupThreadName; -- 2.27.0