[PATCH 09/12] migration/multifd-pin: pin multifd pid by given cpumap

Jiang Jiacheng jiangjiacheng at huawei.com
Tue Jan 3 13:08:28 UTC 2023


From: zhengchuan <zhengchuan at huawei.com>

Secondly, we start to pin multifd pid by given cpumap.

Signed-off-by:zhengchuan<zhengchuan at 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



More information about the libvir-list mailing list