Add new flags for setting memory parameters

The new flags allow to pick current state, config or the live
parameter, with current being the existing API default (0).
This also hooks this to --config, --live, --current parameters for
the memtune virsh command

* include/libvirt/libvirt.h.in: defines the new flags
* tools/virsh.c: adds support at virsh level
* tools/virsh.pod: updates virsh documentation
This commit is contained in:
Hu Tao 2011-05-27 15:35:11 +08:00 committed by Daniel Veillard
parent 9c26d6f09e
commit 118eac373d
3 changed files with 37 additions and 3 deletions

View File

@ -883,6 +883,13 @@ typedef enum {
VIR_DOMAIN_MEMORY_PARAM_BOOLEAN = VIR_TYPED_PARAM_BOOLEAN,
} virMemoryParameterType;
/* flags for setting memory parameters */
typedef enum {
VIR_DOMAIN_MEMORY_PARAM_CURRENT = 0, /* affect current domain state */
VIR_DOMAIN_MEMORY_PARAM_LIVE = (1 << 0), /* affect active domain */
VIR_DOMAIN_MEMORY_PARAM_CONFIG = (1 << 1) /* affect next boot */
} virMemoryParamFlags;
/**
* VIR_DOMAIN_MEMORY_FIELD_LENGTH:
*

View File

@ -3307,6 +3307,9 @@ static const vshCmdOptDef opts_memtune[] = {
N_("Max memory plus swap in kilobytes")},
{"min-guarantee", VSH_OT_INT, VSH_OFLAG_NONE,
N_("Min guaranteed memory in kilobytes")},
{"config", VSH_OT_BOOL, 0, N_("affect next boot")},
{"live", VSH_OT_BOOL, 0, N_("affect running domain")},
{"current", VSH_OT_BOOL, 0, N_("affect current domain")},
{NULL, 0, 0, NULL}
};
@ -3320,6 +3323,23 @@ cmdMemtune(vshControl * ctl, const vshCmd * cmd)
unsigned int i = 0;
virMemoryParameterPtr params = NULL, temp = NULL;
bool ret = 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_MEMORY_PARAM_CURRENT;
} else {
if (config)
flags |= VIR_DOMAIN_MEMORY_PARAM_CONFIG;
if (live)
flags |= VIR_DOMAIN_MEMORY_PARAM_LIVE;
}
if (!vshConnectionUsability(ctl, ctl->conn))
return false;
@ -3350,7 +3370,7 @@ cmdMemtune(vshControl * ctl, const vshCmd * cmd)
if (nparams == 0) {
/* get the number of memory parameters */
if (virDomainGetMemoryParameters(dom, NULL, &nparams, 0) != 0) {
if (virDomainGetMemoryParameters(dom, NULL, &nparams, flags) != 0) {
vshError(ctl, "%s",
_("Unable to get number of memory parameters"));
goto cleanup;
@ -3364,7 +3384,7 @@ cmdMemtune(vshControl * ctl, const vshCmd * cmd)
/* now go get all the memory parameters */
params = vshCalloc(ctl, nparams, sizeof(*params));
if (virDomainGetMemoryParameters(dom, params, &nparams, 0) != 0) {
if (virDomainGetMemoryParameters(dom, params, &nparams, flags) != 0) {
vshError(ctl, "%s", _("Unable to get memory parameters"));
goto cleanup;
}
@ -3444,7 +3464,7 @@ cmdMemtune(vshControl * ctl, const vshCmd * cmd)
if (temp->value.ul == -1)
temp->value.ul = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED;
}
if (virDomainSetMemoryParameters(dom, params, nparams, 0) != 0)
if (virDomainSetMemoryParameters(dom, params, nparams, flags) != 0)
vshError(ctl, "%s", _("Unable to change memory parameters"));
else
ret = true;

View File

@ -644,6 +644,13 @@ flags, the current settings are displayed; with a flag, the
appropriate limit is adjusted if supported by the hypervisor. LXC and
QEMU/KVM support I<--hard-limit>, I<--soft-limit>, and I<--swap-hard-limit>.
If I<--live> is specified, affect 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.
Both I<--live> and I<--current> flags may be given, but I<--current> is
exclusive. If no flag is specified, behavior is different depending
on hypervisor.
For QEMU/KVM, the parameters are applied to the QEMU process as a whole.
Thus, when counting them, one needs to add up guest RAM, guest video RAM, and
some memory overhead of QEMU itself. The last piece is hard to determine so