[PATCH v2 5/8] migration/migration-pin: support migration pin by virsh command

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Add virsh command 'virsh migrationpin', its usage is like
'virsh migrationpin [vm] [cpulist]'. After using this command, if
migration thread infomation have been got, pin it to given cpumap
immediately, else wait for next migraion operation and pin migration
thread after getting information.

Signed-off-by: zhengchuan<zhengchuan@xxxxxxxxxx>
Signed-off-by: Jiang Jiacheng <jiangjiacheng@xxxxxxxxxx>
---
 tools/virsh-domain.c | 69 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index a4abcb1b03..43ecd651d8 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -13814,6 +13814,69 @@ cmdDomDirtyRateCalc(vshControl *ctl, const vshCmd *cmd)
 }
 
 
+/*
+ * "migrationpin" command
+ */
+static const vshCmdInfo info_migrationpin[] = {
+    {.name = "help",
+     .data = N_("control domain migrationThreads affinity")
+    },
+    {.name = "desc",
+     .data = N_("Pin domain migrationThreads to host physical CPUs.")
+    },
+    {.name = NULL}
+};
+
+static const vshCmdOptDef opts_migrationpin[] = {
+    VIRSH_COMMON_OPT_DOMAIN_FULL(0),
+    {.name = "cpulist",
+     .type = VSH_OT_DATA,
+     .flags = VSH_OFLAG_REQ,
+     .help = N_("host cpu number(s) to set")
+    },
+    {.name = NULL}
+};
+
+static bool
+cmdMigrationPin(vshControl *ctl, const vshCmd *cmd)
+{
+    g_autoptr(virshDomain) dom = NULL;
+    const char *name = NULL;
+    const char *cpulist = NULL;
+    int maxcpu;
+    g_autofree unsigned char *cpumap = NULL;
+    int cpumaplen;
+    virshControl *priv = ctl->privData;
+
+    dom = virshCommandOptDomain(ctl, cmd, NULL);
+    if (!dom)
+        return false;
+
+    if (vshCommandOptStringReq(ctl, cmd, "domain", &name) < 0)
+        return false;
+
+    if (vshCommandOptStringReq(ctl, cmd, "cpulist", &cpulist) < 0)
+        return false;
+
+    maxcpu = virshNodeGetCPUCount(priv->conn);
+    if (maxcpu < 0)
+        return false;
+
+    cpumap = virshParseCPUList(ctl, &cpumaplen, cpulist, maxcpu);
+    if (!cpumap)
+        return false;
+
+    if (virDomainPinMigrationThread(dom, cpumap,
+                                    cpumaplen) != 0)
+        return false;
+
+    vshPrintExtra(ctl, _("Pin domain %s's migration thread "
+                         "to cpulist %s success.\n"), name, cpulist);
+
+    return true;
+}
+
+
 const vshCmdDef domManagementCmds[] = {
     {.name = "attach-device",
      .handler = cmdAttachDevice,
@@ -14477,5 +14540,11 @@ const vshCmdDef domManagementCmds[] = {
      .info = info_dom_fd_associate,
      .flags = 0
     },
+    {.name = "migrationpin",
+     .handler = cmdMigrationPin,
+     .opts = opts_migrationpin,
+     .info = info_migrationpin,
+     .flags = 0
+    },
     {.name = NULL}
 };
-- 
2.33.0





[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux