Introduce domdirtyrate-calc virsh api to start calculating domain's memory dirty rate: # virsh domdirtyrate-calc <domain> [--seconds <sec>] Signed-off-by: Hao Wang <wanghao232@xxxxxxxxxx> --- docs/manpages/virsh.rst | 17 ++++++++++++ tools/virsh-domain.c | 58 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index 9ff31a0160..367b4bddeb 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -1704,6 +1704,23 @@ states other than "ok" or "error" the command also prints number of seconds elapsed since the control interface entered its current state. +domdirtyrate-calc +----------------- + +**Syntax:** + +:: + + domdirtyrate-calc <domain> [--seconds <sec>] + +Calculate an active domain's memory dirty rate which may be expected by +user in order to decide whether it's proper to be migrated out or not. +The ``seconds`` parameter can be used to calculate dirty rate in a +specific time which allows 60s at most now and would be default to 1s +if missing. The calculated dirty rate information is available by calling +'domstats --dirtyrate'. + + domdisplay ---------- diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index f8f36ce361..7db88f700a 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -14402,6 +14402,58 @@ cmdSetUserSSHKeys(vshControl *ctl, const vshCmd *cmd) } +/* + * "domdirtyrate" command + */ +static const vshCmdInfo info_domdirtyrate_calc[] = { + {.name = "help", + .data = N_("Calculate a vm's memory dirty rate") + }, + {.name = "desc", + .data = N_("Calculate memory dirty rate of a domain in order to " + "decide whether it's proper to be migrated out or not.\n" + "The calculated dirty rate information is available by " + "calling 'domstats --dirtyrate'.") + }, + {.name = NULL} +}; + +static const vshCmdOptDef opts_domdirtyrate_calc[] = { + VIRSH_COMMON_OPT_DOMAIN_FULL(0), + {.name = "seconds", + .type = VSH_OT_INT, + .help = N_("calculate memory dirty rate within specified seconds, " + "the supported value range from 1 to 60, default to 1.") + }, + {.name = NULL} +}; + +static bool +cmdDomDirtyRateCalc(vshControl *ctl, const vshCmd *cmd) +{ + virDomainPtr dom = NULL; + int seconds = 1; /* the default value is 1 */ + bool ret = false; + + if (!(dom = virshCommandOptDomain(ctl, cmd, NULL))) + return false; + + if (vshCommandOptInt(ctl, cmd, "seconds", &seconds) < 0) + goto cleanup; + + if (virDomainStartDirtyRateCalc(dom, seconds, 0) < 0) + goto cleanup; + + vshPrintExtra(ctl, _("Start to calculate domain's memory " + "dirty rate successfully.\n")); + ret = true; + + cleanup: + virshDomainFree(dom); + return ret; +} + + const vshCmdDef domManagementCmds[] = { {.name = "attach-device", .handler = cmdAttachDevice, @@ -15041,5 +15093,11 @@ const vshCmdDef domManagementCmds[] = { .info = info_guestinfo, .flags = 0 }, + {.name = "domdirtyrate-calc", + .handler = cmdDomDirtyRateCalc, + .opts = opts_domdirtyrate_calc, + .info = info_domdirtyrate_calc, + .flags = 0 + }, {.name = NULL} }; -- 2.23.0