Chinaunix首页 | 论坛 | 博客
  • 博客访问: 304247
  • 博文数量: 26
  • 博客积分: 2052
  • 博客等级: 大尉
  • 技术积分: 686
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-23 22:02
文章分类

全部博文(26)

文章存档

2013年(1)

2011年(1)

2010年(12)

2009年(2)

2008年(10)

我的朋友

分类:

2008-04-08 09:33:09

本章介绍和AIX内存工作机制

部分内容来源:

AIX 5L v 5.3 Performance management官方文档

 

虚拟内存管理器(VMM)

VMM services all memory requests from the system. 当内存被申请的时候(Working类型),对于early allocation of paging space policy情况下,在RAM被访问的时候,不管是否还有多少物理剩余空间,都会有paging space被分配,在这种情况下VMM起到了关键的作用.(不过目前系统缺省的paging space的分配原则是DPSA).

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

VMM 的角色是管理分配实际内存页面帧并且解析程序对虚拟内存页面的引用,这些虚拟内存页面当前不在实际内存中或还不存在(例如,当进程第一次引用其数据段的某 一页时)。因为在任何给定时刻使用的虚拟内存数量可能比实际内存大,所以 VMM 必须将余量存储在磁盘上。VMM的两个目标:

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

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

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

 Free List

VMM 维护一个空闲页面帧的逻辑列表,它用于解决缺页故障。在绝大多数环境中,VMM 偶尔必须通过reasign由运行进程占有的一些页面帧来添加到空闲列表中。需要reasign页面帧的虚拟内存页由 VMM 的页面替换算法进行选择。VMM 阈值决定了重新指定的帧的数量。

查看Free list的方法:

# vmstat  

System configuration: lcpu=8 mem=15936MB

kthr    memory              page              faults        cpu   

----- ----------- ------------------------ ------------ -----------

 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa

 1  1 894790 601757   0   0   0   2    3   0  15  861 286  0  0 99  1

 

# svmon -G

               size      inuse       free        pin    virtual

memory      4079616    3477911     601705     535886     894842

pg space    7995392       2916

               work       pers       clnt

pin          535886          0          0

in use       894842          0    2583069

PageSize   PoolSize      inuse       pgsp        pin    virtual

s   4 KB          -    3399607       2916     484734     816538

m  64 KB          -       4894          0       3197       4894

 

页面替换Page replacement

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

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

 

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

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

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

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

数值 minfree 和 maxfree 在命令 vmo 的输出中,它们是每个存储池的 minfree 和 maxfree 的总和。

# vmo -a |grep mempools

              mempools = 2

 

重新调页(Repaging)

Page faults要么是new page fault要么是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,这样可比历史重新调页活动更有力地反映最近的重新调页活动。

阅读(3854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~