AIX操作系统Paging Space的管理机制

发表于:2007-07-01来源:作者:点击数: 标签:
我们知道在AIX操作系统中,Paging Space是一项很重要的设备,AIX kernel(内 核)需要利用 Paging Space 来管理虚拟内存。和内存页面一样,AIX的 Paging Space也是以4KB为单位,当实际内存数的空闲值低于一定数量以后,系统需要把 实际内存中的某些计算页面


我们知道在AIX操作系统中,Paging Space是一项很重要的设备,AIX kernel(内
核)需要利用 Paging Space 来管理虚拟内存。和内存页面一样,AIX的 Paging
Space也是以4KB为单位,当实际内存数的空闲值低于一定数量以后,系统需要把
实际内存中的某些计算页面(Computation Page)写回到Paging Space中(page
out),以便释放出实际内存页面用于其他程序。

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


Early Page Space Allocation (EPSA)

Late Page Space Allocation (LPSA)

Deferred Page Space Allocation (DPSA)

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的大小比实际内存值要
大很多。


Late Page Space Allocation

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


Deferred Page Space Allocation

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

DPSA是AIX 432及以后版本中所使用的默认机制,它通常适用于配有很大容量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。


Paging Space的页面释放

在AIX操作系统中,当内存中的页面被page到了Paging Space中以后,那么这一块
Paging Space的页面空间将被保留给该内存页面,即使该页面已经被写回到内存
中。因此,用lsps命令看到的Paging Space的使用率可能并不能真实反映真正位于
Paging Space 中的页面数,因为有些页面可能已经写回到了内存中。

如果写回到内存中的页面是线程的工作存储页面(Working Storage),那么随着该线
程的退出或者是相关的内存被释放 -- free(),Paging Space中的相应页面块也才会
被释放。

原文转自:http://www.ltesting.net