Hyper-V: VM NUMA Spanning (Remote Memory)
Non-Uniform Memory Access (NUMA) is a computer system architecture that is used with multiprocessor designs in which some regions of memory have greater access latencies. This is due to how the system memory and processors are interconnected. Some memory regions are connected directly to one or more processors, with all processors connected to each other through various types of interconnection fabric. For large multiprocessor systems, this arrangement results in less contention for memory and increased system performance.
A NUMA architecture divides memory and processors into groups, called NUMA nodes. From the perspective of any single processor in the system, memory that is in the same NUMA node as that processor is referred to as local, and memory that is contained in another NUMA node is referred to as remote. Processors can access local memory faster.
Most modern operating systems and many high-performance applications that typically scale to utilize many processors and large amounts of memory, such as Microsoft SQL Server, include optimizations that recognize and adapt to a computer’s NUMA topology. To avoid remote access penalties, a NUMA-aware application attempts to allocate storage for data and schedule processor threads to access that data in the same NUMA node. These optimizations minimize memory access latencies and reduce memory interconnect traffic.
Display NUMA Spanning / Remote Memory
$vm = "<VM-Name>" $RemoteMemory = (get-counter -Counter "\Hyper-V VM Vid Partition($vm)\Remote Physical Pages").CounterSamples $LocalMemory = (get-counter -Counter "\Hyper-V VM Vid Partition($vm)\Physical Pages Allocated").CounterSamples $RemoteMemory, $LocalMemory
Display VM NUMA Configuration
Get-VM <VM-Name> | ft Name, NumaAligned, ProcessorCount, NumaNodesCount, NumaSocketCount