AIX memory affinity support
AIX® provides the capability to allocate memory for a process from the module containing the processor that caused the page fault. You can use this capability if memory affinity support is enabled on your system and by setting the MEMORY_AFFINITY environment variable. Memory affinity is enabled by default in AIX 5.2, but you can disable it.
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 contain 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.
When memory affinity is enabled, each module has its own vmpool, which 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 allocated to the VMM by the hypervisor layer.
If you are using AIX 5.2 and memory affinity is disabled, the number of memory pools is based on the amount of memory and the number of CPUs in the system.
To disable memory affinity support on AIX 5.2, you can use the following vmo command:
vmo -o memory_affinity=0
Note: A bosboot and a reboot are required in order for it to take effect.
The default value is 1, which means that memory affinity support is enabled.
Enabling memory affinity support tells the operating system to organize 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 must export the MEMORY_AFFINITY environment variable as follows:
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.