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

来源:岁月联盟 编辑:zhu 时间:2008-02-15
AIX操作系统Paging Space的管理机制内容简介:【aix教程】 我们知道在AIX操作系统中,Paging Space是一项很重要的设备,AIX kernel(内核)需要利用 Paging Space 来治理虚拟内存。和内存页面一样,AIX的 Paging Space也是以4KB为单位,当实际内存数的   【aix教程】我们知道在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 页面,直到系统确认确实需要将内存中的页面 pageout 到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中的相应页面块也才会被释放。
 

图片内容