Miscellaneous tunable parameters

Several of the miscellaneous parameters available in AIX are tunable.

AIX_TZCACHE
Table 1. AIX_TZCACHE tunable parameter
Item Descriptor
Purpose Stores a fixed copy of the TZ variable for the length of a process.
Values Default: Not set

Possible Values: ON (enables parameter)

Display $AIX_TZCACHE
Change

export AIX_TZCACHE=ON

The changes take effect for all processes that later start from this shell. Informs an application to always use the initial starting value of the TZ variable. This process improves performance if frequent time zone lookups are called by an application. For example, if an application frequently checks the local time. However, any changes to the TZ variable are not recognized when the application has already started.

Diagnosis This parameter is not recommended for universal system configuration in the /etc/environment file. Use this parameter for applications that do not alter the TZ variable, but make frequent time zone requests.
Tuning Not applicable
EXTSHM
Table 2. EXTSHM tunable parameter
Item Descriptor
Purpose Turns on the extended shared memory facility.
Values Default: Not set

Possible Values: ON, 1SEG, MSEG

Display echo $EXTSHM
Change

export EXTSHM

Change takes effect immediately in this shell. Change is effective until logging out of this shell. Permanent change is made by adding EXTSHM=ON, EXTSHM=1SEG, or EXTSHM=MSEG command to the /etc/environment file.

Diagnosis Not applicable
Tuning Setting the value to ON, 1SEG, or MSEG allows a process to allocate shared memory segments as small as 1 byte, rounded to the nearest page. This option effectively removes the limitation of 11 user shared memory segments. For 32-bit processes, the maximum size of all memory segments is 2.75 GB.

Setting EXTSHM to ON has the same effect as setting the variable to 1SEG. With either setting, any shared memory less than 256 MB is created internally as a mmap segment, and thus has the same performance implications of mmap. Any shared memory greater or equal to 256 MB is created internally as a working segment.

If EXTSHM is set to MSEG, all shared memory is created internally as a mmap segment, allowing for better memory utilization.

For more information, see Extended Shared Memory.

LDR_CNTRL
Table 3. LDR_CNTRL tunable parameter
Item Descriptor
Purpose Allows tuning of the kernel loader.
Values Default: Not set

Possible Values: PREREAD_SHLIB, LOADPUBLIC, IGNOREUNLOAD, USERREGS, MAXDATA, MAXDATA32, MAXDATA64, DSA, PRIVSEG_LOADS, DATA_START_STAGGER, LARGE_PAGE_TEXT, LARGE_PAGE_DATA, HUGE_EXEC, NAMEDSHLIB, SHARED_SYMTAB, SED, or LLU

Display echo $LDR_CNTRL
Change

LDR_CNTRL={PREREAD_SHLIB | LOADPUBLIC| ...}

export LDR_CNTRL

Change takes effect immediately in this shell. Change is effective until logging out of this shell. A permanent change is made by adding the following line to the /etc/environment file:
LDR_CNTRL={PREREAD_SHLIB | LOADPUBLIC| ...} 
Diagnosis Not applicable
Tuning The LDR_CNTRL environment variable can be used to control one or more aspects of the system loader behavior. You can specify multiple options with the LDR_CNTRL variable. When specifying this option, separate the options with the @ sign. The following example shows how to specify multiple options:
LDR_CNTRL=PREREAD_SHLIB@LOADPUBLIC

Specifying the PREREAD_SHLIB option causes entire libraries to be read when they are accessed. With the VMM readahead tuned, a library can be read from the disk and can be also cached in memory by the time the program starts to access its pages. While this method might use more memory, it might also enhance the performance of programs that use many shared library pages if the access pattern is nonsequential (for example, Catia).

Specifying the LOADPUBLIC option directs the system loader to load all modules requested by an application into the global shared library segment. If a module cannot be loaded publicly into the global shared library segment, then it is loaded privately for the application.

Specifying the IGNOREUNLOAD option prevents the application from unloading libraries. This specification might prevent memory fragmentation and eliminate the overhead that is incurred when libraries are repeatedly loaded and unloaded. If you do not specify the IGNOREUNLOAD option, you might end up with two data instances of a module. Two data instances of a module are created if the module was loaded at application load time and then the module was requested to be dynamically loaded and unloaded multiple times.

Specifying the USERREGS option tells the system to save all general-purpose user registers across system calls made by an application. This option can be helpful for applications that does garbage collection.

Specifying the MAXDATA option sets the maximum heap size for a process, which includes overriding any maxdata value that is specified in the executable. The maxdata value is used to set the initial soft data resource limit of the process. For 32-bit programs, a nonzero maxdata value enables the large address-space mode. For more information, see Large Program Support. To disable the large address-space model, specify a maxdata value of zero by setting LDR_CNTRL=MAXDATA=0. For 64-bit programs, the maxdata value provides a guaranteed maximum size for the data heap of the program. The portion of the address space that is reserved for the heap cannot be used by the shmat or mmap subroutines, even if an explicit address is provided. Any value can be specified, but the data area cannot extend past 0x06FFFFFFFFFFFFFF regardless of the maxdata value specified.

The two additional maxdata options exist to allow finer control based on whether the process is 32-bit or 64-bit. These additional maxdata options override the MAXDATA option for the corresponding object mode. Specifying the MAXDATA32 option results in identical behavior to MAXDATA except that the value is ignored for 64-bit processes. Specifying the MAXDATA64 option results in identical behavior to MAXDATA except that the value is ignored for 32-bit processes.

Specifying the PRIVSEG_LOADS option directs the system loader to put dynamically loaded private modules into the process private segment. This specification might improve the availability of memory in large memory model applications that perform private dynamic loads and tend to run out of memory in the process heap. If the process private segment lacks sufficient space, the PRIVSEG_LOADS option has no effect. The PRIVSEG_LOADS option is only valid for 32-bit applications with a non-zero MAXDATA value.

Specifying the DATA_START_STAGGER=Y option starts the data section of the process at a per-MCM offset that is controlled by the data_stagger_interval option of the vmo command. The nth large-page data process executed on a specified MCM has its data section start at offset (n * data_stagger_interval * PAGESIZE) % 16 MB. The DATA_START_STAGGER=Y option is only valid for 64-bit processes on a 64-bit kernel.

Specifying the LARGE_PAGE_TEXT=Y option indicates that the loader might attempt to use large pages for the text segment of the process. The LARGE_PAGE_TEXT=Y option is only valid for 64-bit processes on a 64-bit kernel.

start of changeSpecifying the LLU=yes option enables the Live Library Update (LLU) function and LLU=no disables the LLU function when the llu_mode parameter is set to 1 or 2 by using the raso command. end of change

 

Specifying the LARGE_PAGE_DATA=M option allocates only enough large pages for the data segment up to the brk value. Otherwise, the entire segment is allocated when the LARGE_PAGE_DATA=M option is not specified. The changes to the brk value might fail if there are not enough large pages to support the change to the brk value.

Specifying the RESOLVEALL option forces the loader to resolve all undefined symbols that are imported at program load time or when the program loads the dynamic modules. Symbol resolution is performed in the standard AIX depth-first order. If you specify LDR_CNTRL=RESOLVEALL and the imported symbols cannot be resolved, the program or the dynamic modules fail to load.

Specifying the HUGE_EXEC option provides user control over the location of the process address space of the read-only segments for certain 32-bit executables. For more information, see 32-bit Huge Executable.

Specifying the NAMEDSHLIB=name,[attr1],[attr2]...[attrN] option enables a process to access or create a shared library area that is identified by the name that is specified. You can create a named shared library area with the following methods:
  • With no attributes
  • With the doubletext32 attribute, which creates the named shared library area with two segments that are dedicated to shared library text
If a process requests the use of a named shared library area that does not exist, the shared library area is automatically created with the name that is specified. If an invalid name is specified, the NAMEDSHLIB=name,[attr1],[attr2]...[attrN] option is ignored. Valid names are of positive length and contain only alphanumeric, underscore, and period characters.

Specifying the SHARED_SYMTAB=Y option causes the system to create a shared symbol table for a 64-bit program, if the program exports any symbols. If multiple instances of the program run concurrently, by using a shared symbol table can reduce the amount of system memory that is required by the program.

Specifying the SHARED_SYMTAB=N option prevents the system from creating a shared symbol table for a 64-bit program. This option overrides the AOUT_SHR_SYMTAB flag in the XCOFF auxiliary header.

Specifying the SED option sets the stack execution disable (SED) mode for the process, by ignoring any other SED mode that is specified by the executable. This option must be set to one of the following values:
SED=system
SED=request
SED=exempt
LDR_PRELOAD or LDR_PRELOAD64
Table 4. LDR_PRELOAD64 tunable parameter
Item Descriptor
Purpose Requests preloading of shared libraries. The LDR_PRELOAD option is for 32-bit processes, and the LDR_PRELOAD64 option is for 64-bit processes. During symbol resolution, the preloaded libraries that are listed in this variable are searched first for every imported symbol, and only when it is not found in those libraries the normal search is used. Preempting of symbols from preloaded libraries works for both AIX default linking and runtime linking. Deferred symbol resolution is unchanged.
Values Default: Not set
Possible values: One or more library names
Note: If more than one library is listed, separate them with a colon (:). Place members of archive libraries between parentheses.
Display

echo $LDR_PRELOAD

echo $LDR_PRELOAD64

Change

$LDR_PRELOAD="libx.so:liby.a(shr.o)"

Resolves any symbols needed first from the libx.so shared object, then from the shr.o member of liby.a, and finally within the dependencies of the process. All dynamically loaded modules (modules that are loaded with dlopen or load subroutines) are also resolved first from the preloaded libraries that are listed by the variable.

Diagnosis Not applicable
NODISCLAIM
Table 5. NODISCLAIM tunable parameter
Item Descriptor
Purpose Controls how calls to free subroutine are being handled. When PSALLOC is set to early, all free subroutine calls result in a disclaim subroutine call. When NODISCLAIM is set to true, the disclaim subroutine is not called.
Values Default: Not set

Possible Value: True

Display echo $NODISCLAIM
Change

NODISCLAIM=true export NODISCLAIM

Change takes effect immediately in this shell. Change is effective until logging out of this shell. Permanent change is made by adding NODISCLAIM=true command to the /etc/environment file.

Diagnosis If the number of disclaim subroutine calls is high, you might want to set this variable.
Tuning Setting this variable eliminates calls to the disclaim subroutine option from free subroutine if PSALLOC is set to early.

For more information, see Early page space allocation.

NSORDER
Table 6. NSORDER tunable parameter
Item Descriptor
Purpose Overwrites the search order of the set name resolution.
Values Default: bind, nis, local

Possible Values: bind, local, nis, bind4, bind6, local4, local6, nis4, or nis6

Display

echo $NSORDER

This option is turned on internally, so the initial default value are not seen with the echo command.

Change

NSORDER=value, value, ...

export NSORDER

Change takes effect immediately in this shell. Change is effective until logging out of this shell. Permanent change is made by adding the NSORDER=value command to the /etc/environment file.

Diagnosis Not applicable
Tuning NSORDER overrides the /etc/netsvc.conf file.

For more information, see Name resolution tuning.

PSALLOC
Table 7. PSALLOC tunable parameter
Item Descriptor
Purpose Sets the PSALLOC environment variable to determine the paging-space allocation policy.
Values Default: Not set

Possible Value: early

Display echo $PSALLOC
Change

PSALLOC=early export PSALLOC

Change takes effect immediately in this shell. Change is effective until logging out of this shell.

Diagnosis Not applicable
Tuning To ensure that a process is not killed due to low paging conditions, this process can preallocate paging space by using the Early Page Space Allocation policy. However, this option might result in wasted paging space. You might also want to set the NODISCLAIM environment variable.

For more information, see Allocation and reclamation of paging space slots and Early page space allocation.

RT_GRQ
Table 8. RT_GRQ tunable parameter
Item Descriptor
Purpose Causes the thread to be put on a global run queue rather than on a per-CPU run queue.
Values Default: Not set

Range: ON, OFF

Display echo $RT_GRQ
Change

RT_GRQ={OFF/ON

export RT_GRQ

The change takes effect immediately. The change is effective until next boot. Permanent change is made by adding the RT_GRQ={ON|OFF} command to the /etc/environment file.

Diagnosis Not applicable
Tuning Might be tuned on multiprocessor systems. Setting this variable to ON causes the thread to be put in a global run queue. In that case, the global run queue is searched to see which thread has the best priority. This option might allow the system to get the thread dispatched sooner and can improve performance for threads that are running SCHED_OTHER and are interrupt that is driven.

For more information, see Scheduler run queue.

RT_MPC
Table 9. RT_MPC tunable parameter
Item Descriptor
Purpose When you are running the kernel in real-time mode, an MPC is sent to a different CPU to interrupt it if a better priority thread is runnable so that this thread is dispatched immediately. For more information, see the bosdebug command.
Values Default: Not set

Range: ON

Display echo $RT_MPC
Change

RT_MPC=ON

export RT_MPC

The change takes effect immediately. The change is effective until next boot. Permanent change is made by adding the RT_MPC=ON command to the /etc/environment file.

Diagnosis Not applicable
TZ
Table 10. TZ tunable parameter
Item Descriptor
Purpose Sets the time zone.
Values Default: Olson time zone

Possible values: Olson time zone or POSIX time zone

Display echo $TZ
Change

TZ = value export TZ

The change takes effect immediately in the shell. The change is effective until you log out of the shell. Permanent change can be made by adding the TZ= value command to the /etc/environment file.

Diagnosis Not applicable
Tuning POSIX might be used by applications that are performance sensitive and do not rely on accurate changes to time zone rules and Daylight Saving Time.
VMM_CNTRL
Table 11. VMM_CNTRL tunable parameter
Item Descriptor
Purpose Allows tuning the virtual memory manager.
Values Default: Not set

Possible Values: vmm_fork_policy, ESID_ALLOCATOR, SHM_1TB_SHARED, SHM_1TB_UNSHARED, SHM_AUTO_1TB, MMAP_ANON_PSIZE

Display echo $VMM_CNTRL
Change

VMM_CNTRL={vmm_fork_policy=… | ESID_ALLOCATOR=… | ...}

export VMM_CNTRL

Change takes effect immediately in this shell. Change is effective until you log out of this shell. Permanent change can be made by adding the VMM_CNTRL= environment variable to the /etc/environment file.

Diagnosis Not applicable
Tuning The VMM_CNTRL environment variable can be used to control the virtual memory manager. You can specify multiple options by using the VMM_CNTRL environmental variable and by separating the options with the '@' sign. The following example shows how to specify multiple options:
VMM_CNTRL=vmm_fork_policy=COW@SHM_1TB_SHARED=5

When you specify the vmm_fork_policy=COW option, the vmm uses the copy-on-write fork-tree policy whenever a process is forked. This option is the default behavior. To prevent the vmm from using the copy-on-write policy, use the vmm_fork_policy=COR option. If the vmm_fork_policy option is specified, the global vmm_fork_policy tunable is ignored.

If ESID_ALLOCATOR option is specified, it controls the allocator from undirected shmat and mmap allocations. See 1 TB Segment Aliasing for detailed information.

If SHM_1TB_SHARED or SHM_1TB_UNSHARED is specified, it controls the use of 1 TB shared memory regions. See 1 TB Segment Aliasing for detailed information.

If SHM_AUTO_1TB is specified, it controls the autonomic promotion of 1 TB segment size for shared memory regions. See Creating shared memory objects with 1 TB segment size for detailed information.

If the VMM_CNTRL environment variable is set to MMAP_ANON_PSIZE=64K, the anonymous memory regions are supported by 64 KB page size. This setting affects all the anonymous memory regions that are created for the process for the duration that the environment variable is set. By default, the anonymous memory regions are supported by 4 KB page size.

AIX_STDBUFSZ
Table 12. AIX_STDBUFSZ: tunable parameter
Item Descriptor
Purpose Configures the I/O buffer size for the read and write system calls generated by cp, mv, cat, and cpio commands. This option is also applicable for stream buffering.
Values Default: Not set.

Possible values: Integer value that specifies the buffer size in bytes, KB, MB.

Display echo $AIX_STDBUFSZ
Change

AIX_STDBUFSZ=1024

export AIX_STDBUFSZ (To configure 1024 buffer size)

Changes take effect immediately in this shell. Change is effective until you log out of this shell. Permanent change to the buffer size can be made by adding the AIX_STDBUFSZ environment variable to the /etc/environment file.

Diagnosis Not applicable
Tuning
Specify the value in the following ways.
  • Specify an integer value by using the format export AIX_STDBUFSZ=1024
  • Specify a hex value by using the format export AIX_STDBUFSZ=0x400
  • Limits: The minimum limit is 64 bytes and the maximum limit is 127 MB.
  • A valid integer outside these limits are reverted to the nearest limit value.
  • If the specified value is not in power of 2, it is rounded off to the nearest value in power of 2 that is less than the specified value.
  • If the value of AIX_STDBUFSZ parameter is invalid, it is ignored.
AIX_LDSYM
Table 13. AIX_LDSYM tunable parameter
Item Descriptor
Purpose The source line information in a Lightweight_core file is not displayed by default when the text page size is 64 K. When the text page size is 64 K, use the environment variable AIX_LDSYM=ON to get the source line information in a Lightweight_core file.
Values Default: Not set.

Possible values: ON.

Display echo $AIX_LDSYM
Change

export AIX_LDSYM=ON

Changes take effect immediately in this shell. Change is effective until you log out of this shell. Permanent change to the system can be made by adding the AIX_LDSYM=ON environment variable to the /etc/environment file.

Diagnosis Not applicable
Tuning

Use this parameter for applications that have 64 K text page size and needs source line information in its Lighweight_core file.

AIX_CWD_CACHE
Table 14. AIX_CWD_CACHE tunable parameter
Item Descriptor
Purpose Disables the caching algorithm that is used by the getcwd and getwd subroutines to retrieve the path name of the current working directory.
Values

Default: Not set.

Possible values: OFF

Display echo $AIX_CWD_CACHE
Change

export AIX_CWD_CACHE=OFF

Changes take effect for all processes that start from this shell later. Set the value of the AIX_CWD_CACHE parameter before a process makes an initial call to the getcwd or getwd subroutines. After a process calls the getcwd or getwd subroutines, further changes to the AIX_CWD_CACHE parameter are not effective.

Diagnosis Not applicable
Tuning Not applicable
start of changeprinter_scalabilityend of change
start of change
Table 15. printer_scalability tunable parameter
Item Descriptor
Purpose Sets the environmental variables to enables scalable improvements for the AIX printer subsystem.
Values

Default: Not set.

Possible values: OFF

Display echo $printer_scalability
Change

printer_scalability = ON

startsrc -s qdaemon -e printer_scalability=ON

startsrc -s lpd -e printer_scalability=ON

Changes take effect immediately in the shell. Change is effective till you log out of the shell. Permanent changes are made by adding the printer_scalability = ON command to the ~/.profile file.

Diagnosis Not applicable
Tuning Not applicable
end of change