(1)lru_file_repage:
当 lru_file_repage 可调参数设置为 1 时,AIX 内核使用这个重新分页信息来确定是否仅选择非计算性的分页进行操作、或者选择计算性的和非计算性的分页进行操作。如果计算性分页的重新分页速度比非计算性分页的重新分页速度高,那么 AIX 内核将仅选择非计算性的分页进行操作(因为计算性分页的使用更为频繁)。如果非计算性分页的重新分页速度比计算性分页的重新分页速度高,那么 AIX 内核将选择计算性的分页和非计算性的分页进行操作。
在大多数的客户环境中,最理想的方式是始终让内核只选择非计算性的分页进行操作,因为与对非计算性的分页(即数据文件缓存)进行分页相比,对计算性的分页(例如,进程的堆栈、数据等等)进行分页通常会对进程产生更大的性能开销。因此,可以将 lru_file_repage 可调参数设置为 0。在这种情况下,当 numperm 在 minperm 和 maxperm 之间的时候,AIX 内核始终选择非计算性的分页进行操作。
因此一般的需要大量计算页的服务器(比如数据库服务器),有两种设置:
早先是lru_file_repage = 1(aix5的默认值),而maxperm设得尽量小,例如 maxperm%=20。
现在还有一种是设置 lru_file_repage = 0(aix6的默认值),而minperm% = 5, maxperm% = 90。
(2)maxperm 可调参数指出应该用于缓存非计算性分页的最大内存量。
在缺省情况下,maxperm 是一个“非严格的”限制,这意味着在某些情况下可以超出这个限制。将 maxperm 设定为非严格的限制,这允许在具有可用空闲内存的时候,可以在内存中缓存更多的非计算性文件。通过将 strict_maxperm 可调参数设置为 1,就可以使 maxperm 限制成为“严格”的限制。当 maxperm 是严格限制的时候,即使有可供使用的空闲内存,内核也不允许非计算性分页的数目超出 maxperm 的限制。因此,将 maxperm 作为严格限制的缺点是,非计算性分页的数目不能超出 maxperm 的限制,并且在系统中具有空闲内存的时候,也不能使用更多的内存。
(3)minperm 限制指出应该用于非计算性分页的最低内存量。
(4)numperm 非计算性分页的数目
(5)maxclient
指定应该用于缓存非计算性客户端分页的最大内存量的限制。因为所有非计算性客户端分页是非计算性永久存储分页总数的子集,所以 maxclient 限制必须始终小于或者等于 maxperm 限制。
在缺省情况下,maxclient 限制是严格的限制(vmo -p -o strict_maxclient=1)。这意味着,AIX 内核不允许非计算性的客户端文件缓存超出 maxclient 限制的范围(也就是说,AIX 内核不允许 numclient 超出 maxclient)。当 numclient 达到 maxclient 限制时,AIX 内核将采用特殊的、仅客户端的模式开始分页替换。在这种仅客户端的模式中,AIX 分页替换守护进程将严格地选择客户端分页进行操作。
(6)监视系统的内存使用情况
--非计算型内存:
# vmstat -v
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
0 remote pageouts scheduled
0 pending disk I/Os blocked with no pbuf
0 paging space I/Os blocked with no psbuf
2484 filesystem I/Os blocked with no fsbuf
0 client filesystem I/Os blocked with no fsbuf
0 external pager filesystem I/Os blocked with no fsbuf
0 Virtualized Partition Memory Page Faults
0.00 Time resolving virtualized partition memory page faults
因此,在上面的示例中,一共有 16529 个非计算性的文件分页被映射到了内存中。这些非计算性的分页使用了 2.2% 的内存。在这 16529 个非计算性的文件分页中,有 16503 个是客户端分页。
vmstat 输出没有提供关于计算性文件分页的信息。关于计算性文件分页的信息,可以使用 svmon 命令搜集得到。
# svmon -G
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
PageSize PoolSize inuse pgsp pin virtual
s 4 KB - 103966 1121 68929 82682
m 64 KB - 6609 0 4038 6609
svmon 显示了下面三列:
work——工作存储
pers——持久性存储(持久性存储分页都是非客户端分页,即 JFS 分页。)
clnt——客户端存储
对于每种分页类型,svmon 将显示下面两行:
inuse——映射到内存中的 4K 分页的数目
pin ——映射到内存中的、且固定的 4K 分页的数目(pin 是 inuse 的子集)
因此,在上面的示例中,一共有 188426 个工作存储分页映射到内存中。在这 188426 个工作存储分页中,有 133537 个是固定的(也就是说,不能换出的)。
示例中显示没有持久的存储分页(因为系统中没有使用 JFS 文件系统)。一共有 21284 个客户端存储分页,它们中没有一个是固定的。
svmon 命令没有显示永久存储分页的数目,但这个数目可以由 svmon 的输出计算得到。如前所述,永久存储分页的数目是持久性存储分页数目和客户端存储分页数目的总和。因此,在上面的示例中,系统中一共有 21284 个永久存储分页:
0 persistent storage pages + 21284 client storage pages = 21284 permanent storage pages
svmon 所报告的信息类型与 vmstat 有一点不同。svmon 报告不同类型内存分页的数目信息,包括工作的、持久的(即非客户端的)和客户端的。svmon 并没有提供计算性分页和非计算性分页的对比信息。svmon 只报告每种分页类型在内存中分页的总数。
与此相反,vmstat 可以提供非计算性分页和计算性分页的对比信息。
为了说明这个区别,可以考虑上面的 svmon 输出示例。这 21284 个客户端分页中的某些分页将是计算性的,而这 21284 个客户端分页中剩下的那些分页将是非计算性的。要确定这些客户端分页在计算性和非计算性之间的划分,可以使用 vmstat 命令来确定这 21284 个客户端分页中有多少分页是非计算性的。