[PATCH v6 3/5] migration/dirtyrate: Introduce domdirtyrate-calc virsh api

Michal Privoznik mprivozn at redhat.com
Wed Mar 3 11:31:58 UTC 2021


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 <domain> [--seconds <sec>]
> 
> Signed-off-by: Hao Wang <wanghao232 at huawei.com>
> ---
>   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 <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 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", &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", &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




More information about the libvir-list mailing list