vmo Command
Purpose
Manages Virtual Memory Manager tunable parameters.
Syntax
vmo [ -p | -r ] { -o Tunable [= Newvalue]}
vmo [ -p | -r ] {-d Tunable }
vmo [ -p | -r ] -D
vmo [ -p | -r ] -a
vmo -h [ Tunable ]
vmo -L [ Tunable ]
vmo -x [ Tunable ] Note: Multiple -o, -d, -x and -L are allowed.
Description
Note: The vmo command can only be executed by root.
Use the vmo command to configure Virtual Memory Manager tuning parameters. This command sets or displays current or next boot values for all Virtual
Memory Manager tuning parameters. This command can also make permanent changes or defer changes until the next reboot. Whether the command sets or
displays a parameter is determined by the accompanying flag. The -o flag performs both actions. It can either display the value of a parameter or
set a new value for a parameter.
The Virtual Memory Manager (VMM) maintains a list of free real-memory page frames. These page frames are available to hold virtual-memory pages
needed to satisfy a page fault. When the number of pages on the free list falls below that specified by the minfree parameter, the VMM begins to
steal pages to add to the free list. The VMM continues to steal pages until the free list has at least the number of pages specified by the maxfree
parameter.
If the number of file pages (permanent pages) in memory is less than the number specified by the minperm% parameter, the VMM steals frames from
either computational or file pages, regardless of repage rates. If the number of file pages is greater than the number specified by the maxperm%
parameter, the VMM steals frames only from file pages. Between the two, the VMM normally steals only file pages, but if the repage rate for file
pages is higher than the repage rate for computational pages, computational pages are stolen as well.
You can also modify the thresholds that are used to decide when the system is running out of paging space. The npswarn parameter specifies the
number of paging-space pages available at which the system begins warning processes that paging space is low. The npskill parameter specifies the
number of paging-space pages available at which the system begins killing processes to release paging space.
Understanding the Effect of Changing Tunable Parameters
Misuse of this command can cause performance degradation or operating-system failure. Before experimenting with vmo, you should be thoroughly
familiar with both Performance overview of the Virtual Memory Manager and Enhanced JFS file system cache limit with the maxclient parameter.
Before modifying any tunable parameter, you should first carefully read about all its characteristics in the Tunable Parameters section below, and
follow any Refer To pointer, in order to fully understand its purpose.
You must then make sure that the Diagnosis and Tuning sections for this parameter truly apply to your situation and that changing the value of this
parameter could help improve the performance of your system.
If the Diagnosis and Tuning sections both contain only "N/A", you should probably never change this parameter unless specifically directed by AIX
development.
Flags
-a
Displays current, reboot (when used in conjunction with -r) or permanent (when used in conjunction with -p) value for all tunable parameters,
one per line in pairs Tunable = Value. For the permanent option, a value is only displayed for a parameter if its reboot and current values are
equal. Otherwise NONE is displayed as the value.
-d Tunable
Resets Tunable to default value. If a Tunable needs to be changed (that is, it is currently not set to its default value) and is of type
Bosboot or Reboot, or if it is of type Incremental and has been changed from its default value, and -r is not used in combination, it will not
be changed but a warning will be displayed instead.
-D
Resets all tunables to their default value. If tunables needing to be changed are of type Bosboot or Reboot, or are of type Incremental and
have been changed from their default value, and -r is not used in combination, they won't be changed but a warning will be displayed instead.
-h [Tunable]
Displays help about the Tunable parameter if one is specified. Otherwise, displays the vmo command usage statement.
-L [ Tunable ]
Lists the characteristics of one or all tunables, one per line, using the following format:
NAME CUR DEF BOOT MIN MAX UNIT TYPE
DEPENDENCIES
--------------------------------------------------------------------------------
memory_frames 128K 128K 4KB pages S
--------------------------------------------------------------------------------
maxfree 1088 1088 130 16 200K 4KB pages D
minfree
memory_frames
--------------------------------------------------------------------------------
minfree 960 960 122 8 200K 4KB pages D
maxfree
memory_frames
--------------------------------------------------------------------------------
...
where:
CUR = current value
DEF = default value
BOOT = reboot value
MIN = minimal value
MAX = maximum value
UNIT = tunable unit of measure
TYPE = parameter type: D (for Dynamic), S (for Static), R for Reboot),
B (for Bosboot), M (for Mount), I (for Incremental),
C (for Connect), and d (for Deprecated)
DEPENDENCIES = list of dependent tunable parameters, one per line
-o Tunable[=Newvalue]
displays the value or sets tunable to Newvalue. If a tunable needs to be changed (the specified value is different than current value), and is
of type Bosboot or Reboot, or if it is of type Incremental and its current value is bigger than the specified value, and -r is not used in
combination, it will not be changed but a warning will be displayed instead.
When -r is used in combination without a new value, the nextboot value for tunable is displayed. When -p is used in combination without a new
value, a value is displayed only if the current and next boot values for tunable are the same. Otherwise NONE is displayed as the value.
-p
When used in combination with -o, -d or -D, makes changes apply to both current and reboot values, that is, turns on the updating of the
/etc/tunables/nextboot file in addition to the updating of the current value. These combinations cannot be used on Reboot and Bosboot type
parameters because their current value can't be changed.
When used with -a or -o without specifying a new value, values are displayed only if the current and next boot values for a parameter are the
same. Otherwise NONE is displayed as the value.
-r
When used in combination with -o, -d or -D, makes changes apply to reboot values, for example, turns on the updating of the
/etc/tunables/nextboot file. If any parameter of type Bosboot is changed, the user will be prompted to run bosboot.
When used with -a or -o without specifying a new value, next boot values for tunables are displayed instead of current values.
-x [Tunable]
Lists characteristics of one or all tunables, one per line, using the following (spreadsheet) format:
tunable,current,default,reboot,min,max,unit,type,{dtunable }
where:
current = current value
default = default value
reboot = reboot value
min = minimal value
max = maximum value
unit = tunable unit of measure
type = parameter type: D (for Dynamic), S (for Static), R (for Reboot),
B (for Bosboot), M (for Mount), I (for Incremental),
C (for Connect), and d (for Deprecated)
dtunable = list of dependent tunable parameters
Any change (with -o, -d or -D) to a parameter of type Mount will result in a message being displayed to warn the user that the change is only
effective for future mountings.
Any change (with -o, -d or -D flags) to a parameter of type Connect will result in inetd being restarted, and a message displaying a warning to the
user that the change is only effective for future socket connections.
Any attempt to change (with -o, -d or -D) a parameter of type Bosboot or Reboot without -r, will result in an error message.
Any attempt to change (with -o, -d or -D but without -r) the current value of a parameter of type Incremental with a new value smaller than the
current value, will result in an error message.
Tunable Parameters Type
All the tunable parameters manipulated by the tuning commands (no, nfso, vmo, ioo, raso, and schedo) have been classified into these categories:
Dynamic
If the parameter can be changed at any time
Static
If the parameter can never be changed
Reboot
If the parameter can only be changed during reboot
Bosboot
If the parameter can only be changed by running bosboot and rebooting the machine
Mount
If changes to the parameter are only effective for future file systems or directory mounts
Incremental
If the parameter can only be incremented, except at boot time
Connect
If changes to the parameter are only effective for future socket connections
Deprecated
If changing this parameter is no longer supported by the current release of AIX.
For parameters of type Bosboot, whenever a change is performed, the tuning commands automatically prompt the user to ask if they want to execute the
bosboot command. For parameters of type Connect, the tuning commands automatically restart the inetd daemon.
Note that the current set of parameters managed by the vmo command only includes Static, Dynamic, and Bosboot types.
Compatibility Mode
When running in pre-AIX 5.2 compatibility mode (controlled by the pre520tune attribute of sys0), reboot values for parameters, except those of type
Bosboot, are not really meaningful because in this mode they are not applied at boot time. For more information, see AIX 5.2 compatibility mode in
the Performance management.
In pre-AIX 5.2 compatibility mode, setting reboot values to tuning parameters continues to be achieved by imbedding calls to tuning commands in
scripts called during the boot sequence. Parameters of type Reboot can therefore be set without the -r flag, so that existing scripts continue to
work.
This mode is automatically turned ON when a machine is migrated to AIX 5.2. For complete installations, it is turned OFF and the reboot values for
parameters are set by applying the content of the /etc/tunables/nextboot file during the reboot sequence. Only in that mode are the -r and -p flags
fully functional. For more information, see Kernel Tuning in AIX 5L Version 5.3 Performance Tools Guide and Reference.
Tunable Parameters
cpu_scale_memp
Purpose:
Determines the ratio of CPUs per-mempool. For every cpu_scale_memp CPUs, at least one mempool will be created.
Values:
Default: 8
Range: 1 to 128 (Maximum number of CPUs)
Diagnosis:
N/A
Tuning:
Can be reduced to reduce contention on the mempools. Use in conjunction with the tuning of the maxperm parameter.
data_stagger_interval
Purpose:
Specifies what the staggering is that will be applied to the data section of a large-page data executable with
LDR_CNTRL=DATA_START_STAGGER=Y. For example, the nth large-page data process executed on a given MCM has its data section start at
offset (n * data_stagger_interval * 4096) % LGPSIZE.
Values:
Default: 0xA1
Range: 0 to (LargePageSize/4096)-1.
Type: Dynamic
Diagnosis:
N/A
defps
Purpose:
Turns on/off Deferred Page Space Allocation (DPSA) policy.
Values:
Default: 1
Range: 0 or 1 (DPSA is on)
Type: Dynamic
Diagnosis:
N/A
Tuning
May be useful to turn off DPSA policy if you are concerned about page-space overcommitment. Having the value on reduces paging space
requirements.
Refer To:
Choosing between LPSA and DPSA with the vmo command .
force_relalias_lite
Purpose:
If set to 0, a heuristic will be used, when tearing down an mmap region, to determine when to avoid locking the source mmapped segment.
This is a scalability trade-off, controlled by relalias_percentage, possibly costing more compute time used.
Values:
* Default: 0
* Range: 1 or 0
Diagnosis:
Tuning
If set to 1, the source segment lock is avoided whenever possible, regardless of the value of relalias_percentage. The Default value is
0.
framesets
Purpose:
Specifies the number of real memory page sets per memory pool. This parameter does not exist in UP kernels.
Values:
* Default: 2
* Range: 1 to 10
* Type: Bosboot
Diagnosis:
N/A
Tuning
N/A
htabscale
Purpose:
On non-lpar machines, the hardware page frame table (PFT) is completely software controlled and its size is based on the amount of
memory being used. The default is to have 4 PTE's (PFT entries) for each frame of memory (sz=(M/4096)*4*16 where size of PTE is 16
bytes).
Values:
* Default: -1
Diagnosis:
N/A
Tuning:
The size can be scaled up or down via htabscale. The default value is -1 (PTE to frame ratio of 4:1). Each decrement of htabscale
reduces the PFT size in half. Each increment of htabscale doubles the PFT size.
kernel_heap_psize
Purpose:
Sets the default page size to use for the kernel heap. This is an advisory setting and is only valid on the 64-bit kernel. If pages of
the specified size cannot be allocated, the kernel heap will use pages of a different, smaller page size. 16M pages should only be used
for the kernel heap under high performance environments.
Values:
* Default: 4096
* Range: range: 4096 or 16777216
* Type: Bosboot
Diagnosis:
N/A
kernel_psize
Purpose:
Specifies the page size backing the kernel segment. This setting is only valid on a 64-bit kernel on POWER4 and later processors. When
the kernel is backed with 16M pages, approximately 240MB of additional pinned memory is use, but performance is improved.
Values:
* Default: 0
* Range: range: 0, 4096, 16777216
* Type: bosboot
Diagnosis:
N/A
Tuning
The kernel determines the best page size if 0 is specified. 4096 and 16777216 specify page sizes in bytes.
large_page_heap_size
Purpose:
When kernel_heap_psize is set to 16M, this tunable sets the maximum amount of the kernel heap to try to back with 16M pages. After the
kernel heap grows beyond this amount and 16M is selected kernel_heap_psize, 4K pages will be used for the kernel heap. If this tunable
is set to 0, it is ignored, and no maximum is set for the amount of kernel heap that can be backed with 16M pages. This tunable should
only be used in very special environments where only a portion of the kernel heap needs to be backed with 16M pages.
Values:
* Default: 0
* Range: 0 to MAXINT64
* Type: Bosboot
Diagnosis:
N/A
lgpg_regions
Purpose:
Specifies the number of pages in the large page pool. This parameter does not exist in 64-bit kernels running on non-POWER4 based
machines.
Values:
* Default: 0
* Range: 0 - number of pages.
* Type: Dynamic on DLPAR-capable systems. Bosboot on non-DLPAR systems.
Diagnosis:
Using large pages improves performance in the case where there are many TLB misses and large amounts of memory is being accessed.
Tuning
lpgpg_size must also be used in addition to this option.
vmo operations to change the number of large pages on the system may succeed partially. If a request to increase or decrease the size of
the pool cannot fully succeed (for example, if lgpg_regions is tuned to 0 but there are large pages in use by applications), the vmo
command will add or remove pages to get as close as possible to the requested number of pages. Note: If lgpg_regions is changed with the
-p option, the value specified will hold for the next boot, regardless of how successful the immediate action was.
Refer To:
System configuration for large pages
lgpg_size
Purpose:
Specifies the size in bytes of the hardware-supported large pages used for the implementation of the large page pool. This parameter
does not exist in 64-bit kernels running on non-POWER4 based machines.
Values:
* Default: 0
* Range: 0 or 268435456 (on non-POWER4), or 0 or 16777216 (on POWER4).
* Type: Dynamic on DLPAR-capable systems. Bosboot on non-DLPAR systems.
Diagnosis:
Using large pages improves performance in the case where there are many TLB misses and large amounts of memory is being accessed.
Tuning
lgpg_region must of be set to a non-zero value in addition to this parameter.
Refer To:
System configuration for large pages
low_ps_handling
Purpose:
Specifies the action to change the system behavior in relation to process termination during low paging space conditions.
Values:
* Default: 1
* Range: 1 or 2
* Type: Dynamic
Diagnosis:
N/A
Tuning
System out of paging space and not enough processes are getting killed. The default (value = 1) behavior is not to kill processes with
SIGDANGER handler. A new behavior (value = 2) will allow the system to kill youngest processes with the SIGDANGER handler. If no process
was found, the system will kill without the SIGDANGER handler.
lrubucket
Purpose:
Specifies the number of memory frames per bucket. The page-replacement algorithm divides real memory into buckets of frames. On systems
with multiple memory pools, the lrubucket parameter is per memory pool.
Values:
* Default: 131072 frames
* Range: 65536 to total number of memory frames
* Type: Dynamic
Diagnosis:
N/A
Tuning
Tuning this parameter is not recommended on most systems. Instead of scanning every frame in the system looking for a free frame, the
page replacement algorithm scans through the contents of a bucket and scans the same bucket for the second pass before going on to the
next bucket.
Refer To:
Reduce memory scanning overhead with lrubucket parameter.
maxclient%
Purpose:
Specifies maximum percentage of RAM that can be used for caching client pages. Similar to maxperm% but cannot be bigger than maxperm%.
Values:
* Default: 90
* Range: 1 to 100%.
* Type: Dynamic
Diagnosis:
If J2 file pages or NFS pages are causing working storage pages to get paged out, maxclient can be reduced.
Tuning
Decrease the value of maxclient if paging out to paging space is occurring due to too many J2 client pages or NFS client pages in
memory. Increasing the value can allow more J2 or NFS client pages to be in memory before page replacement starts.
Refer To:
Maximum caching of file data tuning and Enhanced JFS file system cache limit with the maxclient parameter.
maxfree
Purpose:
Specifies the number of frames on the free list at which page-stealing is to stop.
Values:
* Default: 1088
* Range: 16 to 204800
* Type: Dynamic
Diagnosis:
Observe free-list-size changes with vmstat n.
Tuning
If vmstat n shows free-list size frequently driven below minfree by application demands, increase maxfree to reduce calls to replenish
the free list. Setting the value too high causes page replacement to run for a longer period of time. Value must be at least 8 greater
than minfree
Refer To:
Values for minfree and maxfree parameters.
maxperm%
Purpose:
Specifies the point above which the page-stealing algorithm steals only file pages.
Values:
* Default: total number of memory frames * 0.9
* Range: 1 to 100
* Type: Dynamic
Diagnosis:
Monitor disk I/O with iostat n.
Tuning
This value is expressed as a percentage of the total real-memory page frames in the system. Reducing this value may reduce or eliminate
page replacement of working storage pages caused by high number of file page accesses. Increasing this value may help NFS servers that
are mostly read-only. For example, if some files are known to be read repetitively, and I/O rates do not decrease with time from
startup, maxperm may be too low.
Refer To:
Values for minfree and maxfree parameters.
maxpin%
Purpose:
Specifies the maximum percentage of real memory that can be pinned.
Values:
* Default: 80 percent
* Range: 1 to 99
* Type: Dynamic
Diagnosis:
Cannot pin memory, although free memory is available.
Tuning
If this value is changed, the new value should ensure that at least 4 MB of real memory will be left unpinned for use by the kernel. The
maxpin values must be greater than one and less than 100. Change this parameter only in extreme situations, such as maximum-load
benchmarking.
memory_affinity
Purpose:
This parameter has been deprecated starting with the December 2004 update to AIX 5L Version 5.3. The memplace_* parameters can be used
instead to tune memory placement policies for various user memory objects.
Values:
* Default: 1
* Range: N/A
* Type: Deprecated
Diagnosis:
N/A
Tuning
N/A
memplace_data
Purpose:
This parameter is used to specify the default memory placement policy for data. Data refers to : data of the main executable
(initialized data, BSS), heap, shared library data, and data of object modules loaded at runtime. Data placement can be set to First
Touch (1) or Striped (2).
First Touch means that the memory is allocated in the affinity domain where it is first accessed. Striped means that the memory is
allocated in a round-robin fashion across the system affinity domains.
Changes only apply to new processes. Memory objects of existing processes will still have the policies existing at the time the memory
object was created.
Values:
* Default: 1 (First Touch)
* Range: 1..2
* Type: Dynamic
Diagnosis:
N/A
Tuning
N/A
memplace_mapped_file
Purpose:
This parameter is used to specify the default memory placement policy for files that are mapped into the address space of a process
(such as through shmat() and mmap()). Default placement of memory mapped files can be set to First Touch (1) or Striped (2).
First Touch means that the memory is allocated in the affinity domain where it is first accessed. Striped means that the memory is
allocated in a round-robin fashion across the system affinity domains.
Changes only apply to new processes. Memory objects of existing processes will still have the policies existing at the time the memory
object was created.
Values:
* Default: 2 (Striped)
* Range: 1..2
* Type: Dynamic
Diagnosis:
N/A
Tuning
N/A
memplace_shm_anon
Purpose:
This parameter is used to specify the default memory placement policy for anonymous shared memory. Anonymous shared memory refers to
working storage memory, created using shmget() or mmap(), that can be accessed only by the creating process or its descendants. This
memory is not associated with a name (or key). Default placement of anonymous shared memory can be set to First Touch (1) or Striped
(2).
First Touch means that the memory is allocated in the affinity domain where it is first accessed. Striped means that the memory is
allocated in a round-robin fashion across the system affinity domains.
Changes only apply to new processes. Memory objects of existing processes will still have the policies existing at the time the memory
object was created.
Values:
* Default: 2 (Striped)
* Range: 1..2
* Type: Dynamic
Diagnosis:
N/A
Tuning
N/A
memplace_shm_named
Purpose:
This parameter is used to specify the default memory placement policy for named shared memory. Named shared memory refers to working
storage memory, created using shmget() or shm_open(), which is associated with a name (or key) that allows more than one process to
access it simultaneously. Default placement of named shared memory can be set to First Touch (1) or Striped (2).
First Touch means that the memory is allocated in the affinity domain where it is first accessed. Striped means that the memory is
allocated in a round-robin fashion across the system affinity domains.
Changes only apply to new processes. Memory objects of existing processes will still have the policies existing at the time the memory
object was created.
Values:
* Default: 2 (Striped)
* Range: 1..2
* Type: Dynamic
Diagnosis:
N/A
Tuning
N/A
memplace_stack
Purpose:
This parameter is used to specify the default memory placement policy for the program stack. Stack placement can be set to First Touch
(1) or Striped (2).
First Touch means that the memory is allocated in the affinity domain where it is first accessed. Striped means that the memory is
allocated in a round-robin fashion across the system affinity domains.
Changes only apply to new processes. Memory objects of existing processes will still have the policies existing at the time the memory
object was created.
Values:
* Default: 1 (First Touch)
* Range: 1..2
* Type: Dynamic
Diagnosis:
N/A
Tuning
N/A
memplace_text
Purpose:
This parameter is used to specify the default memory placement policy for application text. It applies only to text of the main
executable and not to its dependencies. Text placement can be set to First Touch (1) or Striped (2).
First Touch means that the memory is allocated in the affinity domain where it is first accessed. Striped means that the memory is
allocated in a round-robin fashion across the system affinity domains.
Changes only apply to new processes. Memory objects of existing processes will still have the policies existing at the time the memory
object was created.
Values:
* Default: 1 (First Touch)
* Range: 1..2
* Type: Dynamic
Diagnosis:
N/A
Tuning
N/A
memplace_unmapped_file
Purpose:
This parameter is used to specify the default memory placement policy for unmapped file access, such as through read() or write().
Default placement of unmapped file access can be set to First Touch (1) or Striped (2).
First Touch means that the memory is allocated in the affinity domain where it is first accessed. Striped means that the memory is
allocated in a round-robin fashion across the system affinity domains.
Changes only apply to new processes. Memory objects of existing processes will still have the policies existing at the time the memory
object was created.
Values:
* Default: 2 (Striped)
* Range: 1..2
* Type: Dynamic
Diagnosis:
N/A
Tuning
N/A
mempools
Purpose:
This parameter has been deprecated. The cpu_scale_memp parameter can be used instead to partially determine the number of mempools that
are used.
Values:
* Default: 1
* Range: N/A
* Type: Deprecated
Diagnosis:
N/A
Tuning
N/A
Refer To:
Memory pools.
minfree
Purpose:
Specifies the minimum number of frames on the free list at which the VMM starts to steal pages to replenish the free list.
Values:
* Default: 960
* Range: 8 to 204800
* Type: Dynamic
Diagnosis:
vmstat n
Tuning
Page replacement occurs when the number of free frames reaches minfree. If processes are being delayed by page stealing, increase
minfree to improve response time. The difference between minfree and maxfree should always be equal to or greater than maxpgahead.
Refer To:
Values for minfree and maxfree parameters.
minperm%
Purpose:
Specifies the point below (in percentage of total number of memory frames) which the page-stealer will steal file or computational pages
regardless of repaging rates.
Values:
* Default: 3 percent
* Range: 1 to 100.
* Type: Dynamic
Diagnosis:
Monitor disk I/O with iostat n.
Tuning
Can be useful to decrease this parameter if large number of file pages in memory is causing working storage pages to be replaced. If
some files are known to be read repetitively, and I/O rates do not decrease with time from startup, minperm may be too low.
Refer To:
Values for minperm and maxperm parameters.
nokilluid
Purpose:
User IDs lower than this value are exempt from getting killed due to low page-space conditions.
Values:
* Default: 0 (off)
* Range: Any positive integer.
* Type: Dynamic
Diagnosis:
N/A
Tuning
System out of paging space and system administrator's processes are getting killed. Set to 1 in order to protect specific user ID
processes from getting killed due to low page space or ensure there is sufficient paging space available.
Refer To:
Values for the npswarn and npskill parameters
npskill
Purpose:
Specifies the number of free paging-space pages at which the operating system begins killing processes.
Values:
* Default: MAX (64, number of paging space pages/128).
* Range: 0 to total number of paging space pages on the system .
* Type: Dynamic
Diagnosis:
N/A
Tuning
Increase the value if you experience processes being killed because of low paging space.
Refer To:
Values for the npswarn and npskill parameters
npsrpgmax
Purpose:
Specifies the number of free paging space blocks at which the Operating System stops freeing disk blocks on pagein of Deferred Page
Space Allocation Policy pages.
Values:
* Default: MAX(1024, npswarn*2).
* Range: 0 to total number of paging space blocks in the system.
Diagnosis:
N/A
Tuning:
N/A
npsrpgmin
Purpose:
Specifies the number of free paging space blocks at which the Operating System starts freeing disk blocks on pagein of Deferred Page
Space Allocation Policy pages.
Values:
* Default: MAX(768, npswarn+(npswarn/2)).
* Range: 0 to total number of paging space blocks in the system.
Diagnosis:
N/A
Tuning:
N/A
npsscrubmax
Purpose:
Specifies the number of free paging space blocks at which the Operating System stops Scrubbing in memory pages to free disk blocks from
Deferred Page Space Allocation Policy pages.
Values:
* Default: MAX(1024, npsrpgmax).
* Range: 0 to total number of paging space blocks in the system.
Diagnosis:
N/A
Tuning:
N/A
npsscrubmin
Purpose:
Specifies the number of free paging space blocks at which the Operating System starts Scrubbing in memory pages to free disk blocks from
Deferred Page Space Allocation Policy pages.
Values:
* Default: MAX(768, npsrpgmin).
* Range: 0 to total number of paging space blocks in the system.
Diagnosis:
N/A
Tuning:
N/A
npswarn
Purpose:
Specifies the number of free paging-space pages at which the operating system begins sending the SIGDANGER signal to processes.
Values:
* Default: MAX (512, 4*npskill)
* Range: 0 to total number of paging space pages on the system.
* Type: Dynamic
Diagnosis:
N/A
Tuning:
Increase the value if you experience processes being killed because of low paging space.
Refer To:
Values for the npswarn and npskill parameters
num_spec_dataseg
Purpose:
Reserve special data segment IDs for use by processes executed with the environment variable DATA_SEG_SPECIAL=Y. These data segments are
assigned so that the hardware page table entries for pages within these segments are better distributed in the cache to reduce cache
collisions. As many are reserved as possible up to the requested number. Running vmo -a after reboot displays the actual number
reserved. This parameter is only supported in 64-bit kernels running on POWER4 based machines.
Values:
* Default: 0
* Range: 0 or a positive number
* Type: Bosboot
Diagnosis:
N/A
Tuning
The correct number to reserve depends on the number of processes run simultaneously with DATA_SEG_SPECIAL=Y and the number of data
segments used by each of these processes.
page_steal_method
Purpose:
Selects virtual memory page replacement policies.
Values:
* Default: 1
* Range: 0 or 1. 0 applies to WLM and non-WLM page replacement. For 0, the pager scans pages by physical address. For 1, the pager
scans pages from lists by class (for WLM) or by mempool (for non-WLM).
* Type: Bosboot
pagecoloring
Purpose:
Turns on or off page coloring in the VMM. This parameter is not supported in 64-bit kernels.
Values:
* Default: 0 (off)
* Range: 0 or 1.
* Type: Bosboot
Diagnosis:
N/A
Tuning
This parameter is useful for some applications that run on machines that have a direct mapped cache.
pta_balance_threshold
Purpose:
Specifies the point at which a new pta segment will be allocated. This parameter does not exists in 64-bit kernels.
Values:
* Default: pta segment size * 0.5
* Range: 1 to 99.
* Type: Dynamic
Diagnosis:
System would crash from a dsi (abend code 300) with a stack similar to the following:
findsrval64()
shmforkws64()
shmforkws()
procdup()
kforkx()
kfork()
Dump investigation would show that the pta segment is full for the page which generated the page fault.
Tuning
Tuning the pta balancing threshold lower will cause new pta segments to be allocated earlier, thereby reducing the chance that a pta
segment will fill up and crash the system. If possible, a better solution would be to move to the 64-bit kernel which does not have this
potential problem.
relalias_percentage
Purpose:
If force_relalias_lite is set to 0, then this specifies the factor used in the heuristic to decide whether to avoid locking the source
mmapped segment or not.
Diagnosis:
N/A
Tuning:
This is used when tearing down an mmapped region and is a scalability statement, where avoiding the lock may help system throughput,
but, in some cases, at the cost of more compute time used. If the number of pages being unmapped is less than this value divided by 100
and multiplied by the total number of pages in memory in the source mmapped segment, then the source lock will be avoided. A value of 0
for relalias_percentage, with force_relalias_lite also set to 0, will cause the source segment lock to always be taken. The Default
value is 0. Effective values for relalias_percentage will vary by workload, however, a suggested value is: 200.
rpgclean
Purpose:
Enables or Disables freeing paging space disk blocks of Deferred Page Space Allocation Policy pages on read accesses to them.
Values:
* Default: 0, free paging space disk blocks only on pagein of pages that are being modified.
* Range: 1, free paging space disk blocks on pagein of a page being modified or accessed (read).
Diagnosis:
N/A
Tuning:
N/A
rpgcontrol
Purpose:
Enables or Disables freeing of paging space disk blocks at pagein of Deferred Page Space Allocation Policy pages.
Values:
* Default: 1, enables freeing of paging space disk blocks when the number of system free paging space blocks is below npsrpgmin,
and continues until above npsrpgmax.
* Range: 0-2,
0 disables freeing of paging space disk blocks on pagein.
2, always enables freeing of paging space disk blocks on pagein, regardless of thresholds.
Diagnosis:
N/A
scrub
Purpose:
Enables or Disables freeing of paging space disk blocks from pages in memory for Deferred Page Space Allocation Policy pages.
Values:
* Default: 0, disables scrubbing completely.
* Range: 0-1,
1 enables scrubbing of in memory paging space disk blocks when the number of system free paging space blocks is below
npsscrubmin, and continues until above npsscrubmax.
Diagnosis:
Tuning:
scrubclean
Purpose:
Enables or Disables freeing paging space disk blocks of Deferred Page Space Allocation Policy pages in memory that are not modified.
Values:
* Default: 0,
Free paging space disk blocks only for modified pages in memory.
* Range: 0-1,
1, Free paging space disk blocks for modified or unmodified pages.
Diagnosis:
Tuning:
soft_min_lgpgs_vmpool
Purpose:
When soft_min_lgpgs_vmpool is non-zero, large pages will not be allocated from a vmpool that has fewer than soft_min_lgpgs_vmpool % of
its large pages free. If all vmpools have less than soft_min_lgpgs_vmpool % of their large pages free, allocations will occur as normal.
Values:
* Default: 0
* Range: range: 0 to 90
* Type: Dynamic
Diagnosis:
N/A
spec_dataseg_int
Purpose:
Modify the interval between the special data segment IDs reserved with num_spec_dataseg. This parameter is only supported in 64-bit
kernels running on POWER4 based machines.
Values:
* Default: 512
* Range: 1 to any positive integer
* Type: Bosboot
Diagnosis:
N/A
Tuning
Generally, for processes executed with DATA_SEG_SPECIAL=Y, the more pages of the data segment they all access, the higher this value
should be to optimize performance. Values that are too high, however, limit the number of special segment IDs that can be reserved. The
performance impact is highly dependent on the hardware architecture as well as the application behavior and different values may be
optimal for different architectures and different applications.
strict_maxclient
Purpose:
If set to 1, the maxclient value will be a hard limit on how much of RAM can be used as a client file cache.
Values:
* Default: 1 (on)
* Range: 0 or 1.
Diagnosis:
N/A
Tuning:
Set to 0 in order to make the maxclient value a soft limit if client pages are being paged out when there are sufficient free pages. Use
in conjunction with the tuning of the maxperm and maxclient parameters.
vmm_mpsize_support
Purpose:
Toggles AIX 64-bit kernel multiple page size support for the extra page sizes provided by POWER5+ and later machines. This has no effect
on previous support of 4K or large size pages, and on machines with processors that do not support extra page sizes.
Values:
* Default: 1
AIX takes advantage of the extra page sizes supported by the processor.
* Range: 0 or 1
When set to 0,AIX only recognize are 4K page size and the system's large page size.
strict_maxperm
Purpose:
If set to 1, the maxperm value will be a hard limit on how much of RAM can be used as a persistent file cache.
Values:
* Default: 0 (off)
* Range: 0 or 1.
* Type: Dynamic
Diagnosis:
Excessive page outs to page space caused by too many file pages in RAM.
Tuning
Set to 1 in order to make the maxperm value a hard limit (use in conjunction with the tuning of the maxperm parameter).
Refer To:
Persistent file cache limit with the strict_maxperm option.
v_pinshm
Purpose:
If set to 1, will allow pinning of shared memory segments.
Values:
* Default: 0 (off)
* Range: 0 or 1.
* Type: Dynamic
Diagnosis:
Change when there is too much overhead in pinning or unpinning of AIO buffers from shared memory segments.
Tuning
Useful only if application also sets SHM_PIN flag when doing a shmget call and if doing async I/O from shared memory segments.
Refer To:
Pinned shared memory for database.
vm_modlist_threshold
Purpose:
Determines whether to keep track of dirty file pages.
Values:
* Default: -1
* Range: -2 to any positive integer
* Type: Dynamic
Diagnosis:
N/A
Tuning:
Special values:
-2: Never keep track of modified pages. This provides the same behavior as on a system prior to AIX 5.3
-1: Keep track of all modified pages.
Other values:
>= 0: Keep track of all dirty pages in a file if the number of frames in memory at full sync time is greater than or equal to
vm_modlist_threshold. This parameter can be modified at any time, changing the behavior of a running system. In general, a new value
will not be seen until the next full sync for the file. A full sync occurs when the VW_FULLSYNC flag is used or all pages in the file
(from 0 to maxvpn) are written to disk.
vmm_mpsize_support
Purpose:
Toggles AIX 64-bit kernel multiple page size support for the extra page sizes provided by POWER5+ and later machines. This has no effect
on previous support of 4K or large size pages, and on machines with processors that do not support extra page sizes.
Values:
* Default: 1
AIX takes advantage of the extra page sizes supported by the processor.
* Range: 0 or 1
When set to 0,AIX only recognize are 4K page size and the system's large page size.
wlm_page_steal_byclass
Purpose:
Selects Virtual Memory Page Replacement policy when the Workload Manager (WLM) is on. If set to 1, the WLM scans pages from lists by
Class. If set to 0, the Workload Manager scans pages by Physical Address.
Values:
* Default: 1
* Range: 0-1
* Type: Bosboot
Diagnosis:
N/A
Tuning:
N/A
Examples
1 To list the current and reboot value, range, unit, type and dependencies of all tunable parameters managed by the vmo command, type:
vmo -L
2 To turn on and reserve 16MB large pages on a POWER4 system, type:
vmo -r -o lgpg_regions=10 -o lgpg_size=16777216
This command will propose bosboot to the user, and warn that a reboot is necessary before the change will be effective. Note: The -r flag (and
subsequent reboot) is not necessary for AIX 5.3 and later releases.
3 To display help on nokilluid, type:
vmo -h nokilluid
4 To turn on v_pinshm after the next reboot, type:
vmo -r -o v_pinshm=1
5 To permanently reset all vmo tunable parameters to default, type:
vmo -p -D
6 To list the reboot value for all virtual Memory Manager tuning parameters, type:
vmo -r -a
7 To list (spreadsheet format) the current and reboot value, range, unit, type and dependencies of all tunable parameters managed by the vmo
command, type:
vmo -x
Related Information
The ioo command, schedo command, no command, nfso command, raso command, tunchange command, tunsave command, tunrestore command, tuncheck command,
and tundefault command.
Performance Overview of the Virtual Memory Manager (VMM) in Performance management
Kernel Tuning in AIX 5L Version 5.3 Performance Tools Guide and Reference.
AIX 5.2 compatibility mode in the Performance management.