You are running a 5.5 virtual center with a virtual machine specs: windows 2012 R2, vm hardware 8, 6 vpu’s (6 sockets/1 core per socket).
The physical ESXi host has 4 processors with 6 cores each.
I want to give the vm 8 vcpu’s without causing memory latency due to cross socket traffic. I want to set the Virtual NUMA configuration such that it replicates the Physical NUMA architecture so Windows 2012 aligns it’s memory to the 2 physical NUMA nodes.
Since this increase to 8 will need use 2 physical sockets, I wanted to know if cupid.coresPerSocket & numa.vcpu.maxPerVirtualNode need to be added to the VM?
I read through https://communities.vmware.com/blogs/VirtualPharaohs/2014/09/06/many-cores-per-socket-or-single-core-socket-mystery “By default, vNUMA is enabled only for virtual machines with more than eight vCPUs” – I suspect the reason for this is most modern CPU’s have 8 physical cores per socket.
NOTE – If you built the VM with 10 or more vCPU’s, this post does not apply.
This means the vNUMA will only be exposed if the “wide” VM is configured for 8 or more vCPUs
numa.autosize – if you want vNUMA to be updated with each power cycle, then set this to TRUE. We want FALSE since we are setting this by hand.
numa.autosize.once – TRUE willl set vNUMA only once, but will change when the VM is vmotioned. We want FALSE
numa.vcpu.maxPerVirtualNode – if this is set, it will override the “autosize” setting. Since I have 6 cores per physical socket, it could affect whether a VM is forced to use remote memory, which would affect performance. DO NOT ADD THIS LINE
numa.vcpu.maxPerVirtualNode is only used if you have an odd #. Ex. 10 divided by 2 = 5
cpuid.coresPerSocket – Only used if even #’s are the result.
8 vcpu /2 =4
12 vcpu / 2 = 6
Here are the four lines I added to the vmx file. I then had to un-check hot-plug memory and cpu since that is only supported in VC & ESXi 6.0
numa.autosize = FALSE
numa.autosize.once = FALSE
numa.vcpu.min = 8
cpuid.coresPerSocket = 4
If this VM needed to go from 8 vcpus to 10, cpuid.coresPerSocket = 5
Run coreinfo.exe -n -s to see how windows see’s sockets 0 and 1 (the physical NUMA structure). There will be 2 NUMA Node Maps vs 1 line.
If you have vCOps/vROps, monitor the VM’s CPU Ready %, CPU I/O Wait and Memory Contention %
If you have an odd # (10/2=5) you will have to use the numa.vcpu.maxPerVirtualNode and not cpuid.cores.PerSocket.