目标:系统的虚拟内存是由现有的随机存储内存和硬盘空间组合成的。虚拟内存的组成部分保留为 swap 空间。 Swap 空间可以被定义为一个临时存储空间,在系统内存需求超出 RAM 大小的时候被用到。
虚拟内存介绍:
虚拟内存包含 RAM 和专门的硬盘存储空间(也叫做 swap 空间)。虚拟内存管理软件把硬盘上的文件的副本映射到虚拟地址。程序运用这些虚拟地址,而不是真正的地址去存储指令和数据。虚拟内存使操作系统的大空间内存成为可能。然而,内核必须在实际的程序命令被 CPU 执行之前把虚拟内存地址翻译为真正的 RAM 中的地址。
物理的 RAM:
物理的内存指的是电脑中实际安装的 RAM. 当和 swap 空间一起工作时, RAM 是系统中最关键的资源。物理内存的数量随着运行 Solaris 10 操作系统的机器的不同而变化。每个活动的进程的代码和数据在运行之前必须被映射到物理内存里。
虚拟地址和物理地址:
Solaris 10 操作系统虚拟内存管理系统映射硬盘上的文件到虚拟内存地址上。虚拟内存管理系统然后翻译虚拟地址到实际的物理内存地址。应为程序需要这些文件的指令和数据。当他们存在物理内存里的时候, CUP 就可以使用这些数据和指令。
匿名的内存页:
物理内存页为那些相应的正在运行的进程保存私有数据或硬盘上任何文件系统都不包含的堆栈信息。自从这些内存页包括了那些不需要和硬盘上文件对应的信息后,这些页被叫做匿名内存页。匿名内存页由 swap 交换空间所支持;从另外角度讲, swap 交换空间也为那些从内存中交换出的数据提供一个临时存储区域。
Swap 交换空间:
当物理内存的大小一定的情况下,对它的使用却是多种多样的。许多情况下,进程在访问物理内存空间的时候会产生冲突。有时候,一个进程必须放弃他自己的内存空间给其他进程。进程有一些分页从 RAM 里移出,匿名内存分页则保存在 swap 交换区域内,但是一些未发生变化的文件系统分页不会保存在 swap 交换区域内,因为文件系统数据在硬盘介质上永久的保存,所以他可以从物理内存里直接删除。
Swap 切片
系统中的主要 swap 空间是一个硬盘的切片。在 solaris 10 操作系统里,默认的主 swap 区域在 1 片区( slice 1 )、。
在默认的情况下,它的起点是 cylinder0 。当然,在用户自定义模式安装的过程中你可以改变默认的分区。每次重新启动系统, /etc/vfstab 文件的记录会决定 swap 分区的配置情况。当要增加额外的交换空间时,你可以通过配置额外的交换切片( swap slice ),仔细地计划你的 swap slice 放在哪里。如果你除了系统硬盘空间外还有额外的存储空间,那么把 swap slice 放在额外的驱动介质上来减少系统的负载。
Swap files :
系统也允许你通过创建 swap 文件提供额外的 swap 空间。 Swap 文件是指那些驻留在文件系统中的,并且用 mkfile 命令创建好的文件。这些文件在某些情况下很有用。例如,在没有多余硬盘 slice 的情况下,又不可能重新划分 slice ,则添加 swap 交换空间就可以解决问题。 Swap 文件可以永久的设置在配置文件中,通过向 /etc/vfstab 文件中添加一条记录就可以了。
Swapfs 文件系统
当内核运行一个进程时, swap 交换空间必须为进程的私有数据和堆栈信息预留空间。当进程的私有数据和堆栈信息需要从物理内存里移出分页的时候,就会需要 swap 的预留空间。例如,多个进程竞争有限的内存空间。
因为 swapfs 文件系统可以提供虚拟 swap 交换空间,那么对大量可用的物理 swap 交换空间的需求就小了。这种需求的下降正是因为 swapfs 文件系统提供虚拟 swap 空间地址,而不是真实的物理交换空间地址,用来负责 swap 交换空间的预定请求。因此,你需要磁盘上的物理交换空间,仅用在需要把存在物理 RAM 分页里的私有数据移出的情况下。
分页调度 Paging :
分页调度是指在 RAM 和 swap 交换区域内传输选择的内存分页。当你把私有数据传送到 swap 交换空间里,物理的 RAM 就可以省出空间为其他进程使用。如果你再次需要移出 RAM 的分页,可以从 swap 交换空间里重新获得,并把它们影射回物理内存。把这些分页移进 RAM 也许需要更多的分页调度。交换就是对某个进程的所有修改过的数据的内存分页,在磁盘和内存间的转移调度。
使用 pagesize 命令可以显示内存分页的大小,单位 bytes 。 Solaris 10 操作系统默认的分页大小是 8192 bytes 。
#pagesize
8192
你可以使用多页大小支持( MPSS )服务在大的内存分页空间里运行遗留程序( legacy applications )。使用大的分页空间可以提高可观的程序性能,因为他扩充了大量的内存空间。大的分页必须影射到多样的分页的地址上。使用 pagesize 命令可以查看所有支持的分页大小。
#pagesize –a
8192
65536
524288
4194304
交换不是典型的发生在 solaris 操作系统上。然而,在 solaris 操作系统中,需要优先为那些正在执行的进程预留交换空间,使交换空间的一些数量确定下来。这种对交换空间数量的需求随着系统的不同而不同。预留空间的大小必须符合以下两个标准:
1. 必须为物理 RAM 内存同时运行的进程提供充足的补给空间。
2. 必须为创建一个 crash dump 提供充足的空间(单独的 slice ) .
配置 swap 空间
Swap 命令为内核提供了增加,删除和监控 swap 区域的方法。 Swap 区域可以通过命令临时的改变,并在重新启动后失效。如果想创建一个永久的附加的 swap 空间,就必须在 /etc/vfstab 中添加一条记录。这条添加的记录在重新启动系统时生效。
显示当前的 swap 配置:
查看当前的 swap 空间的配额,需要完成以下步骤:
1. 列出系统虚拟 swap 空间的统计信息。
#swap –s
2. 列出系统虚拟 swap 区域的详细信息。
#swap –l
添加 swap 空间:
当系统对 swap 空间的需求超过了当前大小时,你可以使用下面的步骤添加 swap 交换空间。
增加 swap slices= 〉
1. 编辑 /etc/vfstab 文件,添加对 swap slice 的描述信息。
# vi /etc/vfstab
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
2. 添加下面的一行信息
/dev/dsk/c1t3d0s1 - - swap - no -
3. 使用 swap –a 命令添加附加的 swap 空间。
# swap -a /dev/dsk/c1t3d0s1
添加 swap 文件 = 〉
1. 确定一个文件系统有足够的空间用来创建附加的 swap 文件,它可以存在另一个硬盘上。
2. 创建一个目录来保存 swap 文件
# mkdir -p /usr/local/swap
3. 创建一个 20 兆的 swap 文件,命名为 swapfile ,保存在 /usr/local/swap 目录下。
# mkfile 20m /usr/local/swap/swapfile
4. 为 swap 空间添加 swap 文件
# swap -a /usr/local/swap/swapfile
5. 列出修改过的系统 swap 空间详细信息。
# swap -l
6. 列出修改过的系统 swap 的统计信息。
# swap -s
7. 要使一个 swap 文件在重新启动系统的时候生效,要添加一条记录到 /etc/vfstab 文件中。
# vi /etc/vfstab
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
...
/usr/local/swap/swapfile - - swap - no -
删除 swap slices= 〉
1. 在当前的 swap 配置中删除 swap slice 。
# swap -d /dev/dsk/c1t3d0s1
2. 防止 swap slice 在重启或改变运行等级的时候被重新起用,必须编辑 /etc/vfstab 文件,删除相应的行。
删除 swap 文件=〉
1. 从当前的swap配置中删除一个swap文件。
# swap -d /usr/local/swap/swapfile
2. 删除swap文件,释放磁盘空间。
# rm /usr/local/swap/swapfile
3. 永久的删除swap文件。编辑 /etc/vfstab 文件,删除相应的行。