AIX memory affinity support

IBM® POWER® processor-based platform SMP hardware systems contain modules that are capable of supporting single, dual, or multiple processor chips depending on the particular system. Each of these modules contains multiple processors and the system memory is attached to these modules. While any processor can access all of the memory in the system, a processor has faster access, and higher bandwidth when addressing memory that is attached to its own module rather than memory attached to the other modules in the system.

The AIX® operating system provides memory affinity by attempting to allocate memory for a process from the module that contains the processor that caused the page fault. When memory affinity is enabled, each module has its own virtual memory manager resource pool, vmpool, that contains one or more memory pools. Each memory pool has its own page replacement daemon, lrud. The amount of memory in each pool is based on how much memory is available in the module or how much memory is allocated to the virtual memory manager (VMM) by the hypervisor layer. In AIX 7.1 and later, the restricted memory_affinity vmo tunable parameter must not be disabled. The MEMORY_AFFINITY environment variable can be used to configure the placement of user memory.

The operating system provides memory affinity by organizing its data structures along module boundaries. The default memory allocation policy rotates among the MCMs. In order to obtain preferential local MCM memory allocation, an application can export the MEMORY_AFFINITY environment variable as follows:
MEMORY_AFFINITY=MCM
This behavior is propagated across a fork. However, for this behavior to be retained across a call to the exec function, the variable must be contained in the environment string passed to the exec function call.

Related information

The vmo command and VMM page replacement tuning.

The bindprocessor command or subroutine.

WLM Class and Resource Set Attributes.