【AIX】AIX内存机制
1 虚拟内存
虚拟内存是物理内存和交换空间(Paging Space)组合形成的虚拟内存空间, 通过虚拟的地址空间映射到物理内存或者 Paging Space。
在 AIX 中,虚拟内存段被分成 4096 字节大小的页,物理内存则被划分为 4096 字节大小的页帧(page frame)
1.1 物理内存
实际存在的物理内存条上的可供系统使用的缓存。
物理内存大小的查看:
1) # prtconf | grep memory
2) # vmstat
3) # lsattr –El sys0 –a realmem
A. 永久段(Persistent segment)和工作段(Working segment)
AIX 区分不同的存储段类型。理解不同的存储段类型,特别是工作段和永久段的区别非常重要。
永久段在磁盘上有一个永久的存储位置。含有不可编辑数据的文件或者只读的运行程序被映射到持久段,例如包含数据的文件,可执行文件。VMM 参数控制什么时候分配给永久段的 RAM 页帧可以被重写,并且用于存储新的数据。
工作段是临时性的,仅在它们被某个进程使用的时候存在,并且没有固定的磁盘位置。进程堆栈以及数据区,共享库文本,内核数据被映射到工作段。当工作段数据也不能存在于“实”存中的时候,他们被保存在磁盘上的页交换空间。
程序退出执行,所有工作段占用的页面被返回。
B. Computational(计算型)和 File(文件型)
Computational 型内存包含 working-storage segments or program text (executable files) segments。也就是包括 work(工作段)再加上 persistent(永久段)中的可执行文件的部分。 File(文件型)是除去计算型的所有内存. Computational 型可以理解为读入可执行文件的地方,文件型可以理解为读入文件中的 data 部分。
# topas
C. Client 类型
Persistent 段的内存进一步被分类,其中 client 类型的内存被用于 map remote
files(例如通过 NFS 访问的文件).。Enhanced JFS file system(JFS2)使用 clients page 来缓存 cache。
1.2 Paging Space
1.3 Page Fault
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.
注:如果持续看到 po 但是没有看到 pi 的增长,并不一定代表出现了 Thrashing, 比如系统正在读取大量的 persistent pages 会导致看到大量的 page out, 这时候需要查看一下应用的类型。被 page out 出去的数据,如果有进程需要再次 reference 的时候,将产生 page fault,然后通过 page in 再次写入到内存。
1.5 Thrashing(颠簸)表示系统连续地 paging in 和 out, 经常是系统缺乏内存的现象。
1.6 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