From 42af244347e8da490fd52ed92cc9a4fbfc1f3c7d Mon Sep 17 00:00:00 2001 From: Hu Tao Date: Tue, 17 May 2011 14:20:03 +0800 Subject: [PATCH] virsh: add parameters --live, --config and --current to cmd schedinfo This enables user to modify cpu.shares even when domain is inactive. --- tools/virsh.c | 28 ++++++++++++++++++++++++++-- tools/virsh.pod | 13 ++++++++++--- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/tools/virsh.c b/tools/virsh.c index 2627cf47c3..77cadcb815 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/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} }; @@ -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; + } else { + if (config) + flags |= VIR_DOMAIN_SCHEDPARAM_CONFIG; + if (live) + flags |= VIR_DOMAIN_SCHEDPARAM_LIVE; + } if (!vshConnectionUsability(ctl, ctl->conn)) return false; @@ -1712,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); @@ -1741,7 +1761,11 @@ cmdSchedinfo(vshControl *ctl, const vshCmd *cmd) /* Update parameters & refresh data */ if (update) { - ret = virDomainSetSchedulerParameters(dom, params, nparams); + if (flags || current) + ret = virDomainSetSchedulerParametersFlags(dom, params, + nparams, flags); + else + ret = virDomainSetSchedulerParameters(dom, params, nparams); if (ret == -1) goto cleanup; diff --git a/tools/virsh.pod b/tools/virsh.pod index d11a0e3cf9..ef01f41c94 100644 --- a/tools/virsh.pod +++ b/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 optional I<--set> B I +=item B optional I<--set> B I I<--config> +I<--live> I<--current> -=item B optional I<--weight> B optional I<--cap> B I +=item B optional I<--weight> B optional I<--cap> B +I -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 @@ -582,6 +585,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: 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. -- GitLab