Miscellaneous tunable parameters

Several of the miscellaneous parameters available in AIX® are tunable.

  1. 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
  2. EXTSHM
    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.

    Refer to: Extended Shared Memory
  3. 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 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 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, 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
  4. 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
  5. NODISCLAIM
    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.
    Refer to: Early page space allocation
  6. NSORDER
    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.
    Refer to: Name resolution tuning
  7. PSALLOC
    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.
    Refer to: Allocation and reclamation of paging space slots and Early page space allocation
  8. RT_GRQ
    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.
    Refer to: Scheduler run queue
  9. 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
  10. 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.
  11. 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 the VMM_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, the vmm uses the copy-on-write fork-tree policy whenever a process is forked. This 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.

  12. 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.
  13. 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 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: 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.