AIX®虚拟内存管理器(AIX VMM)是基于页面的虚拟内存管理器。 页面是固定大小的数据块。 页面可能驻留在内存中(即,映射到物理内存中的某个位置),或者页面可能驻留在磁盘上(即,从物理内存中分页到调页空间或文件系统中)。
AIX VMM的一个独特方面是对缓存文件数据的管理。 AIX VMM将缓存的文件数据与其他类型的虚拟内存(例如,进程数据,进程堆栈等)的管理集成在一起。 它将文件数据作为页面缓存,就像进程的虚拟内存一样。
AIX根据需求将页面映射到实际内存中。 当应用程序引用未映射到实际内存中的页面时,系统会生成页面错误。 为了解决页面错误,AIX内核将引用的页面加载到实际内存中的某个位置。 如果引用的页面是一个新页面(即该进程的数据堆中以前从未引用过的页面),则“加载”引用的页面仅意味着用零填充实际的内存位置(即提供一个零填充页面)。 如果引用的页面是预先存在的页面(即文件中的页面或先前分页的页面),则加载引用的页面涉及从磁盘(分页空间或磁盘文件系统)中读取该页面到某个位置。真实的记忆。
将页面加载到实际内存后,会将其标记为未修改。 如果进程或内核修改了页面,则页面的状态将更改为Modifyed。 这使AIX可以跟踪页面加载到内存后是否已被修改。
随着系统将更多页面添加到实存储器中,可以包含页面的实存储器中的空位置数将减少。 您还可以将空白位置的数量称为可用页面框架的数量。 当可用页面帧的数量达到较低值时,AIX内核必须清空实内存中的某些位置,以便重新使用新页面。 此过程也称为页面替换。
AIX VMM具有后台守护程序,负责执行页面替换。 页面替换守护程序称为lrud
(在ps -k
的输出中显示为lrud
)。 lrud
守护程序负责扫描内存页面和逐出页面,以清空实际内存中的位置。 当页面替换守护程序确定要逐出特定页面时,页面替换守护程序将执行以下两项操作之一:
- 如果修改了页面,则页面替换守护程序会将页面写出到辅助存储位置(例如,调页空间或文件系统磁盘)。 包含该页面的物理内存块被标记为空闲,并且可以重新用于其他页面。
- 如果页面未修改,则页面替换守护程序可以简单地将物理内存块标记为空闲,然后可以将物理内存块重新用于另一个页面。 在这种情况下,页面替换守护程序不必将页面写出到磁盘上,因为页面的内存版本未修改,因此与驻留在磁盘上的页面副本(在分页空间中)相同或在磁盘文件系统上)。
页面替换守护程序根据系统内存使用情况和可调参数,针对不同类型的页面逐出。 本文的其余部分提供有关页面替换守护程序如何将页面逐出的详细信息。
页面类型
从根本上讲,AIX上有两种类型的页面:
- 工作存储页面
- 永久存储页面
工作储存
工作存储页面是包含易失性数据(换句话说,在重新启动后未保留的数据)的页面。 在其他平台上,工作存储内存有时称为匿名内存。 包含工作存储页面的虚拟内存区域的示例是:
- 处理数据
- 叠放
- 共享内存
- 内核数据
当需要将修改后的工作存储页面调出页面(从内存移至磁盘)时,会将它们写入调页空间。 工作存储页面永远不会写入文件系统。
当进程退出时,系统释放其所有私有工作存储页面。 因此,系统在进程退出时释放进程数据和堆栈的工作存储页面。 在删除共享存储区域之前,不会释放共享存储区域的工作存储页面。
永久储存
永久存储页面是包含永久数据(即在重新启动后保留的数据)的页面。 此永久数据仅是文件数据。 因此,永久性存储页面基本上只是缓存在内存中的文件片段。
当需要将修改后的永久性存储页面调出页面(从内存移至磁盘)时,会将其写入文件系统。 如前所述,未经修改的永久性存储页面无需写入文件系统即可被释放,因为文件系统包含数据的原始副本。
例如,如果应用程序正在读取文件,则文件数据将缓存在永久存储页面的内存中。 这些永久性存储页面未修改,这意味着这些页面尚未在内存中被修改。 因此,内存中的永久存储页面等同于磁盘上的文件数据。 当AIX需要释放内存时,它可以“释放”这些页面,而不必向磁盘写入任何内容。 如果应用程序一直在写文件而不是读文件,则将“修改”永久存储页面,并且AIX必须在释放页面之前将页面刷新到磁盘。
您可以将永久性存储页面分为两个子类型:
- 客户页面
- 非客户页面
非客户端页面是包含缓存的日记文件系统(JFS)文件数据的页面。 非客户端页面有时称为持久页面。 客户端页面是包含所有其他文件系统(例如,JFS2和网络文件系统(NFS))的缓存数据的页面。
页面分类
为了帮助优化由页面替换守护程序选择要替换的页面,AIX将页面分为以下两种类型之一:
- 计算页面
- 非计算页面
计算页面是用于进程的文本,数据,堆栈和共享内存的页面。 非计算页面是包含正在读取和写入的文件的文件数据的页面。
页面如何分类
所有工作存储页面都是计算性的。 工作中的存储页面永远不会被标记为非计算页面。
根据您使用永久存储页面的方式,这些页面可以是计算的或非计算的。 如果文件包含某个进程的可执行文本,则系统会将文件视为计算文件,并将文件中的所有永久存储页面标记为计算文件。 如果文件不包含可执行文本,则系统会将文件视为非计算文件,并将文件中的所有页面标记为非计算文件。
首次打开文件时,AIX内核会创建一个内部VMM对象来表示该文件。 它将其标记为非计算性的,这意味着所有文件一开始都是非计算性的。
当程序确实读写文件时,AIX内核将文件的数据作为非计算的永久性存储页面缓存在内存中。
如果关闭了文件,那么AIX内核将继续在内存(永久存储页面)中缓存文件数据。 内核继续缓存文件以提高性能。 例如,如果稍后出现另一个进程并使用相同的文件,则文件数据仍在内存中,并且AIX内核不必从磁盘读取文件数据。
当由于指令提取而在文件上发生页面错误时,只有非计算文件会转换为计算状态。 当某个文件的某个进程页面出现故障时(意味着该进程引用了当前未缓存在永久性存储页面的内存中的文件的一部分),该进程将生成一个页面错误。 如果页面错误是由于指令获取引起的(意味着进程试图从页面加载指令以执行),则内核将文件标记为计算性的。 这涉及将文件中的所有页面标记为计算页面。 文件是完全计算的或非计算的。
将文件标记为可计算文件后,它将一直标记为计算文件,直到该文件被删除(或重新引导系统)。 因此,即使在移动或重命名文件后,该文件仍标记为计算文件。
页面替换
AIX页面替换守护程序一次扫描一个页面的内存以查找要退出的页面,以释放内存。 页面替换守护程序必须仔细选择页面,以最大程度地减小页面调度对系统的性能影响,并且页面替换守护程序会根据可调参数设置和系统条件来针对不同类的页面。
您可以使用许多可调参数来控制AIX如何选择要替换的页面。
minperm
和maxperm
最基本的两个页面替换可调参数是minperm
和maxperm
。 这些可调参数用于指示AIX内核应使用多少内存来缓存非计算页面。 maxperm可调参数指示应该用于缓存非计算页面的最大内存量。
默认情况下, maxperm
是“无限制”限制,这意味着可以超过该限制。 将maxperm
为不受限制的限制,以便在有可用内存时将更多非计算文件缓存在内存中。 通过将strict_maxperm
可调参数设置为1,可以将maxperm
限制设置为“严格”限制。当maxperm
是严格限制时,即使没有可用内存,内核也不允许非计算页面数超过maxperm
可用。 因此,严格限制maxperm
的缺点是,当系统上有可用内存时,非计算页面的数量不能超过maxperm
并且不会消耗更多内存。
minperm
限制指示应用于非计算页面的目标最小内存量。
非计算页面的数量称为numperm
: vmstat –v
命令将系统的numperm
值显示为系统实际内存的百分比。
下面的图1概述了这些可调参数在不同系统条件下如何工作:
图1. minperm
和maxperm
限制

当非计算页面的数量( numperm
)大于或等于maxperm
,AIX页面替换守护程序严格地针对非计算页面(例如,不是可执行文件的缓存文件)。
当非计算页面的数量( numperm
)小于或等于minperm
,AIX页面替换守护程序将同时针对计算页面和非计算页面。 在这种情况下,AIX会同时扫描两类页面并逐出最近最少使用的页面。
当非计算页面的数量( numperm
)在minperm
和maxperm
之间时, lru_file_repage
可调参数控制AIX页面替换守护程序应窃取哪种页面(请参见图2 )。
lru_file_repage
图2. lru_file_repage可调参数
当numperm
在minperm
和maxperm
之间时,当lru_file_repage
可调参数设置为1时,AIX页面替换守护程序根据其内部重新分页表确定要定位的页面类型。
AIX内核维护一个重新分页表,以识别出被调出页面然后快速调回的页面。当内核调出页面然后调回页面时,通常表明对该页面有强烈的需求并且该页面应保留在内存中。 内核会保持指示,指示它重新分页计算页面的次数以及重新分页非计算页面的次数。 然后,AIX内核可以使用此信息来确定正在重分类哪个页面类别(从而表明哪个页面类别的需求更高)。 当lru_file_repage
可调参数设置为1时,AIX内核使用此重新分页信息来确定是仅针对非计算页面还是针对计算和非计算页面。 如果重新分页计算页面的速率高于非计算页面的速率,则AIX内核仅以非计算页面为目标(因为对计算页面的需求似乎更强)。 如果重新分页非计算页面的速率高于计算页面,则AIX内核将计算页面和非计算页面都作为目标。
在大多数客户环境中,最好只让内核始终以非计算页面为目标,因为分页计算页面(例如,流程的堆栈,数据等)通常在流程上的性能成本要比分页非计算性页面(即数据文件缓存)。 因此,可以将lru_file_repage
可调参数设置为0。在这种情况下,当numperm
在minperm
和maxperm
之间时,AIX内核始终将非计算页面numperm
目标。
maxclient
除了minperm
和maxperm
可调参数外,还有maxclient
可调参数。 maxclient
可调参数指定对用于缓存非计算客户端页面的最大内存量的限制。 由于所有非计算客户端页面都是非计算永久存储页面总数的子集,因此maxclient
限制必须始终小于或等于maxperm
限制。
非计算客户端页面的数量称为numclient
。 vmstat –v
命令将系统的numclient
值显示为系统实际内存的百分比。
默认情况下, maxclient
限制是严格限制。 这意味着AIX内核不允许非计算客户端文件高速缓存超出maxclient
限制(也就是说,AIX内核不允许numclient
超过maxclient
)。 当numclient
达到maxclient
限制时,AIX内核将以特殊的仅客户端模式启动页面替换。 在这种仅客户机方式下,AIX页面替换守护程序严格地以客户机页面为目标。
监视系统的内存使用情况
AIX提供了几种工具来提供有关系统上不同页面计数的信息。
vmstat
命令
vmstat
命令报告有关系统内存使用情况的信息以及有关VMM操作(如页面替换)的统计信息。
vmstat
命令指定的-v
选项显示用于不同页面分类的实际内存百分比(请参见清单1 ):
清单1. vmstat -v
命令
# 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
命令
可以用来显示有关系统内存使用情况的信息的另一个命令是svmon
命令。 svmon
命令支持许多不同的选项,用于提供有关系统内存使用情况的非常详细的信息。
svmon
命令的-G
选项用于播放有关用于不同类型的页面的内存量的信息(请参见清单2 ):
清单2. svmon
命令的-G
选项
# 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
-persistent存储(永久性存储器页是非客户的网页,也就是说,JFS页。) -
clnt
存储
对于每种页面类型, svmon
显示两行:
-
inuse
的4K页面-值映射到内存 -
pin
的4K页-number映射到内存和被钉扎(销的一个子集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个客户机页面中有多少是非计算的。
显示和设置可调参数
vmo
命令用于与VMM可调参数交互。 vmo
命令可用于显示有关可调参数的信息以及设置可调参数的值。
要显示所有VMM可调参数的当前值,请运行带有–L
选项的vmo
命令:
# vmo -L
要显示所选VMM可调参数的当前值,请使用–L
选项列出可调参数的名称。 例如,以下命令快照显示列出minperm%
, maxperm%
, maxclient%
和lru_file_repage
可调参数的当前值时的输出(请参见清单3 ):
清单3.可调参数
# vmo -L minperm% -L maxperm% -L maxclient% -L lru_file_repage
NAME CUR DEF BOOT MIN MAX UNIT TYPE
DEPENDENCIES
--------------------------------------------------------------------------------
lru_file_repage 1 1 1 0 1 boolean D
--------------------------------------------------------------------------------
maxclient% 80 80 80 1 100 % memory D
maxperm%
minperm%
--------------------------------------------------------------------------------
maxperm% 80 80 80 1 100 % memory D
minperm%
maxclient%
--------------------------------------------------------------------------------
minperm% 20 20 20 1 100 % memory D
maxperm%
maxclient%
表1.可调参数:列描述
柱 | 描述 |
---|---|
UR | 此列列出了可调参数的当前值。 |
防御 | 此列列出了默认值。 |
开机 | 此列列出了引导系统时可调参数的值。 |
最低 | 此列列出了可调参数的最小值。 |
最大值 | 此列列出了可调参数的最大值。 |
单元 | 此列列出了指定可调参数的单位。 |
vmo
命令支持立即更改可调参数的值,或将更改可调参数的值推迟到重新引导系统之前。 要更改上述可调参数并使更改立即生效,并在所有后续重新引导中生效,请指定-p
选项。 这是一个示例(请参见清单4 ):
清单4. -p
选项
# vmo -p -o lru_file_repage=0 -o maxclient%=90 -o maxperm%=90 -o minperm%=3
Setting minperm% to 3 in nextboot file
Setting maxperm% to 90 in nextboot file
Setting maxclient% to 90 in nextboot file
Setting lru_file_repage to 0 in nextboot file
Setting minperm% to 3
Setting maxperm% to 90
Setting maxclient% to 90
Setting lru_file_repage to 0
建议的可调参数设置
绝大多数工作负载受益于针对非计算页面的VMM页面替换守护程序。 因此,以下建议的可调参数为大多数工作负载提供了最佳性能(请参见清单5 ):
清单5.具有最佳性能的可调参数
lru_file_repage = 0
maxperm = 90%
maxclient = 90%
minperm = 3%
strict_maxclient = 1 (default)
strict_maxperm = 0 (default)
可以使用vmo
命令设置这些可调参数(请参见清单6 ):
清单6.用vmo
命令设置的可调参数
# 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
可以使用vmo –L
命令查看设置。
这些可调参数设置适用于AIX版本5.2和AIX版本5.3。 要在AIX版本5.2上设置这些可调参数,需要AIX版本5.2 TL6或更高版本。 要在AIX版本5.3上设置上述可调参数,需要AIX版本5.3 TL1或更高版本。
上面的可调参数设置是AIX Version 6.1的缺省设置。
结论
AIX VMM根据使用情况对页面进行分类。 您可以使用系统可调参数来控制AIX页面替换守护程序的行为,并控制AIX如何处理不同类别的页面页面替换。 调整AIX VMM可以显着提高工作负载的性能。
翻译自: https://www.ibm.com/developerworks/aix/library/au-vmm/index.html