分类: 系统运维
2012-05-29 16:41:47
我们知道在中,是一项很重要的设备, kernel(内
核)需要利用 来管理。和内存页面一样,的 Paging
Space也是以4KB为单位,当实际内存数的空闲值低于一定数量以后,系统需要把
实际内存中的某些计算页面(Computation Page)写回到中(page
out),以便释放出实际内存页面用于其他程序。
在 4.3.2及以后版本中,提供了3种 的管理机制。
分别为:
Early Page Space Allocation (EPSA)
Late Page Space Allocation (LPSA)
Deferred Page Space Allocation (DPSA)
Early Page Space Allocation
在系统中,当的使用率达到一定百分比时,系统就无法将需要
page out的页面写到中,这时候,该进程就很可能被杀掉。为了避免
这种情况的发生,EPSA机制会保证当进程被启动时,在中先申请一
块页面空间,该空间大小与该进程所需要占用的实际内存的大小一致 (将环境变量
PSALLOC设为early,也就是“export PSALLOC=early”)。这样就保证当进程使
用malloc()调用的同时,在中有相应的空间保留给该进程,从而保
证该进程的page out 操作。
这种机制虽然可以保证现有的进程安全,但由于很多被保留的页面空间并没有被用
到,造成了非常大的空间浪费。同时,也需要的大小比实际内存值要
大很多。
Late Page Space Allocation
在 4.2.1之后, 4.3.2之前,默认使用 LPSA 机制。这种机制是指当进程
启动后,系统并不在中为该进程保留相应的页面。只有当该进程的实
际内存页面被修改过后,才会在中为这些被修改过的页面申请空间。
这种机制在一定程度上减少了的空间浪费,但是对系统也存在一定的
风险。比如,当一些后起的进程用了几乎全部的后,由于先起的进程
并没有保留足够的空间用于进程的page out操作,会导致该进程被杀
掉。
Deferred Page Space Allocation
在4.3.2之后,DPSA是系统默认的的管理机制。在这种机制下,系
统不会为进程保留任何的 page 页面,直到系统确认确实需要将内存中的页面 page
out 到中,才会把的页面分配给该进程。这种机制不会
造成的空间浪费,但和LPSA一样,这种机制也给系统带来了相同的
风险。
DPSA是 432及以后版本中所使用的默认机制,它通常适用于配有很大容量RAM
的系统,因为它可以减少很多资源的浪费。
对于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。
的页面释放
在中,当内存中的页面被page到了中以后,那么这一块
的页面空间将被保留给该内存页面,即使该页面已经被写回到内存
中。因此,用lsps命令看到的的使用率可能并不能真实反映真正位于
中的页面数,因为有些页面可能已经写回到了内存中。
如果写回到内存中的页面是线程的工作存储页面(Working Storage),那么随着该线
程的退出或者是相关的内存被释放 -- free(),中的相应页面块也才会
被释放。