Re: [PATCH v6 3/5] migration/dirtyrate: Introduce domdirtyrate-calc virsh api
On 2/26/21 9:35 AM, Hao Wang wrote: Introduce domdirtyrate-calc virsh api to start calculating domain's memory dirty rate: # virsh domdirtyrate-calc [--seconds ] Signed-off-by: Hao Wang --- docs/manpages/virsh.rst | 17 +++ tools/virsh-domain.c| 63 + 2 files changed, 80 insertions(+) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index 8a4328faa0..417ea444f4 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 [--seconds ] + +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 infomation is available by calling +'domstats --dirtyrate'. + + domdisplay -- diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index df33467646..ccb5d61a25 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -14412,6 +14412,63 @@ 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 infomation 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; +int rc; +bool ret = false; + +if (!(dom = virshCommandOptDomain(ctl, cmd, NULL))) +return false; + +rc = vshCommandOptInt(ctl, cmd, "seconds", ); +if (rc < 0) +goto cleanup; + +/* if no inputted seconds, default to 1s */ +if (!rc) +seconds = 1; The vshCommandOptInt() (and others too for that matter) are designed so that if --argument is not present, then the destination variable is not touched. So this can be rewritten as: int seconds = 1; /* the default value is 1 */ rc = vshCommandOptInt(ctl, cmd, "seconds", ); if (rc < 0) goto cleanup; and since @rc is not used anywhere else it's not needed and thus can be dropped. + +if (virDomainStartDirtyRateCalc(dom, seconds, 0) < 0) +goto cleanup; + +vshPrint(ctl, _("Start to calculate domain's memory dirty rate successfully.\n")); This could be vshPrintExtra(). That's what we tend to use for this affirmation prints. 'virsh -q' is quiet and can be used from a script, 'virsh' run by users gives them good feeling of something happening. Michal
[PATCH v6 3/5] migration/dirtyrate: Introduce domdirtyrate-calc virsh api
Introduce domdirtyrate-calc virsh api to start calculating domain's memory dirty rate: # virsh domdirtyrate-calc [--seconds ] Signed-off-by: Hao Wang --- docs/manpages/virsh.rst | 17 +++ tools/virsh-domain.c| 63 + 2 files changed, 80 insertions(+) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index 8a4328faa0..417ea444f4 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 [--seconds ] + +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 infomation is available by calling +'domstats --dirtyrate'. + + domdisplay -- diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index df33467646..ccb5d61a25 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -14412,6 +14412,63 @@ 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 infomation 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; +int rc; +bool ret = false; + +if (!(dom = virshCommandOptDomain(ctl, cmd, NULL))) +return false; + +rc = vshCommandOptInt(ctl, cmd, "seconds", ); +if (rc < 0) +goto cleanup; + +/* if no inputted seconds, default to 1s */ +if (!rc) +seconds = 1; + +if (virDomainStartDirtyRateCalc(dom, seconds, 0) < 0) +goto cleanup; + +vshPrint(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, @@ -15051,5 +15108,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