Sql-server – SQL Server detected 2 sockets with 4 cores per socket but only one NUMA node

configurationnumaperformancesql servervmware

We have a SQL Server 2012 SP 2 CU 8 instance in a VMWare host. The operating system is Windows Server 2012 R2.

Windows Task Manager says that we have two sockets and 8 virtual cores. This number corresponds with the actual hardware beneath the guest.

Task Manager socket and core count

In Task Manager I also can't change the view to NUMA nodes.

Still no NUMA nodes

In SQL Server still only one NUMA node to see
SQL Server NUMA config

Also this snippet from Glen Berrys diagnostics queries gives me this information

EXEC sys.xp_readerrorlog 0, 1, N'detected', N'socket';

SQL Server detected 2 sockets with 4 cores per socket and 4 logical
processors per socket, 8 total logical processors; using 8 logical
processors based on SQL Server licensing. This is an informational
message; no user action is required.

From all this information i can suspect that we are running on only one NUMA node but across two sockets.

My Questions:

  1. Is it right that we are running on only one NUMA node?
  2. Can this hurt performance even when everything is located on one NUMA node?
  3. What component exactly dictates the NUMA boundaries? E.g. if I have a
    two socket mainboard with two Intel E5 processors does the mainboard
    dictate how many NUMA nodes I have or the processor.

I think there is a lot of misinformation out there about NUMA nodes. If someone can answer my question or point to a useful resource that explains this concept in detail that would be really appreciated.

Best Answer

The following two articles make it clear that VMware will present a virtual NUMA configuration to the guest OS that is optimal. Accordingly, the number of sockets that are configured on the VM are more or less irrelevant as to the number of NUMA nodes. If the actual hardware has at least 8 cores in a NUMA node, then VMware is only going to present one NUMA node to a guest that has 8 CPUs, regardless of the VM's socket count.

Does corespersocket Affect Performance?

Virtual Machine vCPU and vNUMA Rightsizing – Rules of Thumb

Determining NUMA node boundaries for modern CPUs contains two helpful quotes that show that, even on hardware, number of sockets is not always equal to number of NUMA nodes:

When we originally did this analysis, the common multi-core processors were dual core or at most quad core. On these chips, the hardware manufacturers divided the NUMA boundaries into cores, rather than sockets. But it appears that that configuration is not the same for the larger multi-core (6, 12, etc.) chips.

and

In short, don’t assume that your NUMA boundaries are divided into cores – it very much depends on your specific CPU architecture.

I also ran across an TechNet article,Soft-NUMA (SQL Server), stating that each socket is usually represented by one NUMA node, but it doesn't explain when it wouldn't be.

You also might check the BIOS of the hardware to ensure that NUMA is enabled. I would be surprised if it was disabled, but I've learned through my career to never assume that someone didn't do something completely irrational.

Answers to your questions:

  1. Given the evidence at hand, yes since both SQL Server and Windows are telling you that there is only one NUMA node, and we have some documentation from sources at VMware that it will present the optimal vNUMA configuration to the guest, which will be one NUMA node as long as the guest is configured with less than or equal to the amount of cores in the hardware sockets, and the number of sockets presented to the guest is irrelevant.
  2. If the system architecture is telling the OS that there is one NUMA node, then there is one NUMA node and that is best because all CPUs are using the same memory. If it were actually two NUMA nodes but SQL Server only sees one, then yes, it would impact performance for anything that runs parallel.
  3. The CPU architecture, which in turn dictates the mainboard architecture. On VMs, the NUMA configuration presented to the guest is determined by virtualization host (VMware, Hyper-V, etc.).