Virtual-memory segments are partitioned in units called pages; each page
is either located in real physical memory (RAM) or stored on disk until
it is needed. AIX uses virtual memory to address more memory than is
physically available in the system. The management of memory pages in
RAM or on disk is handled by the VMM.
A page is a fixed-size block of data (usually 4096 byte). A page might
be resident in memory (that is, mapped into a location in physical
memory), or a page might be resident on a disk (that is, paged out of
physical memory into paging space or a file system).
The VMM maintains a free list of available page frames. The VMM also
uses a page-replacement algorithm to determine which virtual-memory
pages currently in RAM will have their page frames reassigned to the
free list.
AIX tries to use all of RAM all of the time, except for a small amount
which it maintains on the free list. To maintain this small amount of
unallocated pages the VMM uses page outs and page steals to free up
space and reassign those page frames to the free list.
overhead -- The load that AIX incurs while sharing resources
between user processes and performing its internal accounting.
page -- A fixed-size (4KB) block of memory.
page fault -- It occurs when a process tries to access an
address in virt mem. that does not have a location in physical memory.
In response, the system tries to load the appropriate data from the hard disk
page stealing daemon -- The daemon responsible for releasing pages of memory for use by other processes
(It makes room for incoming pages, by swapping
out mem. pages that are not the part of the working set of a process.)
paging in -- Reading pages from swap.
paging out -- Releasing pages of physical memory for use.
Kernel continuously checks to see if the number of pages on the free
list is below a threshold. If so the page stealing daemon, becomes
active and begins copying pages to the swap area, starting with least
recently used pages. Each page placed on the free list then becomes
available for use by other processes. Pages written out to swap must be
read back into physical memory when the process needs them again.
The AIX VMM integrates cached file data with the management of other
types of virtual memory (for example, process data, process stack, and
so forth). It caches the file data as pages, just like virtual memory
for processes.
(In most modern computer systems, each thread has a reserved region of memory referred to as its stack.)
------------------
Working Storage
Working storage pages are pages that contain volatile data (in other words, data that is not preserved across a reboot).
Examples of virtual memory regions that consist of working storage pages are:
- Process data
- Stack
- Shared memory
- Kernel data
When modified working storage pages need to be paged out (moved from
memory to the disk), they are written to paging space. Working storage
pages are never written to a file system.
When a process exits, the system releases all of its private working
storage pages. Thus, the system releases the working storage pages for
the data of a process and stack when the process exits.
Permanent Storage
Permanent storage pages are pages that contain permanent data (that is,
data that is preserved across a reboot). This permanent data is just
file data. So, permanent storage pages are basically just pieces of
files cached in memory.
When a modified permanent storage page needs to be paged out (moved from memory to disk), it is written to a file system.
You can divide permanent storage pages into two sub-types:
- Non-client pages (aka persistent pages): these are pages containing cached Journaled File System (JFS) file data
- Client pages: These are pages containing cached data for all other
file systems (for example, JFS2 and Network File System (NFS)
------------------
In order to help optimize which pages are selected for replacement by
the page replacement daemons, AIX classifies pages into one of two
types:
- Computational pages: pages used for the text, data, stack, and shared memory of a process
- Non-computational pages: pages containing file data for files that are being read and written.
All working storage pages are computational. A working storage page is never marked as non-computational.
Depending on how you use the permanent storage pages, the pages can be
computational or non-computational. If a file contains executable text
for a process, the system treats the file as computational and marks all
of the permanent storage pages in the file as computational. If the
file does not contain executable text, the system treats the file as
non-computational file and marks all of the pages in the file as
non-computational.
Once a file has been marked as computational, it remains marked as a
computational file until the file is deleted (or the system is
rebooted). Thus, a file remains marked as computational even after it is
moved or renamed.
------------------
Page replacement
The AIX page replacement daemons scan memory a page at a time to find
pages to evict in order to free up memory. The page replacement daemons
must choose pages carefully to minimize the performance impact of paging
on the system, and the page replacement daemons target pages of
different classes based on tunable parameter settings and system
conditions.
There are a number of tunable parameters that you can use to control how AIX selects pages to replace.
------------------
minperm and maxperm
The two most basic page replacement tunable parameters are minperm and
maxperm. These tunable parameters are used to indicate how much memory
the AIX kernel should use to cache non-computational pages. The maxperm
tunable parameter indicates the maximum amount of memory that should be
used to cache non-computational pages. The minperm limit indicates the
target minimum amount of memory that should be used for
non-computational pages.
By default, maxperm is an "un-strict" limit, so it allows more
non-computational files to be cached in memory when there is available
free memory. The maxperm limit can be made a "strict" limit by setting
the strict_maxperm tunable parameter to 1.
(The disadvantage of this is, that the number of non-computational pages
cannot grow beyond maxperm and consume more memory when there is free
memory on the system.)
numperm (lru_file_repage)
The number of non-computational pages is referred to as numperm: The
vmstat -v command displays the numperm value for a system as a
percentage of a system’s real memory.
When the number of non-computational pages (numperm) is greater than or
equal to maxperm, the AIX page replacement daemons strictly target
non-computational pages (for example, cached files that are not
executables).
When the number of non-computational pages (numperm) is less than or
equal to minperm, the AIX page replacement daemons target both
computational and non-computational pages. In this case, AIX scans both
classes of pages and evicts the least recently used pages.
When the number of non-computational pages (numperm) is between minperm
and maxperm, the lru_file_repage (least recently used) tunable parameter
controls what kind of pages the AIX page replacement daemons should
steal.
Thus, the lru_file_repage tunable parameter can be set to 0. In this
case, the AIX kernel always targets non-computational pages when numperm
is between minperm and maxperm.
In most customer environments, it is most optimal to just have the
kernel always target non-computational pages, because paging
computational pages (for example, a process’s stack, data, and so forth)
usually has a much higher performance cost on a process than paging
non-computational pages (that is, data file cache). Thus, the
lru_file_repage tunable parameter can be set to 0. In this case, the AIX
kernel always targets non-computational pages when numperm is between
minperm and maxperm
------
maxclient
The maxclient tunable parameter specifies a limit on the maximum amount
of memory that should be used to cache non-computational client pages.
Because all non-computational client pages are a subset of the total
number of non-computational permanent storage pages, the maxclient limit
must always be less than or equal to the maxperm limit.
numclient
The number of non-computational client pages is referred to as
numclient. The vmstat -v command displays the numclient value for a
system as a percentage of a system’s real memory.
By default, the maxclient limit is a strict limit. This means that the
AIX kernel does not allow the non-computational client file cache to
exceed the maxclient limit (that is, the AIX kernel does not allow
numclient to exceed maxclient). When numclient reaches the maxclient
limit, the AIX page replacement daemons strictly target client pages.
------
minfree, maxfree
Two other important parameters are minfree and maxfree. If the number of
pages on your free list (vmstat -v: free pages) falls below the minfree
parameter, VMM starts to steal pages (just to add to the free list),
which is not good. It continues to do this until the free list has at
least the number of pages in the maxfree parameter.
# vmstat -v <-- for non-computational file-cache
4980736 memory pages
739175 lruable pages
432957 free pages
1 memory pools
84650 pinned pages
80.0 maxpin percentage
20.0 minperm percentage <<- system’s minperm% setting
80.0 maxperm percentage <<- system’s maxperm% setting
2.2 numperm percentage <<- % of memory containing non-comp. pages
16529 file pages <<- # of non-comp. pages
0.0 compressed percentage
0 compressed pages
2.2 numclient percentage <<- % of memory containing non-comp. client pages
80.0 maxclient percentage <<- system’s maxclient% setting
16503 client pages <<- # of client pages
So, in the above example, there are 16529 non-computational file pages
mapped into memory. These non-computational pages consume 2.2 percent of
memory. Of these 16529 non-computational file pages, 16503 of them are
client pages.
The vmstat output does not provide information about computational file
pages. Information about computational file pages can be gathered from
the svmon command
# svmon -G <--in memory pages of each type (work, pers., client)
size inuse free pin virtual
memory 786432 209710 576722 133537 188426
pg space 131072 1121
work pers clnt
pin 133537 0 0
in use 188426 0 21284
- work: working storage
- pers: persistent storage (persistent storage pages are non-client pages - that is, JFS pages.)
- clnt: client storage
For each page type, svmon displays two rows:
- in use: number of 4K pages mapped into memory
- pin: number of 4K pages mapped into memory and pinned (pin is a subset of inuse)
So, in the above example, there are 188426 working storage pages mapped
into memory. Of those 188426 working storage pages, 133537 of them are
pinned (that is, can’t be paged out).
There are no persistent storage pages (because there are no JFS
filesystems in use on the system). There are 21284 client storage pages,
and none of them are pinned.
The svmon command does not display the number of permanent storage
pages, but it can be calculated from the svmon output. As mentioned
earlier, the number of permanent storage pages is the sum of the number
of persistent storage pages and the number of client storage pages. So,
in the above example, there are a total of 21284 permanent storage pages
on the system:
0 persistent storage pages + 21284 client storage pages = 21284 permanent storage pages
The type of information reported by svmon is slightly different than
vmstat. svmon reports information about the number of in-memory pages
of different types: working, persistent (that is, non-client), and
client. svmon does not report information about computational versus
non-computational. svmon just reports the total number of in-memory
pages of each page type.
In contrast, vmstat reports information about non-computational versus computational pages.
To illustrate this difference, consider the above example of svmon
output. Some of the 21284 client pages will be computational, and the
rest of the 21284 client pages will be non-computational. To determine
the breakdown of these client pages between computational and
non-computational, use the vmstat command to determine how many of the
21284 client pages are non-computational.
-----------
suggested:
lru_file_repage = 0
maxperm = 90%
maxclient = 90%
minperm = 3%
strict_maxclient = 1 (default)
strict_maxperm = 0 (default)
# vmo -p -o lru_file_repage=0 -o maxclient%=90 -o maxperm%=90 -o minperm%=3
# vmo -p -o strict_maxclient=1 -o strict_maxperm=0
The above tunable parameters settings are the default settings for AIX Version 6.1.
-----------------------------
minfree: Minimum acceptable number of real-memory page frames in the
free list. When the size of the free list falls below this number, the
VMM begins stealing pages. It continues stealing pages until the size of
the free list reaches maxfree.
-----------------------------
An example:
topas:
MEMORY
Real,MB 26623
% Comp 57 <--this is used for processes (OS+appl.), if
you add nmon Process+System, for me it was the same (46+11)
% Noncomp 22 <--fs cache
% Client 22 <--fs cache (for jfs2)
nmon:
FileSystemCache
(numperm) 22.5% <--this is for fs cache
Process 46.0% <--this is for appl. processes
System 11.3% <--this is for the OS
Free 20.2% <--free
-----
Total 100.0%
-----------------------------
Excerpts from a tuning docs:
Set vmo:lru_file_repage=0; default=1 # Mandatory critical change
This change directs lrud to steal only JFS/JFS2 file-buffer pages
unless/until numperm/numclient is less-than/equal-to vmo:minperm%, at
which point lrud begins stealing both JFS/JFS2 file-buffer pages and
computational memory pages.
Essentially stealing computational memory invokes pagingspace-pageouts.
I have found this change already made by most AIX 5.3 customers.
Set vmo:page_steal_method=1; default=0 # helpful, not critical
This change switches the lrud page-stealing algorithm from a physical
memory address page-scanning method (=0) to a List-based page-scanning
method (=1).
Set ioo:sync_release_ilock=1; default=0 # helpful, not critical
Default value =0 means that the i-node lock is held while all dirty
pages of a file are flushed; thus, I/O to a file is blocked when the
syncd daemon is running. Setting =1 will cause a sync() to flush all I/O
to a file without holding the i-node lock, and then use the i-node
lock to do the commit.
Execute vmstat -v and compare the following values/settings:
minperm should be 10, 5 or 3; default=20
maxperm should be 80 or higher; default=80 or 90
maxclient should be 80 or higher; default=80 or 90
numperm real-time percent of non-computational memory (includes client below)
numclient real-time percent of JFS2/NFS/vxfs filesystem buffer-cache
paging space page outs are triggered when numperm or numclient is less-than-or-equal-to minperm.
Typically numperm and numclient is greater than minperm, and as such, no paging space page outs can be triggered.
paging space page outs are triggered when numperm or numclient is
less-than-or-equal-to minperm. Typically numperm and numclient is
greater than minperm, and as such, no paging space page outs can be
triggered.
No comments:
Post a Comment