NUMA Engine Properties and Configuration

Non-uniform memory access (NUMA) can increase processor speed without increasing the load on the processor bus. In a NUMA system, CPUs are arranged in smaller systems called nodes. A node has its own processors and memory and is connected to the larger system. The system attempts to improve performance by scheduling processes on processors that are in the same node as the memory being used.

Requirements

NUMA is only supported on Windows Engines.

Windows 7 and Windows 2008 R2 require the following hotfix: http://support.microsoft.com/kb/2417038

32-bit Engine installations in 64-bit Windows are only able to address processors #0 through #31 in any given processor group.

Properties

The following Engine properties are related to NUMA support:

HIGHEST_NUMA_NODE – The highest NUMA node available in the system. 0 is reported in non-NUMA systems.
PROCESS_SCHEDULING_POLICY – The process scheduling policy in effect. The possible values are described below.

Configuration

To change the process scheduling policy to use NUMA:

1. In the TIBCO GridServer® Administration Tool, go to Grid Components > Engines> Engine Configurations and select the appropriate Engine configuration.
2. Change the Process Scheduling Policy to the desired value, which is described below.

There are three possible process scheduling policy settings in the Engine Configuration:

Native (the default) uses the process scheduling as assigned by Windows.
Balanced makes the best effort to balance the number of Engine processes and processors. The Engine process is allowed to run in all processors in a given processor group. Engines can run in processors from different NUMA nodes.
NUMA makes the best effort to assign Engine processes to the ideal NUMA node. This option is implicitly 'balanced'. An Engine process is only allowed to run in processors in the ideal NUMA node.

Balanced Versus Native Policies

Windows assigns processes to processor groups at creation time in a round-robin fashion. This might be undesirable when you have an unbalanced number of logical processors in processor groups. Processor groups with fewer logical processors might end up with the same number of Engines as processor groups with more logical processors.

The balanced policy attempts to assign Engines proportionally to the number of logical processors in the processor groups. The processor group with more logical processors is assigned more Engines.

The native policy is preferred when the number of logical processors in processor groups is balanced.

Balanced and native policies behave identically in machines with at most one processor group or no support for processor groups.