my979899
作者my979899·2012-02-27 23:59
软件开发工程师·com

aix 内存管理

字数 19722阅读 1411评论 0赞 1
1. 虚拟内存

  虚拟内存是物理内存和交换空间(Paging Space)组合形成的虚拟内存空间,通过虚拟的地址空间映射到物理内存或者Paging Space。 在AIX中,虚拟内存段被分成4096字节大小的页,物理内存则被划分为4096字节大小的页帧(page frame)

1.1. 物理内存

  实际存在的物理内存条上的可供系统使用的缓存。

  物理内存大小的查看:

  • # prtconf | grep memory
  • # vmstat
  • # lsattr –El sys0 -a realmem

1.1.1. 永久段(Persistent segment)和工作段(Working segment)

  AIX区分不同的存储段类型。理解不同的存储段类型,特别是工作段和永久段的区别非常重要。

  • 永久段在磁盘上有一个永久的存储位置。含有不可编辑数据的文件或者只读的运行程序被映射到持久段,例如包含数据的文件,可执行文件。VMM 参数控制什么时候分配给永久段的RAM 页帧可以被重写,并且用于存储新的数据。
  • 工作段是临时性的,仅在它们被某个进程使用的时候存在,并且没有固定的磁盘位置。进程堆栈以及数据区共享库文本内核数据被映射到工作段。当工作段数据也不能存在于“实”存中的时候,他们被保存在磁盘上的页交换空间。程序退出执行,所有工作段占用的页面被返回。

  svmon -G 可以看到这两种内存类型

root@p550:/>svmon -G size inuse free pin virtual memory 3538944 3247625 291319 1160257 1716969 pg space 2097152 31144 work pers clnt pin 1156161 0 0 in use 1706168 0 1537361 PageSize PoolSize inuse pgsp pin virtual s 4 KB - 3243529 31144 1156161 1716969 L 16 MB 1 0 0 1 0

 

1.1.2. Computational(计算型)和 File(文件型)

  Computational 型内存包含 working-storage segments or program text (executable files) segments。也就是包括work(工作段)再加上persistent(永久段)中的可执行文件的部分。 File(文件型)是除去计算型的所有内存。Computational 型可以理解为读入可执行文件的地方,文件型可以理解为读入文件中的data 部分。 # topas

MEMORY Real,MB 12287

1.1.3. Client 类型

  Persistent段的内存进一步被分类,其中client 类型的内存被用于 map remote files(例如通过NFS访问的文件).。Enhanced JFS file system(JFS2)使用clients page来缓存cache。

1.2. Paging Space

  Paging space 是系统的一个物理存储空间, 占用一定的磁盘空间, 可以是logical volume 或者文件的形式。Paging space 是系统的一个物理存储空间, 占用一定的磁盘空间, 可以是logical volume或者文件的形式。

  查看当前paging space的命令:

root@p550:/>lsps -a Page Space Physical Volume Volume Group Size %Used Active Auto Type hd6 hdisk0 rootvg 8192MB 2 yes yes lv

 

1.3. Page Fault

  查看5秒内调页错误

root@p550:/>sar -r 5 AIX p550 3 5 00CFF44E4C00 12/11/10 System configuration: lcpu=8 mem=13824MB mode=Capped 20:28:59 slots cycle/s fault/s odio/s 20:29:04 2066008 0.00 821.23 20.63

 

1.4. Page In&Page Out

  The number of pages paged in from paging space, and The number (rate) of pages paged out to paging space.

  vmstat查看 :

root@p550:/>vmstat System configuration: lcpu=8 mem=13824MB kthr memory page faults cpu ----- ----------- ------------------------ ------------ ----------- r b avm fre re pi po fr sr cy in sy cs us sy id wa 2 1 1716280 291154 0 0 0 47 368 0 171 19244 6660 5 12 80 3

 

  注:如果持续看到 po 但是没有看到 pi 的增长,并不一定代表出现了 Thrashing, 比如系统正在读取大量的 persistent pages会导致看到大量的 page out, 这时候需要查看一下应用的类型。被 page out 出去的数据,如果有进程需要再次 reference 的时候,将产生 page fault,然后通过 page in 再次写入到内存。

++Thrashing(颠簸)  表示系统连续地paging in和out, 经常是系统缺乏内存的现象。

++Repage

Page fault可以是一个新的page fault,也可以是一个repage fault。出现 new page fault是指第一次调用,最近没有相关的记录。出现 repage fault 是指当刚刚调用过但是已经被替换出去了(很可能写回磁盘了),再次调用。发生一次page fault 是正常的,但应该避免发生多次的page fault,AIX在这里是做了一种统计,分别统计计算型和非计算型内存发生 repage 的数量,我们可以用 vmo 去调整这两种内存的page 的机制。

 

2. Paging Space的管理机制

  在AIX 4.3.2 及以后版本中,操作系统提供了3种 Paging Space的管理机制。 分别为:

  • Early Page Space Allocation (EPSA)
  • Late Page Space Allocation (LPSA)
  • Deferred Page Space Allocation (DPSA)

2.1. Early Page Space Allocation

  在 AIX 系统中,当 Paging Space 的使用率达到一定百分比时,系统就无法将需要 page out 的页面写到Paging Space中,这时候,该进程就很可能被杀掉。为了避免这种情况的发生,EPSA 机制会保证当进程被启动时,在Paging Space中先申请一块页面空间,该空间大小与该进程所需要占用的实际内存的大小一致(将环境变量 PSALLOC设为early,也就是“export PSALLOC=early”)。这样就保证当进程使用 malloc()调用的同时,在Paging Space中有相应的空间保留给该进程,从而保证该进程的 page out 操作。这种机制虽然可以保证现有的进程安全,但由于很多被保留的页面空间并没有被用到,造成了非常大的空间浪费。同时,也需要Paging Space的大小比实际内存值要大很多。

2.2. Late Page Space Allocation

  在 AIX 4.2.1 之后, 4.3.2之前,操作系统默认使用 LPSA 机制。这种机制是指当进程启动后,系统并不在Paging Space中为该进程保留相应的页面。只有当该进程的实际内存页面被修改过后,才会在Paging Space中为这些被修改过的页面申请空间。这种机制在一定程度上减少了Paging Space的空间浪费,但是对系统也存在一定的风险。比如,当一些后起的进程用了几乎全部的Paging Space 后,由于先起的进程并没有保留足够的Paging Space空间用于进程的page out操作,会导致该进程被杀掉。

2.3. Deferred Page Space Allocation

  在AIX4.3.2 之后,DPSA是系统默认的 Paging Space的管理机制。在这种机制下,系统不会为进程保留任何的 page 页面,直到系统确认确实需要将内存中的页面 page out 到Paging Space中,才会把Paging Space的页面分配给该进程。这种机制不会造成Paging Space的空间浪费,但和LPSA 一样,这种机制也给系统带来了相同的风险。

  DPSA是 AIX4.3.2 及以后版本中所使用的默认机制,它通常适用于配有很大容量RAM 的系统,因为它可以减少很多Paging Space资源的浪费。 对于RAM容量不是很大(比如小于2GB)的系统,用户可以采用LPSA或EPSA机制。用“/usr/samples/kernel/vmtune -d 0” 命令可以停止使用 DPSA,而使用 LPSA。用 “/usr/samples/kernel/vmtune -d 0” 命令加上“export PSALLOC=early”命令可以停止使用DPSA,而使用 EPSA。 用 “/usr/samples/kernel/vmtune -d 1” 命令可以激活DPSA。

2.4. Paging Space的页面释放

  在AIX操作系统中,当内存中的页面被page 到了Paging Space中以后,那么这一块 Paging Space 的页面空间将被保留给该内存页面,即使该页面已经被写回到内存中。因此,用lsps 命令看到的Paging Space的使用率可能并不能真实反映真正位于 Paging Space 中的页面数,因为有些页面可能已经写回到了内存中。 如果写回到内存中的页面是线程的工作存储页面(Working Storage),那么随着该线程的退出或者是相关的内存被释放 -- free(),Paging Space中的相应页面块也才会被释放。

2.5. 查看当前Paging space机制 #vmo -a|grep defps defps=1

注:defps=1 表示采用的是 DPSA,如果 defps=0 表示采用的是 LPSA。

  • 修改 paging space 的机制,采用 LPSA #vmo -o defps=0

     

  • 查看defps 属性 #vmo -L defps NAME CUR DEF BOOT MIN MAX UNIT TYPE DEPENDENCIES -------------------------------------------------------------------------------- defps 1 1 1 0 1 boolean D --------------------------------------------------------------------------------

     

    当前值是 1,缺省值是 1,启动时的值是 1, 取值范围是 0-1,类型是动态可以修改的。

     

    ++Paging-space thresholds tuning++   如果 paging space 少到一定的空间,操作系统将会通过先告警进程释放 paging space,最后可能会kill进程。相关的两个参数npswarn和npskill: # vmo -a |grep npswarn npswarn = 4096 默认值:max(512,4 × npskill)

     

    # vmo -h npswarn Help for tunable npswarn: Specifies the number of free paging-space pages at which the operating system begins sending the SIGDANGER signal to processes. Default: MAX (512,4*npskill). The value of npswarn must be greater than zero and less than the total number of paging space pages on the system. Increase the value if you experience processes being killed because of low paging space. # vmo -a |grep npskill npskill = 16384 默认值:max (64, paging space总页数 /128)

     

    # vmo -h npskill Help for tunable npskill: Specifies the number of free paging-space pages at which the operating system begins killing processes. Default: MAX (64,number_of_paging_space_pages/128). The npskill value must be greater than zero and less than the total number of paging space pages on the system.

     

    ++Paging space garbage collection++   AIX 5.3 之后可以利用 paging space garbage collection机制来free up paging space。只作用于deferred page space allocation policy。
  • 方法一:re-pagein 后的垃圾收集   一个页面从交换空间调回到内存之后,释放磁盘数据块。 相关参数:
npsrpgmin: 停止re-pagein垃圾收集的free paging space blocks数目 npsrpgmax: 开始re-pagein垃圾收集的free paging space blocks数目

 

  • 方法二:scrubbing memory   另一种方法是,psgc 内核进程实现清理内存。psgc 内核进程释放那些已修改且不会再调出内存页或者没有修改过在交换空间的数据块。 相关的参数:
npsscrubmin:停止scrubbing 内存的free paging space blocks数目 npsscrubmax:开始scrubbing 内存的free paging space blocks数目

 

root@p550:/>vmo -a |grep nps npskill = 16384 npsrpgmax = 131072 npsrpgmin = 98304 npsscrubmax = 131072 npsscrubmin = 98304 npswarn = 65536

 

2.6. Paging Space的创建原则

  AIX中Paging Space大小确定的指导原则如下(理论上):

  • 系统实际内存小于64MB, paging space= 2 * RAM ;
  • 系统实际内存在 64MB to 256MB 之间, Page Space = RAM size + 16MB ;
  • 系统实际内存大于 256MB , Page Space = 512 + ( RAM - 256 ) * 1.25 ;
  • 当内存超过4GB时,则需要根据实际情况来定,一般可初始3GB, 然后观察paging space的使用情况,如果使用率超过70%, 则需要增加paging space 。

  此外在创建Paging Space时还应遵循以下原则以提高性能:

  • 创建的数量应尽可能的多;
  • 每个Paging Space的大小应该相同;
  • 每个Paging Space应尽可能的分配在不同的硬盘上。

  工程和维护建议(目前内存和硬盘都比较大,相对比较实用些):

  如果硬盘空间不是问题的话,建议可以是内存的两倍。如果内存大于 8G 或者 16G,可以考虑先和内存空间相同。同时用两块不同的内置盘各分配一半的paging space空间。 对于做了根盘镜像的系统,建议可以不作镜像paging space(维护时注意这些特点)。 大的swap空间可以避免 DPSA 可能产生的风险,对运维来说,可能可以减少相关的维护分析工作。

3. 虚拟内存管理器VMM

3.1. VMM简介

  AIX(R) 虚拟内存管理器 (AIX VMM) 是一种基于分页的虚拟内存管理器。一个分页就是一个固定大小的数据块。分页既可以位于内存中(也就是说,映射到物理内存中的某个位置)、也可以位于磁盘中(也就是说,从物理内存中替换到分页空间或者文件系统)。

  AIX VMM 有一个非常独特的方面,即缓存的文件数据的管理。AIX VMM将缓存的文件数据与对其它类型虚拟内存(例如,进程数据、进程堆栈等等)的管理集成到了一起。它将文件数据缓存为分页,就如同进程的虚拟内存一样。

  AIX 根据需要将分页映射到实际内存。如果应用程序引用了某个分页,而该分页并没有映射到实际内存中,那么系统将产生一个缺页。为了解决缺页,AIX 内核会将所引用的分页加载到实际内存中的某个位置。如果所引用的分页是一个新的分页(也就是说,位于先前从未引用过的进程数据堆中的分页),那么“加载” 所引用的分页只需要用零来填充一个实际内存位置(也就是说,提供一个填满零的分页)。如果所引用的分页是一个预先存在的分页(也就是说,文件中的某个分 页、或者先前换出的某个分页),那么加载所引用的分页需要从磁盘(分页空间或者磁盘文件系统)中将该分页读入到实际内存中的某个位置。

  在将分页加载到实际内存中之后,它将被标记为未经修改的。如果某个进程或者内核修改了该分页,那么该分页的状态将更改为已修改的。这允许 AIX 跟踪在将某个分页加载到内存之后是否对其进行过修改。

  随着系统将更多的分页添加到实际内存中,实际内存中空闲位置(可以包含分页)的数目将会减少。也可以将空闲位置的数目称为空闲分页框架的数目。 当空闲分页框架的数目达到某个较低的值时,AIX 内核就必须清空实际内存中的某些位置,以便重用新的分页。这个过程也称为分页替换。

  AIX VMM 提供了一些后台守护进程,专门负责进行分页替换。其中一个分页替换守护进程称为 lrud(显示为 ps -k 的输出中的 lrud)。lrud 守护进程负责在内存分页中进行扫描,并回收某些分页以便为实际内存腾出空间。当分页替换守护进程确定它希望回收某个特定的分页时,这个分页替换守护进程将 执行下面两项操作中的一项:

  • 如果该分页经过了修改,那么分页替换守护进程将该分页写入到辅助存储位置(例如,分页空间或者文件系统磁盘)。将包含该分页的物理内存块标记为空闲,并为其它的分页做好重用的准备。
  • 如果该分页没有经过修改,那么分页替换守护进程可以简单地将物理内存块标记为空闲,这样一来,就可以将该物理内存块重用于另一个分页。在这种情况 下,分页替换守护进程不需要将该分页写入到磁盘,因为该分页在内存中的版本并没有经过修改,因此与位于磁盘中(在分页空间中、或者在磁盘文件系统中)的分 页副本完全相同。

  分页替换守护进程可以根据系统内存的使用情况和可调参数,选择不同类型的分页进行回收。

  简单地说:

  VMM 服务于来自系统以及应用程序的内存请求。虚拟地址空间划分成段。每段的大小是 256 MB,它是虚拟内存地址空间中一个邻接的部分,数据对象可映射到该空间。虚拟内存段以页为单位进行分区,每个页面大小为 4096 字节,可以存在于物理内存中或者存在于磁盘上的页交换空间。AIX 通过使用虚拟内存可以寻址比系统中物理内存更大的存储空间。

  虚拟地址空间划分成段。每段的大小是 256 MB,它是虚拟内存地址空间中一个邻接的部分,数据对象可映射到该空间。虚拟内存段划分成固定大小的单元叫做页。缺省页面大小是 4096 字节。段中的每页在需要之前可位于实际内存(RAM)中,或存储在磁盘上。同样,实际内存也可以划分成 4096 字节的页帧page frame。

3.2. VMM的目标
  • 最小化使用虚拟内存的总处理器时间和磁盘带宽代价
  • 最小化发生page fault 的响应时间代价

  VMM 使用了一个页面替换算法来确定当前处于内存中的哪些虚拟内存页要将它们的page frames重新指定到空闲列表中。页面替换算法使用了几个机制:

  • 虚拟内存段分成persistent 持久段或 work工作段。
  • 虚拟内存段分成包含计算computational 内存或文件file内存。
  • 引起page fault 的虚拟内存页。
  • page fault分成new page fault 或repage faults。
  • 在每个虚拟内存段中维护一个repage faults率的统计信息。
  • 用户可调阈值影响页面替换算法的结果。

3.3. 空闲列表Free List

  VMM 主要有以下两个主要功能:

  • (1) 管理页帧的分配
  • (2) 解析对当前没有调入RAM 中的虚拟内存页的引用

  为了完成上述功能,VMM 维护一个可用帧列表,并且使用一个页面替换算法决定哪些当前在 RAM 中的虚拟内存页使用的页帧将被分配到可以可用帧列表。页面替换算法将考虑永久段(Persistent segment)和工作段(Working segment)的分配、页交换和VMM 阈值等因素。在绝大多数环境中,偶尔时候VMM 必须通过reasign由运行进程占有的一些页面帧来添加到空闲列表中。需要reasign页面帧的虚拟内存页由 VMM 的页面替换算法进行选择。VMM 阈值决定了重新指定的帧的数量。   查看空闲列表:

root@p550:/>vmstat System configuration: lcpu=8 mem=13824MB kthr memory page faults cpu ----- ----------- ------------------------ ------------ ----------- r b avm fre} re pi po fr sr cy in sy cs us sy id wa 2 1 1716767 290134 0 0 0 47 368 0 171 19241 6661 5 12 80 3

 

3.4. 页面替换(Page replacement)

  当空闲列表中可用的实际内存帧数量减少时就会调用一个页面替换器(stealer)。页面替换器在整个页面帧表(PFT)中移动,寻找可替换(steal)的页面。

  PFT中包含一些标志用来表示哪些页已经被引用,哪些页已经被修改。如果页面替换器遇到一个已经引用的页,它不会替换这个页而是为该页重新设置 引用标志。在下一个时钟(页面替换器)经过该页且引用位仍未启用时,它便被替换。初次通过时未被引用的页面会立即得到替换。修改标志表示该页进入内存后面 的数据已经改变。当页面要被替换时,如果设置了修改标志,那么在替换该页之前进行页面调出调用。属于工作段的页面写入调页空间;而持久段中的页面写到磁盘 上。

  如图所示:

 

 

  上图中: 第一个表是具有四列的页面帧表,它包含实际地址、段类型、引用标志和修改标志。第二个表叫做空闲列表,它包含所有空闲页的地址。最后一个表代表除去所有空闲地址后最终得到的页面帧表。

  除了页面替换以外,算法还可通过使用一个包含最近缺页故障标识的历史缓冲区来跟踪新页故障(第一次引用)和重新调页故障(引用已经调出的页)。然后它可以尽量平衡文件(持久数据)页面的调出和计算(工作存储器或程序文本)页面的调出。

  当进程退出时,它的工作存储器立刻释放并且它的关联内存帧也放回到空闲列表中。然而由该进程打开的任何文件可保留在内存中。

  如果线程在单处理器上运行,那么页面替换可直接在线程作用域中进行。在多处理器系统中,页面替换通过内核进程 lrud 进行,在达到阈值 minfree 时,该进程被分派到 CPU 中。从 AIX 4.3.3 开始,内核进程 lrud 是多线程的,每个存储池中一个线程。根据 CPU 数量和 RAM 大小将实际内存划分成平均大小的存储池。系统中存储池的数量可通过运行命令 vmo -a 来确定。

#vmo -a |grep mempool mempool=3

 

3.5. 重新调页(Repaging)

  Page faults:

  • a) new page fault
  • b) repage fault

  如果没有最近引用页面的记录的话,会出现一个 new page fault。而出现repage faults 是指一个知道其最近已经引用的页再次被引用,但由于该页在上次访问后已经被替换(可能写到磁盘上)而在内存中找不到它。

  理想的页面替换策略通过总是替换那些不会再次引用的页面帧而完全减少repage faults(假设有足够的实际内存)。因而repage faults数是页面替换算法有效性的一个相反评测标准,算法将频繁被重用的页面保存在内存中,从而降低了总体 I/O 需求并潜在地改善了系统性能。

  为了分清一个缺页故障是新页故障还是重新调页故障,VMM 维护一个重新调页历史记录缓冲区,它包含N个最近缺页故障的页面标识,其中 N 是内存可保留的帧数。例如,512 MB 内存需要一个128 KB 的repage faults历史记录缓冲区。在页面调进时,如果它的标识可在重新调页历史记录缓冲区中找到,则将它计为一个重新调页。VMM 还可以分别评估计算内存重新调页率和文件内存重新调页率,只需为每种类型的内存维护repage faults计数即可。每次页面替换算法运行时都将重新调页率乘以 0.9,这样可比历史重新调页活动更有力地反映最近的重新调页活动。

4. 参数调整,只为内存调优

4.1. minfree和maxfree
  • 1) minfree
空闲列表中可接受的实际内存页面帧的最小数量。当空闲列表的大小低于这个数时,VMM 开始替换页面。它将一直替换页面直到空闲列表的大小达到maxfree。
  • 2) maxfree
当free list的大小超过 maxfree 的时候,VMM 的page stealing将停止。当进程终止并释放它们的工作段页面或删除其页面在内存中的文件时,结果是空闲列表的大小可能会超过这个数。

 

  注:从 AIX 5.3 开始, minfree 参数的缺省值增加到每个内存缓冲池 960 ,maxfree 参数的缺省值增加到每个内存缓冲池 1088。

minfree = max(960,逻辑 cpu数 * 120)/(memory pools 数量) maxfree = minfree + (逻辑cpu数* maximum read ahead) /(memory pools 数量)

  Where,

  • 1. 查看cpu个数: bindprocessor -q (count number of available processors)

     

  • 2. memory pools 数量: vmstat -v(note: If the number is 0 use 1 as a default) Maximum read ahead is the greater of maxpgahead or j2_maxPageReadAhead from ioo -a

4.2. minperm、maxperm

  minperm 和 maxperm 是两个最基本的分页替换可调参数。这两个可调参数用于指出 AIX 内核应该使用多少内存来缓存非计算性的分页。maxperm 可调参数指出应该用于缓存非计算性分页的最大内存量。

  在缺省情况下,maxperm 是一个“非严格的”限制,这意味着在某些情况下可以超出这个限制。将 maxperm 设定为非严格的限制,这允许在具有可用空闲内存的时候,可以在内存中缓存更多的非计算性文件。通过将 strict_maxperm 可调参数设置为 1,就可以使 maxperm 限制成为“严格”的限制。当 maxperm 是严格限制的时候,即使有可供使用的空闲内存,内核也不允许非计算性分页的数目超出 maxperm 的限制。因此,将 maxperm 作为严格限制的缺点是,非计算性分页的数目不能超出 maxperm 的限制,并且在系统中具有空闲内存的时候,也不能使用更多的内存。minperm 限制指出应该用于非计算性分页的最低内存量。

  非计算性分页的数目称为 numperm:vmstat -v 命令可以显示系统的 numperm 值所占系统实际内存的百分比。 下面的给出了有关这些可调参数在不同的系统条件下如何进行工作的概况:

  当非计算性分页的数目numperm≥ maxperm 的时候,AIX 分页替换守护进程严格地选择非计算性分页(例如,缓存的非可执行文件)进行操作。

  当非计算性分页的数目numperm≤ minperm 的时候,AIX 分页替换守护进程将选择计算性分页和非计算性分页进行操作。在这种情况下,AIX 将扫描两类分页,并且回收近来较少使用的分页。

  当非计算性分页的数目(numperm)在 minperm 和 maxperm 之间的时候,lru_file_repage 可调参数将控制 AIX 分页替换守护进程替换的分页类型:

  当 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 内核始终选择非计算性的分页进行操作。

minperm建议值:5% maxperm建议值:20%

 

4.3. maxclient

  除了 minperm 和 maxperm 可调参数之外,还有一个 maxclient 可调参数。maxclient 可调参数指定应该用于缓存非计算性客户端分页的最大内存量的限制。因为所有非计算性客户端分页是非计算性永久存储分页总数的子集,所以maxclient 限制必须始终小于或者等于 maxperm 限制。

  非计算性客户端分页的数目称为 numclient。vmstat -v 命令可以显示系统的 numclient 值占系统实际内存的百分比。

  在缺省情况下,maxclient 限制是严格的限制。这意味着,AIX 内核不允许非计算性的客户端文件缓存超出 maxclient 限制的范围(也就是说,AIX 内核不允许 numclient 超出 maxclient)。当 numclient 达到 maxclient 限制时,AIX内核将采用特殊的、仅客户端的模式开始分页替换。在这种仅客户端的模式中,AIX 分页替换守护进程将严格地选择客户端分页进行操作。

maxclient<maxperm

 

5. 监视系统的内存使用情况

5.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 containingnon-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个是客户端分页。

5.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

 

  要了解系统实际内存的使用情况,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

 

5.3. 具有最佳性能的可调参数 lru_file_repage = 0 maxperm = 90% maxclient = 90% minperm = 3% strict_maxclient = 1 (default) strict_maxperm = 0 (default)

5.4. vmo

  查看内核参数的含义:

-L [Tunable] For example: root@p550:/>vmo -L minperm% NAME CUR DEF BOOT MIN MAX UNIT TYPE DEPENDENCIES -------------------------------------------------------------------------------- minperm% 5 20 5 1 100 % memory D maxperm% maxclient% --------------------------------------------------------------------------------

  修改参数   为了让os 重新启动也成效,可以不自己用shell 脚本,直接加 -r 参数,这样都记录在 /etc/tunables/nextboot 中了

vmo -r -o minperm%=5 vmo -r -o maxclient%=20 vmo -r -o maxperm%=20

  另外说明,为了让内存限制成为 hard limit,可以设置

vmo -r -o strict_maxperm=1

 

5.5. ioo -a root@p550:/>ioo -a j2_atimeUpdateSymlink = 0 j2_dynamicBufferPreallocation = 16 j2_inodeCacheSize = 400 j2_maxPageReadAhead = 128 j2_maxRandomWrite = 0 j2_maxUsableMaxTransfer = 512 j2_metadataCacheSize = 400 j2_minPageReadAhead = 2 j2_nBufferPerPagerDevice = 512 j2_nPagesPerWriteBehindCluster = 32 j2_nRandomCluster = 0 j2_nonFatalCrashesSystem = 0 j2_syncModifiedMapped = 1 j2_syncdLogSyncInterval = 1 jfs_clread_enabled = 0 jfs_use_read_lock = 1 lvm_bufcnt = 9 maxpgahead = 8 maxrandwrt = 0 memory_frames = 3538944 minpgahead = 2 numclust = 1 numfsbufs = 196 pd_npages = 65536 pgahd_scale_thresh = 0 pv_min_pbuf = 512 sync_release_ilock = 0

  启用内存相似性:

vmo -o memory_affinity=1

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

相关文章

相关问题

相关资料

X社区推广