虚拟内存管理器(VMM)性能概述
2008-09-06 08:21:45 来源:WEB开发网·重新激活停止
·标记为重新激活的进程被再次标记成暂挂
·根据上述规则有额外进程被暂挂
调页空间槽的分配和回收
操作系统支持对工作存储器(也称为调页空间槽)实行三种分配方法,如下所示:
·后分配
·预先分配
·延迟分配
注:调页空间槽仅在进程(不是线程)终止时或由系统调用 disclaim() 释放。槽不能由系统调用 free() 释放。
后分配算法
在具有后分配算法的 AIX 4.3.2 以前的版本中,仅当第一次访问虚拟内存页时才会为该页分配调页槽。就是说正在执行的程序第一次对该页的内容感兴趣。
许多程序使用后分配的途径是为最大的结构分配虚拟内存地址范围然后仅使用和实际情况所需数量一样多的结构。虚拟内存地址范围中从不会访问到的页从来不需要实际内存帧或调页空间槽。
该技术的确包含某种程度的风险。如果所有运行于某机器上的程序正好同时遇到最大需求的情况,调页空间可能会耗尽。这样某些程序就不能继续完成。
预先分配算法
操作系统中第二种调页空间槽分配的方法适于安装的情况,这种情况是一种可能情况或者不能完成的代价可能非常高。该算法称为预先分配是很适当的,它在分配虚拟内存地址范围时就导致分配适当数量的调页空间槽。例如,可通过子例程 malloc() 来实现。如果没有足够的调页空间槽支持子例程 malloc(),就设置一个错误代码。预先分配算法的调用如下:
# export PSALLOC=early
该示例使所有将来在该环境中执行的程序使用预先分配。而当前在运行的 shell 不受影响。
主要因为涉及到预先分配的调页空间的大小,所以性能分析员会对该算法有兴趣。如果为那些程序设置预先分配,那么调页空间需求可能增加许多倍。所以通常推荐调页空间大小至少是系统实际内存的两倍,而对于那些使用 PSALLOC=early 的系统则推荐至少是实际内存大小的四倍。事实上这只是一个起点。还需分析工作负荷的虚拟存储器需求并分配调页空间与其相适应。作为一个例子,如果用预先分配的话,AIXwindows 服务器在运行时一次需要250 MB 的调页空间。
当使用 PSALLOC=early 时,用户应该通过预先分配内存和将内存设置成一个堆栈来为后面的信号 SIGSEGV 设置一个处理程序,设置堆栈用 sigaltstack 函数。即使指定了 PSALLOC=early,如果没有足够的调页空间且程序试图扩展堆栈,则程序可能接收到 SIGSEGV 信号。
延迟分配算法
操作系统调页空间槽分配的第三种方法从 AIX 4.3.2 开始起就缺省为“延迟页面空间分配”(DPSA)策略,它延迟调页空间的分配直到必须调出该页,这样的结果是不会分配无用的调页空间。这种方法能节省大量的调页空间,也意味着磁盘空间的节约。
在一些系统中,即使所有页面的访问都已经发生,但仍有可能不需要调页空间。这种情况在具有超大量 RAM 的系统上很常见。然而,如果访问得较多的是虚拟内存而不是可用的 RAM,这可能导致调页空间的过量使用。
要禁用 DPSA 且保留“后页面空间分配”策略,请运行下列命令:
# /usr/samples/kernel/vmtune -d 0
要激活 DPSA,运行下列命令:
# /usr/samples/kernel/vmtune -d 1
通常,DPSA 可以改善系统性能,因为在缺页故障后避免了分配页面空间的开销。如果使用 DPSA,调页空间设备需要的磁盘空间较少。
更多精彩
赞助商链接