AIX采用了基于分页的虚拟内存机制。页面一般都是统一大小的(默认页面大小4k,当然也可以启用大页面内存支持,POWER5 芯片支持四种虚拟内存页面的大小:4KB64KB16MB16GB),这样可以简化整个的管理算法。页面是基于整个虚拟内存地址空间分割的,一个页面最终可能映射到物理内存,也可能映射到磁盘的交换区(paging space)上。很明显,内存中的页面访问速度要快得多,但是内存大小有限,某些页面将不得不被挤出内存。淘汰页面的算法一般都是基于LRU算法的,通过ps -k可以看到AIX有一个lrud的内核守护进程,就是AIX分页替换守护进程。

AIX将所有的内存页面分成两大类型:

  • 工作存储分页(Working storage pages)
  • 永久存储分页(Permanent storage pages)

工作存储分页的内容都是易失性的,在磁盘上没有对应的永久存储文件数据,诸如进程数据/堆栈/共享内存/内核数据等,都是这一类的。而永久存储分页其实就是文件数据。分成这两种类型,是因为从内存中淘汰页面时,需要做不同的处理。对于工作存储分页,只要释放掉对应的内存页面(其实就是修改某些标志位)就可以了。而永久存储分页,则需要判断是否有数据修改,没有修改的话,和工作存储分页的处理一样,直接标志回收即可,如果有修改,则需要将相应的修改数据写回磁盘。

而根据缓存的文件的不同,永久存储分页又分成两种,一种就是新的jfs2文件系统和NFS文件系统的文件缓存,叫做客户端分页(Client pages)。而原来老的jfs文件系统的文件缓存页面,就是非客户端页面(Non-client pages)

上面对于分页的分类法,是根据缓存的数据类型,需要在淘汰时选择不同的处理方式。而AIX在选择哪些页面需要淘汰的时候,却是按照另外一种标准的。根据这个标准,可以将所有分页分成另外两种类型:

  • 计算型分页(Computational pages)
  • 非计算型分页(Non-computational pages)

首先,所有的工作存储分页都是计算型分页,也就是说,Oracle的PGA/SGA等都是属于计算型分页的。而永久存储分页,则根据缓存的文件的类型,如果是可执行文件,则对应的分页是计算型的,如果是数据文件,则是非计算型的,同一个文件对应的页面,要么全部是计算型,要么全部是非计算型的。显然的,为了提供Oracle等应用的性能,假如需要淘汰页面,优先应当交换非计算型页面。

可以通过设置一些内核参数,来影响AIX对于页面的淘汰算法。这些参数都可以通过vmo命令进行调节(AIX5.2 TL6版本以上)。

minperm%(minperm)maxperm%(maxperm) 是最基本的两个参数,分别表示用于缓存非计算型页面的最小和最大内存比例(页数),但maxperm不是严格限制参数,在系统还有空闲内存的时候,非计算型内存的使用是可以突破maxperm的设置的。另外有个参数strict_maxperm可以指定是否严格限制(默认0表示不是严格限制),但是最好不要使用严格限制,在我们的测试中,可能导致os挂起。minperm和maxperm主要是影响淘汰算法:

  • 当非计算性分页的数目大于或者等于 maxperm 的时候,AIX 分页替换守护进程严格地选择非计算性分页进行操作。
  • 当非计算性分页的数目小于或者等于 minperm 的时候,AIX 分页替换守护进程将选择计算性分页和非计算性分页进行操作。在这种情况下,AIX 将扫描两类分页,并且回收近来较少使用的分页。
  • 当非计算性分页的数目在 minperm 和 maxperm 之间的时候,这种情况比较复杂,其行为还受两外一个参数的影响:lru_file_repage。如果 lru_file_repage=1,那么 AIX 分页替换守护进程将根据其内部重新分页表来确定选择何种类型的分页进行操作。AIX 内核通过内部重新分页表来确定哪一类分页的重新分页工作更加频繁,将优先替换使用不太频繁的页面类型的页面。可能只是非计算型的,也可能是计算型和非计算型的。如果lru_file_repage=0,则只替换非计算型页面。

minfreemaxfree则是控制在空闲列表中的页面数在少于minfree开始主动执行页面淘汰算法,直到超过maxfree的数目,也就是通过预先执行页面替换,来保证系统中维持一定数量的可用页面。通常可以设置minfree=120 * CPU数,maxfree= 128 * CPU数。

maxclient%(maxclient)参数指定客户端页面可以使用的最大内存比例(页数),因为客户端页面其实是永久存储页面的一种,所以maxclient不能设置超过maxperm。值得注意的是,maxclient是严格限制的,因为strict_maxclient默认等于1。

上述各种类型的页面信息,可以通过一些os工具查看:

#vmstat -v
 ...
    9.9 numperm percentage          --非计算型页面占比
 387427 file pages                  --非计算型页面数
 ...
    9.9 numclient percentage        --客户端页面占比
   10.0 maxclient percentage
 387427 client pages                --客户端页面数
 ...
svmon -G
               size      inuse       free        pin    virtual
memory      4104192    1694342    2409850    1096659    1290215
pg space    4194304       3733

work       pers       clnt
pin         1096659          0          0
in use      1290215          0     404127

注意到pin住的都是工作存储页面(work),这是正确的,因为我们设置了oracle的SGA pin在内存当中,要在AIX上将SGA pin在内存中,需要设置两个内核参数:v_pinshm = 1表示允许pin共享内存段;maxpin%表示允许pin的最大内存比例,然后还需要设置Oracle的初始化参数lock_sga=TRUE。永久存储页面(pers)为0,因为没有使用jfs文件系统,而jfs2使用的是客户端页面(clnt)。这里svmon统计的数据和vmstat有点出入。这是因为vmstat统计是按照计算型和非计算型的,而svmon则是按照工作存储页面和永久存储页面的。对比两个命令的结果,可以推算客户端页面中有404127-387427=16700个计算型页面。

另外,在topas中,也可以看到一些各种类型页面和交换的大概信息:

PAGING           MEMORY
Faults    27230    Real,MB  107008
Steals        0  % Comp     95.6
PgspIn        2  % Noncomp   5.1
PgspOut       0  % Client    5.1
PageIn        2

这篇算是学习笔记,写一下加深印象,想了解更多更细致的关于AIX虚拟内存管理方面的内容,请参考:

http://www.ibm.com/developerworks/cn/aix/library/au-vmm/index.html?ca=drs-cn-0303
http://www.ibm.com/developerworks/cn/aix/library/au-aixoptimization-memtun1/index.html?ca=drs-cn
http://www.ibm.com/developerworks/cn/aix/library/au-aixoptimization-memtun2/index.html?ca=drs-cn
http://www.ibm.com/developerworks/cn/aix/library/au-aixoptimization-memtun3/index.html?ca=drs-cn

<!--

--EOF--

Trackback:http://rdc.taobao.com/blog/dba/html/151_aix_virtual_memory_management_mechanism.html/trackback

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/1384/viewspace-342875/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/1384/viewspace-342875/

【江枫】AIX虚拟内存管理机制相关推荐

  1. 【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )

    文章目录 一.Linux 内核特性 1.Linux 内核组织形式 2.Linux 进程调度 3.Linux 内核线程 4.Linux 内核多平台虚拟内存管理 5.Linux 虚拟文件系统 6.Linu ...

  2. 从Oracle数据库故障到AIX内存管理

    墨墨导读:本文来自墨天轮用户"你好我是李白"的投稿,详细介绍数据库告警最核心的一套数据库1节点hang的处理过程.墨天轮主页:https://www.modb.pro/u/3997 ...

  3. SoC嵌入式软件架构设计之二:虚拟内存管理原理、MMU硬件设计及代码分块管理...

    程序的大部分代码都可以在必要的时候才加载到内存去执行,运行完后可以被直接丢弃或者被其他代码覆盖.我们PC上同时跑着很多的应用程序,每个应用程序使用的虚拟地址空间几乎可以整个线性地址空间(除了部分留给操 ...

  4. SoC嵌入式软件架构设计II:否MMU的CPU虚拟内存管理的设计与实现方法

    大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其他代码.我们PC然在同一时间大量的应用,能够整个线性地址空间(除了部分留给操作系统或者预留它用),能够觉得每一个应用程序 ...

  5. windows虚拟内存管理

    内存管理是操作系统非常重要的部分,处理器每一次的升级都会给内存管理方式带来巨大的变化,向早期的8086cpu的分段式管理,到后来的80x86 系列的32位cpu推出的保护模式和段页式管理.在应用程序中 ...

  6. linux内存管理的主要概念是虚拟内存,有关linux内存管理机制的相关内容,linux物理内存和虚拟内存,深入了解Linux内存运行 ......

    在linux中空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然. 这是Linux内存管理的一个优秀特性,区别于Windows的内存管理. 主要特点: 无论物理内存有多大,L ...

  7. 全面介绍Windows内存管理机制及C++内存分配实例(三):虚拟内存

    本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...

  8. 低层级GPU虚拟内存管理引论

    低层级GPU虚拟内存管理引论 Introducing Low-Level GPU Virtual Memory Management CUDA应用程序越来越需要尽可能快速高效地管理内存.在CUDA 1 ...

  9. linux进程管理机制,linux进程管理,linux进程管理机制

    linux进程管理,linux进程管理机制 一.基本介绍 1.在 LINUX 中,每个执行的程序(代码)都称为一个进程.每一个进程都分配一个 ID 号 2.每一个进程,都会对应一个父进程,而这个父进程 ...

  10. JVM内存管理机制线上问题排查

    本文主要基于"深入java虚拟机"这本书总结JVM的内存管理机制,并总结了常见的线上问题分析思路.文章最后面是我对线上故障思考的ppt总结. Java内存区域 虚拟机运行时数据区如 ...

最新文章

  1. ceph 集群 健康状态 监管
  2. C/C++语言参数传递----函数/方法 参数的指针引用传递
  3. 数据结构 图的广度优先遍历 C++
  4. cache-control_网站 cache control 最佳实践
  5. php 字符串 大括号,PHP中的字符串大括号
  6. OpenResty 安装,收集日志保存到文本文件
  7. mysql open table_MySQL open table
  8. JSON C# Class Generator ---由json字符串生成C#实体类的工具
  9. iText5报表_页眉与页脚
  10. 阿里拍卖官方客服全面升级 推出一对一教你“一站式服务”
  11. JS实现购物车全选、不选、反选的功能(十七)
  12. 那些一心想要离开 BAT 的人,后来怎么样了?
  13. int 转换成 string 四种方法你们喜欢用那种呢?
  14. SpringCloud项目接入Nacos服务治理
  15. js 判断是否等于0不要用!
  16. EasyExcel读excel文件模板校验暨时间格式正则表达式
  17. Ant入门教程之常用命令
  18. 挂号信经过几次签收最终送达收件人?
  19. 镂空数学符号空心体数学符号
  20. 计算机的硬件故障维修,计算机硬件故障分析与解决方法

热门文章

  1. PHP编程学习之路 2
  2. Rockchip RK3588 kernel dts解析之系统休眠配置rockchip_suspend
  3. 读《我的身体里早已落叶纷飞》
  4. 生信宝典:生物信息学习系列教程、视频教程
  5. [转]Discuz 模板原理分析
  6. stm32摄像头调试 | 串口传输照片数据 | 用python来设计上位机通信软件
  7. C语言每日一练 —— 第21天:算法的应用
  8. Echarts 大数据可视化基本使用
  9. np.delete详解
  10. Python中的盆地跳跃(Basin Hopping)优化