Solaris OS 使用需求换页式虚拟内存系统。系统运行时,会根据需要将页引入内存中。当内存占用达到特定阈值之上并且对内存的需求仍在继续,将开始换页。换页要经过由特定参数控制的多个级别。
常规换页算法如下所述:
检测到内存不足。页扫描程序线程运行并开始遍历内存。使用包含两个步骤的算法:
将页标记为未使用的。
如果在经过一个时间间隔后仍处于未使用状态,该页将被视为要回收的主体。
如果页已经修改,则会向页面调出线程发出请求以针对该页面调度 I/O。同时,页扫描程序继续查看内存。页面调出将促使该页被写入其后备存储并置于空闲表中。页扫描程序扫描内存时,不会对页的来源进行区分。页可能来自数据文件,也可能是来自可执行文件的文本、数据或栈的页。
随着系统上的内存压力增加,算法在考虑备选回收页方面以及在运行换页算法的频率方面将变得更为主动。(有关更多信息,请参见 fastscan 和 slowscan。)因为可用内存处于范围 lotsfree 和 minfree 之间,所以系统将线性增加每次调用页面调出线程时扫描的内存量,从由 slowscan 指定的值增加到由 fastscan 指定的值。系统使用 desfree 参数控制关于资源使用和行为的决策数。
系统最初限制自身使用不超过一个 CPU 的 4% 来进行 pageout 操作。随着内存压力增加,支持 pageout 操作时消耗的 CPU 时间量将线性增加,直到最大值,即一个 CPU 的 80%。算法将检查一定量的内存(介于 slowscan 和 fastscan 之间),然后在发生下列情况之一时停止:
已经找到了足够的页来解决内存不足问题。
已经查看了计划的页数。
已经消耗了过多时间。
当页面调出线程完成其扫描时,如果仍存在内存不足问题,则会调度在将来执行 1/4 秒的另一次扫描。
换页子系统的配置机制已更改。不是依赖于 fastscan、slowscan 和 handspreadpages 的一组预定义值,系统将在引导时为这些参数确定适当的设置。在 /etc/system 文件中设置这些参数中的任何一个都会导致系统不能使用最佳值。
注意 - 请从 /etc/system 文件中删除 VM 系统的所有调优设置。请以缺省设置运行并确定是否需要调整这些参数中的任何参数。不要设置 cachefree 或 priority_paging。 |
支持对 CPU 和内存的动态重新配置 (Dynamic Reconfiguration, DR)。涉及内存添加或删除的 DR 操作中的系统会重新计算相关参数的值,除非已在 /etc/system 中显式设置了这些参数。如果已显式设置,将使用 /etc/system 中指定的值,除非违反了对变量值的约束。如果那样,将重置该值。