[libvirt] [PATCH v3 4/4] virsh: add parameters --live, --config and --current to cmd schedinfo

Eric Blake eblake at redhat.com
Tue May 17 16:53:11 UTC 2011


On 05/17/2011 12:20 AM, Hu Tao wrote:
> This enables user to modify cpu.shares even when domain is inactive.
> ---
>  tools/virsh.c   |   25 ++++++++++++++++++++++++-
>  tools/virsh.pod |    6 +++++-
>  2 files changed, 29 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/virsh.c b/tools/virsh.c
> index a38750f..0e0f8cf 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -1596,6 +1596,9 @@ static const vshCmdOptDef opts_schedinfo[] = {
>      {"set", VSH_OT_STRING, VSH_OFLAG_NONE, N_("parameter=value")},
>      {"weight", VSH_OT_INT, VSH_OFLAG_NONE, N_("weight for XEN_CREDIT")},
>      {"cap", VSH_OT_INT, VSH_OFLAG_NONE, N_("cap for XEN_CREDIT")},
> +    {"current", VSH_OT_BOOL, 0, N_("get current scheduler info")},
> +    {"config", VSH_OT_BOOL, 0, N_("get value to be used on next boot")},
> +    {"live", VSH_OT_BOOL, 0, N_("get value from running domain")},

Hmm, this says get, but right now it only affects set.  We really need
to add virDomainGetSchedulerParametersFlags.

>      {NULL, 0, 0, NULL}
>  };
>  
> @@ -1703,6 +1706,23 @@ cmdSchedinfo(vshControl *ctl, const vshCmd *cmd)
>      int update = 0;
>      int i, ret;
>      bool ret_val = false;
> +    unsigned int flags = 0;
> +    int current = vshCommandOptBool(cmd, "current");
> +    int config = vshCommandOptBool(cmd, "config");
> +    int live = vshCommandOptBool(cmd, "live");
> +
> +    if (current) {
> +        if (live || config) {
> +            vshError(ctl, "%s", _("--current must be specified exclusively"));
> +            return false;
> +        }
> +        flags = VIR_DOMAIN_SCHEDPARAM_CURRENT;

But this is 0, ...

> +    } else {
> +        if (config)
> +            flags |= VIR_DOMAIN_SCHEDPARAM_CONFIG;
> +        if (live)
> +            flags |= VIR_DOMAIN_SCHEDPARAM_LIVE;
> +    }
>  
>      if (!vshConnectionUsability(ctl, ctl->conn))
>          return false;
> @@ -1741,7 +1761,10 @@ cmdSchedinfo(vshControl *ctl, const vshCmd *cmd)
>  
>          /* Update parameters & refresh data */
>          if (update) {
> -            ret = virDomainSetSchedulerParameters(dom, params, nparams);
> +            if (flags)
> +                ret = virDomainSetSchedulerParametersFlags(dom, params, nparams, flags);

so this needs to be flags || current

> +            else
> +                ret = virDomainSetSchedulerParameters(dom, params, nparams);
>              if (ret == -1)
>                  goto cleanup;
>  
> diff --git a/tools/virsh.pod b/tools/virsh.pod
> index d11a0e3..98e8580 100644
> --- a/tools/virsh.pod
> +++ b/tools/virsh.pod
> @@ -570,7 +570,7 @@ This is roughly equivalent to doing a hibernate on a running computer,
>  with all the same limitations.  Open network connections may be
>  severed upon restore, as TCP timeouts may have expired.
>  
> -=item B<schedinfo> optional I<--set> B<parameter=value> I<domain-id>
> +=item B<schedinfo> optional I<--set> B<parameter=value> I<domain-id> I<--persistent>

Not how we spelled it in virsh.c...

>  
>  =item B<schedinfo> optional I<--weight> B<number> optional I<--cap> B<number> I<domain-id>
>  
> @@ -582,6 +582,10 @@ Xen (credit scheduler): weight, cap
>  
>  ESX (allocation scheduler): reservation, limit, shares
>  
> +If I<--live> is specified, set scheduler information of a running guest.
> +If I<--config> is specified, affect the next boot of a persistent guest.
> +If I<--current> is specified, affect the current guest state.
> +
>  B<Note>: The cpu_shares parameter has a valid value range of 0-262144; Negative
>  values are wrapped to positive, and larger values are capped at the maximum.
>  Therefore, -1 is a useful shorthand for 262144.

ACK with this squashed in, so I'm pushing:

diff --git i/tools/virsh.c w/tools/virsh.c
index 15d9c7a..77cadcb 100644
--- i/tools/virsh.c
+++ w/tools/virsh.c
@@ -1596,9 +1596,9 @@ static const vshCmdOptDef opts_schedinfo[] = {
     {"set", VSH_OT_STRING, VSH_OFLAG_NONE, N_("parameter=value")},
     {"weight", VSH_OT_INT, VSH_OFLAG_NONE, N_("weight for XEN_CREDIT")},
     {"cap", VSH_OT_INT, VSH_OFLAG_NONE, N_("cap for XEN_CREDIT")},
-    {"current", VSH_OT_BOOL, 0, N_("get current scheduler info")},
-    {"config", VSH_OT_BOOL, 0, N_("get value to be used on next boot")},
-    {"live", VSH_OT_BOOL, 0, N_("get value from running domain")},
+    {"current", VSH_OT_BOOL, 0, N_("get/set current scheduler info")},
+    {"config", VSH_OT_BOOL, 0, N_("get/set value to be used on next
boot")},
+    {"live", VSH_OT_BOOL, 0, N_("get/set value from running domain")},
     {NULL, 0, 0, NULL}
 };

@@ -1732,7 +1732,7 @@ cmdSchedinfo(vshControl *ctl, const vshCmd *cmd)

     /* Print SchedulerType */
     schedulertype = virDomainGetSchedulerType(dom, &nparams);
-    if (schedulertype!= NULL){
+    if (schedulertype != NULL){
         vshPrint(ctl, "%-15s: %s\n", _("Scheduler"),
              schedulertype);
         VIR_FREE(schedulertype);
@@ -1761,8 +1761,9 @@ cmdSchedinfo(vshControl *ctl, const vshCmd *cmd)

         /* Update parameters & refresh data */
         if (update) {
-            if (flags)
-                ret = virDomainSetSchedulerParametersFlags(dom, params,
nparams, flags);
+            if (flags || current)
+                ret = virDomainSetSchedulerParametersFlags(dom, params,
+                                                           nparams, flags);
             else
                 ret = virDomainSetSchedulerParameters(dom, params,
nparams);
             if (ret == -1)
diff --git i/tools/virsh.pod w/tools/virsh.pod
index 98e8580..ef01f41 100644
--- i/tools/virsh.pod
+++ w/tools/virsh.pod
@@ -570,11 +570,14 @@ This is roughly equivalent to doing a hibernate on
a running computer,
 with all the same limitations.  Open network connections may be
 severed upon restore, as TCP timeouts may have expired.

-=item B<schedinfo> optional I<--set> B<parameter=value> I<domain-id>
I<--persistent>
+=item B<schedinfo> optional I<--set> B<parameter=value> I<domain-id>
I<--config>
+I<--live> I<--current>

-=item B<schedinfo> optional I<--weight> B<number> optional I<--cap>
B<number> I<domain-id>
+=item B<schedinfo> optional I<--weight> B<number> optional I<--cap>
B<number>
+I<domain-id>

-Allows you to show (and set) the domain scheduler parameters. The
parameters available for each hypervisor are:
+Allows you to show (and set) the domain scheduler parameters. The
parameters
+available for each hypervisor are:

 LXC, QEMU/KVM (posix scheduler): cpu_shares

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20110517/1bc6bdb1/attachment-0001.sig>


More information about the libvir-list mailing list