Miscellaneous tunable parameters
Several of the miscellaneous parameters available in AIX® are tunable.
- AIX_TZCACHE
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 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 timezone 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: N/A - EXTSHM
Refer to: Extended Shared Memory
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: N/A Tuning: Setting 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 effectively removes the limitation of 11 user shared memory segments. For 32bit 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.
- LDR_CNTRL
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, or SED
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. Permanent change is made by adding the following line to the /etc/environment file: LDR_CNTRL={PREREAD_SHLIB | LOADPUBLIC| ...} Diagnosis: N/A 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 the option, separate the options with the '@' sign. An example of specifying multiple options is: LDR_CNTRL=PREREAD_SHLIB@LOADPUBLIC. Specifying the PREREAD_SHLIB option causes entire libraries to be read as soon as they are accessed. With VMM readahead is tuned, a library can be read from the disk and be 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 non-sequential (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 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 if the module was loaded at application load time and the module was then 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 can be helpful in applications doing 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 non-zero maxdata value enables the large address-space mode, 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 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 given 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.
Specifying the LARGE_PAGE_DATA=M option allocates only enough large pages for the data segment up to the brk value, rather than the entire segment, which is the behavior when you do not specify the LARGE_PAGE_DATA=M option. 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 process address space location of the read-only segments for certain 32-bit executables. For more information see 32-bit Huge Executable.
Specifying theNAMEDSHLIB=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 dedicated to shared library text
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, 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 theAOUT_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 LDR_PRELOAD64
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 listed in this variable is searched first for every imported symbol, and only when it is not found in those libraries will the normal search be used. Preempting of symbols from preloaded libraries works for both AIX default linking and run-time linking. Deferred symbol resolution is unchanged. Values: Default: Not set Possible values: library name(s)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 process' dependencies. All dynamically loaded modules (modules loaded with dlopen() or load()) will also be resolved first from the preloaded libraries listed by the variable.
Diagnosis: N/A - NODISCLAIM
Refer to: Early page space allocation
Item Descriptor Purpose: Controls how calls to free() are being handled. When PSALLOC is set to early, all free() calls result in a disclaim() system call. When NODISCLAIM is set to true, this does not occur. 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() system calls is very high, you might want to set this variable. Tuning: Setting this variable will eliminate calls to the disclaim() option from free() if PSALLOC is set to early. - NSORDER
Refer to: Name resolution tuning
Item Descriptor Purpose: Overwrites the set name resolution search order. Values: Default: bind, nis, local Possible Values: bind, local, nis, bind4, bind6, local4, local6, nis4, or nis6
Display: echo $NSORDER This is turned on internally, so the initial default value will not be 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: N/A Tuning: NSORDER overrides the /etc/netsvc.conf file. - PSALLOC
Refer to: Allocation and reclamation of paging space slots and Early page space allocation
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: N/A 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 might result in wasted paging space. You might also want to set the NODISCLAIM environment variable. - RT_GRQ
Refer to: Scheduler run queue
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/ONexport RT_GRQ Change takes effect immediately. Change is effective until next boot. Permanent change is made by adding the RT_GRQ={ON|OFF} command to the /etc/environment file.
Diagnosis: N/A Tuning: May be tuned on multiprocessor systems. Setting this variable to ON will cause 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 might allow the system to get the thread dispatched sooner and can improve performance for threads that are running SCHED_OTHER and are interrupt driven. - RT_MPC
Item Descriptor Purpose: When you are running the kernel in real-time mode (see bosdebug command), an MPC can be sent to a different CPU to interrupt it if a better priority thread is runnable so that this thread can be dispatched immediately. Values: Default: Not set Range: ON
Display: echo $RT_MPC Change: RT_MPC=ON export RT_MPC Change takes effect immediately. Change is effective until next boot. Permanent change is made by adding the RT_MPC=ON command to the /etc/environment file.
Diagnosis: N/A - TZ
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 Change takes effect immediately in the shell. Change is effective till you log out of the shell. Permanent change can be made by adding the TZ= value command to the /etc/environment file.
Diagnosis: N/A Tuning: POSIX may 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
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
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: N/A Tuning: The VMM_CNTRL
environment variable can be used to control the virtual memory manager. You can specify multiple options by using theVMM_CNTRL
environmental variable and by separating the options with the '@' sign. An example to specify multiple options follows:VMM_CNTRL=vmm_fork_policy=COW@SHM_1TB_SHARED=5
When you specify the
vmm_fork_policy=COW
option, thevmm
uses the copy-on-write fork-tree policy whenever a process is forked. This is the default behavior. To prevent thevmm
from using the copy-on-write policy, use thevmm_fork_policy=COR
option. If thevmm_fork_policy
option is specified, the globalvmm_fork_policy
tunable is ignored.If
ESID_ALLOCATOR
option is specified, it controls the allocator from undirectedshmat
andmmap
allocations. See 1 TB Segment Aliasing for detailed information.If
SHM_1TB_SHARED
orSHM_1TB_UNSHARED
is specified, it controls the use of 1 TB shared memory regions. See 1 TB Segment Aliasing for detailed information. - AIX_STDBUFSZ
Item Descriptor Purpose: Configures the I/O buffer size for the read and write system calls generated by cp,mv,cat, cpio commands. This 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: N/A Tuning: Specify the value in following ways.- Specify an integer value using the format
export AIX_STDBUFSZ=1024
- Specify a hex value using the format
export AIX_STDBUFSZ=0x400
- Limits: The minimum limit is 64 bytes and the maximum limit is 127 MB.
- A valid integers 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 lower value in power of 2.
- If the value of
AIX_STDBUFSZ
parameter is invalid, it is ignored.
- Specify an integer value using the format
- AIX_LDSYM
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 64K, use the environment variableAIX_LDSYM=ON
to get the source line information in aLightweight_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: N/A Tuning: Use this parameter for applications which has 64 K text page size and needs source line information in its
Lighweight_core
file.