[libvirt] [PATCH v2] numa: warn if numa 'mem' option or default RAM splitting between nodes is used.
Daniel P. Berrangé
berrange at redhat.com
Wed Mar 6 18:16:08 UTC 2019
On Wed, Mar 06, 2019 at 06:33:25PM +0100, Igor Mammedov wrote:
> Amend -numa option docs and print warnings if 'mem' option or default RAM
> splitting between nodes is used. It's intended to discourage users from using
> configuration that allows only to fake NUMA on guest side while leading
> to reduced performance of the guest due to inability to properly configure
> VM's RAM on the host.
>
> In NUMA case, it's recommended to always explicitly configure guest RAM
> using -numa node,memdev={backend-id} option.
>
> Signed-off-by: Igor Mammedov <imammedo at redhat.com>
> ---
> numa.c | 5 +++++
> qemu-options.hx | 12 ++++++++----
> 2 files changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/numa.c b/numa.c
> index 3875e1e..42838f9 100644
> --- a/numa.c
> +++ b/numa.c
> @@ -121,6 +121,8 @@ static void parse_numa_node(MachineState *ms, NumaNodeOptions *node,
>
> if (node->has_mem) {
> numa_info[nodenr].node_mem = node->mem;
> + warn_report("Parameter -numa node,mem is obsolete,"
> + " use -numa node,memdev instead");
My comments from v1 still apply. We must not do this as long as
libvirt has no choice but to continue using this feature.
> }
> if (node->has_memdev) {
> Object *o;
> @@ -407,6 +409,9 @@ void numa_complete_configuration(MachineState *ms)
> if (i == nb_numa_nodes) {
> assert(mc->numa_auto_assign_ram);
> mc->numa_auto_assign_ram(mc, numa_info, nb_numa_nodes, ram_size);
> + warn_report("Default splitting of RAM between nodes is obsolete,"
> + " Use '-numa node,memdev' to explicitly define RAM"
> + " allocation per node");
> }
>
> numa_total = 0;
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 1cf9aac..61035cb 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -206,10 +206,14 @@ For example:
> -numa cpu,node-id=0,socket-id=0 -numa cpu,node-id=1,socket-id=1
> @end example
>
> - at samp{mem} assigns a given RAM amount to a node. @samp{memdev}
> -assigns RAM from a given memory backend device to a node. If
> - at samp{mem} and @samp{memdev} are omitted in all nodes, RAM is
> -split equally between them.
> + at samp{memdev} assigns RAM from a given memory backend device to a node.
> +
> +Legacy options/behaviour: @samp{mem} assigns a given RAM amount to a node.
> +If @samp{mem} and @samp{memdev} are omitted in all nodes, RAM is split equally
> +between them. Option @samp{mem} and default RAM splitting are obsolete as they
> +do not provide means to manage RAM on the host side and only allow QEMU to fake
> +NUMA support which in practice could degrade VM performance.
> +It's advised to always explicitly configure NUMA RAM by using the @samp{memdev} option.
>
> @samp{mem} and @samp{memdev} are mutually exclusive. Furthermore,
> if one node uses @samp{memdev}, all of them have to use it.
> --
> 2.7.4
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the libvir-list
mailing list