From: zhengchuan <zhengchuan(a)huawei.com>
Secondly, we start to pin multifd pid by given cpumap.
Signed-off-by:zhengchuan<zhengchuan@huawei.com>
---
src/qemu/qemu_driver.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 92049c5bcd..d4597489d5 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -20725,6 +20725,8 @@ qemuDomainPinMigrationThread(virDomainPtr dom,
qemuDomainObjPrivate *priv = NULL;
int migration_id = 0;
virDomainMigrationIDDef *migration = NULL;
+ char **multiFdPids = NULL;
+ unsigned int multiFdIndex = 0;
cfg = virQEMUDriverGetConfig(driver);
@@ -20781,6 +20783,23 @@ qemuDomainPinMigrationThread(virDomainPtr dom,
}
}
+ /*
+ * set migration multiFd thread affinity
+ */
+ if (priv->migrationMultiFdPids != NULL && pcpumap) {
+ multiFdPids = g_strsplit(priv->migrationMultiFdPids, "/",
+ priv->migrationMultiFdCount);
+ for (multiFdIndex = 0; multiFdIndex < (priv->migrationMultiFdCount);
multiFdIndex++) {
+ if (virStrToLong_i(multiFdPids[multiFdIndex], NULL, 10,
&(migration->thread_id)) != 0) {
+ VIR_ERROR(_("migrationMultiFdPids trans failure, migrationMultiFdPid
= %s"),
+ multiFdPids[multiFdIndex]);
+ goto endjob;
+ }
+ if (virProcessSetAffinity(migration->thread_id, pcpumap, false) < 0)
+ goto endjob;
+ }
+ }
+
ret = 0;
goto endjob;
@@ -20797,6 +20816,7 @@ qemuDomainPinMigrationThread(virDomainPtr dom,
virDomainObjEndAPI(&vm);
virObjectUnref(caps);
virObjectUnref(cfg);
+ g_strfreev(multiFdPids);
return ret;
}
--
2.33.0