[libvirt] [PATCH 1/7] qemu: Forbid seting maximum memory size with the API with NUMA enabled
John Ferlan
jferlan at redhat.com
Fri Feb 20 12:37:03 UTC 2015
$sub
s/seting/setting
On 02/18/2015 09:16 AM, Peter Krempa wrote:
> NUMA enabled guest configuration explicitly specifies memory sizes for
> individual nodes. Allowing the virDomainSetMemoryFlags API (and friends)
> to change the total doesn't make sense as the individual node configs
> are not updated in that case.
>
> Forbid use of the API in case NUMA is specified.
> ---
> src/qemu/qemu_driver.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
Peeking forward to the next patch it seems src/lxc/lxc_driver.c has the
same flags & VIR_DOMAIN_MEM_MAXIMUM, then flags & VIR_DOMAIN_AFFECT_CONFIG.
So if the theory is lxc copied qemu, then should this also be done for
lxc? Especially since you're altering the else portion for both.
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 2b0dac7..e2abbe0 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -2307,6 +2307,16 @@ static int qemuDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem,
> if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
> /* Help clang 2.8 decipher the logic flow. */
> sa_assert(persistentDef);
> +
> + /* resizing memory with NUMA nodes specified doesn't work as there
> + * is no way to decrease the individual node sizes along */
Looks like you didn't finish your thoughts with the comment... 'along ?'
Seems reasonable, but is there a downside? I don't have the
relationship between the balloon driver and numa currently paged in ;-)
It also seems that something like this would be documented - that is -
in the API and perhaps virsh.pod that changing maxmem for certain
hypervisors for domains using numa cannot be done (instead use...).
John
> + if (virDomainNumaGetNodeCount(persistentDef->numa) > 0) {
> + virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> + _("maximum memory size of a domain with NUMA "
> + "nodes cannot be modified with this API"));
> + goto endjob;
> + }
> +
> persistentDef->mem.max_balloon = newmem;
> if (persistentDef->mem.cur_balloon > newmem)
> persistentDef->mem.cur_balloon = newmem;
>
More information about the libvir-list
mailing list