HP-UX 的内存交换机制--交换Swap与伪交换Pseudo swap

来源:互联网 发布:淘宝卖东西需要囤货吗 编辑:程序博客网 时间:2024/04/30 22:55

产生 (Spawn) 进程时,Kernel 将检查虚拟内存,看看该进程是否可以直接加载到物理内存中。该 Kernel 还会进行检查,以确保该进程能够节省 swap 区域中的空间。如果两个测试均失败,该进程则不会产生,将被终止。生成的错误消息为 malloc 或 fork 失败。所有进程都必须能够节省 swap 区域中的空间。要保留足够的可用物理内存,以便进程运行,有一个被称为 vhand 的 daemon 会扫描 Kernel 中的所有进程表,查找尚未使用过的数据页。如果 vhand 发现了任何 "非活动" 页,vhand 就会将这些页移动到 swap 区域。如果可用内存下降至太低,另一个被称为 swapper 的 daemon 则会删除或 swap 出整个进程。Swapper 将继续将进程从物理内存推入 swap 区域,直到可用内存增加。当系统进行 swap 时,该 swapper 进程非常活跃。在 HP-UX 10.x 及以上版本中,不会 swap 出整个进程,而只是 swap 部分进程。Swap 的部分进程称为已分页。

如果系统上没有配置足够的 swap,系统性能则可能会受到很大的影响。有些影响是,系统可能无法访问系统上安装的所有物理内存。只有在 Swap 区域的可用空间多到可用于进程的情况下,Kernel 才允许产生进程。应用程序也依赖于 swap,如果没有配置足够的 swap,则生成与内存相关的错误消息,如 malloc 或 fork 失败。如果系统无须将进程从物理内存 swap 到 swap 区域,则将执行附加磁盘 I/O。该 Kernel 还将使用附加资源来监视内存并处理进程到 swap 设备的移动。这种附加开销将降低系统性能。如果这一问题非常严重,系统则可使用所有 CPU 或进程管理的其他资源。一旦系统达到此状态,则称为 Thrashing。

您至少应该将 Swap 和物理内存的比例配置为 1:1。这是一个基础比例,允许您访问整个物理 RAM,并处理大多数操作系统的 swap 需求。但是,您安装的应用程序可能需要配置更多 swap。您应该与供应商或提供商联系,获得更多有关 swap 的建议。一般系统上的物理内存数量不会是 swap 数量的四倍。

用于 swap 的磁盘区或者 logical volume 称为设备 swap。默认情况下,安装了操作系统的情况下 (/dev/vg00/lvol2),系统至少会配置一个区域的设备 swap。设备 swap 就是一个 logical volume 或者一个磁盘区,是为系统提供用于 swap 的。类似 bdf 的命令不会显示系统上的 swap,但是 swapinfo 命令会显示。设备 swap 可以配置在系统上的任意 volume group 上。涉及到性能问题时,最提倡使用 logical volume,当系统需要附加 swap 时应首先配置 logical volume。设备 swap 也包括两个术语,第一个是主 swap。此 swap 设备应为 /dev/vg00/lvol2,是在安装操作系统时创建的。主 swap 只能位于引导驱动器上。任何附加设备 swap 都称为次 swap。次 swap 设备可以配置在任何 volume group 上。

文件系统 swap 使系统管理员能够在所有磁盘空间均已分配给文件系统的情况下,向系统添加更多的 swap。使用文件系统 swap,您可以设置和配置文件系统中可用的空间。当您分配文件系统 swap 时,该系统会创建一个目录,称为 paging,并会在该 paging 目录中创建 swap 文件。当且仅当系统开始向该 swap 区域进行 swap 时,系统才会执行到这些文件的写入。系统性能将会因维护文件系统 swap 而受到影响。这是因为,操作系统已经从物理内存删除了页,然后将其以小块的形式写入文件。如果系统只需要文件系统 swap 用于保留空间,系统的性能就不会受到影响。文件系统 swap 应该仅用作 swap 问题的临时解决方案。一旦向系统中添加了附加驱动器,文件系统 swap 就应尽快删除。由于性能方面的原因,我们建议将文件系统 swap 区域的优先级设成高于设备 swap。

Pseudo swap 是该规则的例外。Pseudo swap 可使系统管理员利用具有较大物理 ram 的系统,而无须配置较大的 swap 区域。Pseudo swap 不是设备 swap 的替代品,而是 swap 的增强。当系统引导时,会计算 pseudo swap 的数量。此计算是 75% 的物理内存,此值是不可调整内核参数。该 Kernel 会此增强看作是产生新进程时可以分配的附加 swap 区域。系统只会将 pseudo swap 用作保留空间,而不会将进程分页进出 pseudo swap。如果进程需要分页出物理内存,Kernel 则会 swap 到设备或文件系统 swap。Pseudo swap 默认情况下处于打开状态,将内核参数 swapmem_on 改为 off,即可关闭。

下面是使用 pseudo swap 的优点示例。假设我们有一个系统,它有 1GB 的物理 RAM。要使操作系统能够使用所有内存,操作系统至少需要 1GB 的 swap。系统管理员为 swap 配置了 1GB 的 logical volume。另外,系统管理员还保持 pseudo swap 处于启用状态。当系统引导时,它会将 75% 的物理内存配置成 pseudo swap。我们大约有 750 (1000 * .75)M 的附加 swap 用于该系统。现在系统的 swap 总数为 1.75GB,或 2.75GB 的虚拟内存。Pseudo swap 不会增大 swap 的总数。Kernel 会将该系统视为具有 1.75 GB 的 swap,并将按照系统配置了 1.75GB 设备 swap 的方式使用 swap。但是,只配置了 1GB 的设备 swap。

由于 pseudo swap 会增加系统上的 swap 总数,所以有些系统管理员可能想减少设备 swap 的数量,并将该空间用于数据。在有些情况下,系统管理员可以执行此操作。此外,系统管理员还需要规划转储空间。此转储空间用于系统写入系统崩溃。默认情况下,主 swap (/dev/vg00/lvol2) 既用于 swap 也用于转储。在 10.X 系统上,系统管理员必须将 root volume group,即 /dev/vg00 上的设备 swap 和物理内存比例配置成至少 1:1。这样即能满足操作系统的最小 swap 和转储需求。在 11.0 及以上版本中,不再需要将 swap/转储空间与物理内存的比例配置为 1:1。配置系统崩溃只是为了节省确定系统崩溃的根本原因所需的部分。这非常容易,因为文件系统很少会配置 16GB 的 RAM。要在 11.X 上配置正确数量的转储空间,请参阅 crashconf(1m) 的 Manpage。

到目前为止,用于监视 10.X 和 11.X 系统上 swap 的最简单的命令是 swapinfo。使用一个命令,系统管理员即可看到配置了多少 swap,有多少 swap 是用于进程的,甚至有多少 swap 正处于活动状态,且可用于 swap 的进程。下面是一个示例:

#swapinfo -tam
Mb Mb Mb PCT START/ Mb
TYPE AVAIL USED FREE USED LIMIT RESERVE PRI NAME
dev 128 10 118 8% 0 - 1 /dev/vg00/lvol2
localfs 60 0 60 0% 60 0 4 /var/paging
reserve - 52 -52
memory 91 68 23 75%
total 279 130 149 47% - 0 -

此输出显示了此系统上配置的设备 swap(dev)、文件系统 swap(localfs) 和 pseudo swap(memory)。我要指出的第一个点是 total 行。从左到右,您可以快速了解系统上正在如何执行 swap。在 Mb Avail 列下面,它显示此系统总共配置了 279M 的 swap。在配置的 279M 中,130M 正在使用。我的意思是说,如果 swap 用于保留或分页时,total 行不会显示。130M 正在用于 "某些内容",剩下 149 M 的 swap 未在使用。Pct Used 列只显示了已在使用的 swap 百分比。

"memory" 行显示 pseudo swap 用量,这是所有 swapinfo 输出中最令人困惑的地方。正如我在以前的文章中提到的那样,pseudo swap 仅用于保留进程。因此,从此示例中可以看出,总共配置了 91M 的 pseudo swap,其中,68M 的 pseudo swap 正在由内存中运行的进程使用。剩下未使用的 pseudo swap 是 23 M。之所以令人困惑,其中的一个原因是 pseudo swap 使用不会像设备 swap 和文件系统 swap 那样降低系统性能。换句话说,无论使用 3% 还是 99% 的 pseudo swap,系统性能都是一样的。在查看 swapinfo 时,我们通常建议忽略 "memory" 行。

"reserve" 行仅涉及我们用于保留设备和文件系统 swap 区域中进程的 swap 数量。在此示例中,我们的设备和文件系统 swap 总共是 188 M,其中只有 52M 用于保留进程。现在,如果您采用用于内存和保留的所有数量,我们就会将 120(52+68)M swap 保留下来,用于活动进程。因此,从这两行信息可以看出,我们已经计算了 92% 的 swap,这部分仅保留下来,用于运行的进程。

"localfs" 行显示的一些信息说明了,对于 /var 上配置的文件系统 swap,系统将使用的空间量。该行有一点很有意思,这就是 swap 的优先级,它的优先级是 4。这说明,优先级设为 1 的所有设备 swap (/dev/vg00/lvol2) 都将在该文件系统 swap 区域使用之前使用。

"dev" 行是 swapinfo 命令可以显示的最重要的信息之一。如果 percent used 一行大于 0,系统就会进行 swap。这明确说明,系统上安装的物理 RAM 不足。只有两个方法能够使系统停止 swap,第一个是安装更多的物理内存,另一个是减少系统上运行的进程。在此示例中使用的 dev 行已经进行了更改,用以显示系统发生分页时输出是什么样子。如果还剩下 149M 的保留空间时,系统则不会将进程分页到 swap 区域中。

 

from:http://blog.chinaunix.net/space.php?uid=10118858&do=blog&id=2970218

原创粉丝点击