[pve-devel] 3 numa topology issues

Wolfgang Bumiller w.bumiller at proxmox.com
Tue Jul 26 13:59:42 CEST 2016

On Tue, Jul 26, 2016 at 01:35:50PM +0200, Alexandre DERUMIER wrote:
> Hi Wolfgang,
> I just come back from holiday.

Hope you had a good time :-)

> >>Issue #1: The above code currently does not honor our 'hostnodes' option 
> >>and breaks when trying to use them together. 
> mmm indeed. I think this can be improved. I'll try to check that next week.
> >>Issue #2: We create one node per *virtual* socket, which means enabling 
> >>hugepages with more virtual sockets than physical numa nodes will die 
> >>with the error that the numa node doesn't exist. This should be fixable 
> >>as far as I can tell, as nothing really prevents us from putting them on 
> >>the same node? At least this used to work and I've already asked this 
> >>question at some point. You said the host kernel will try to map them, 
> >>yet it worked without issues before, so I'm still not sure about this. 
> >>Here's the conversation snippet: 
> you can create more virtual numa node than physical, only if you don't define "hostnodes" option.
> (from my point of vue, it's totally useless, as the whole point of numa option is to map virtual node to physical node, to avoid memory access bottleneck)

Useless, yes, which is why I'm wondering whether this should be
supported/warned about/error...

> if hostnodes is defined, you need to have physical numa node available (vm with 2 numa node need host with 2 numa node)
> With hugepage enabled, I have added a restriction to have hostnode defined, because you want to be sure that memory is on same node.
>             # hostnodes
>             my $hostnodelists = $numa->{hostnodes};
>             if (defined($hostnodelists)) {
>                 my $hostnodes;
>                 foreach my $hostnoderange (@$hostnodelists) {
>                     my ($start, $end) = @$hostnoderange;
>                     $hostnodes .= ',' if $hostnodes;
>                     $hostnodes .= $start;
>                     $hostnodes .= "-$end" if defined($end);
>                     $end //= $start;
>                     for (my $i = $start; $i <= $end; ++$i ) {
>                         die "host NUMA node$i doesn't exist\n" if ! -d "/sys/devices/system/node/node$i/";
>                     }
>                 }
>                 # policy
>                 my $policy = $numa->{policy};
>                 die "you need to define a policy for hostnode $hostnodes\n" if !$policy;
>                 $mem_object .= ",host-nodes=$hostnodes,policy=$policy";
>             } else {
>                 die "numa hostnodes need to be defined to use hugepages" if $conf->{hugepages};
>             }
> >>Issue #3: Actually just an extension to #2: we currently cannot enable 
> >>NUMA at all (even without hugepages) when there are more virtual sockets 
> >>than physical numa nodes, and this used to work. The big question is 
> >>now: does this even make sense? Or should we tell users not to do this? 
> That's strange, it should work if you don't defined hugepages and hostnodes option(in numaX)

Actually this one was my own faulty configuration, sorry.

More information about the pve-devel mailing list