免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2593 | 回复: 5
打印 上一主题 下一主题

在加一个关于MEMORY 管理的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-10-23 15:19 |只看该作者 |倒序浏览
系统内存
物理内存就是安装在你计算机中的随机存取存储器(RAM)。在系统启动的时候,在系统控制台上会显示已安装的物理内存的数目:
Physical: xxxxxxx kbytes
并不是所有的物理内存都能被操作系统使用。一些物理内存会被内核代码和数据结构占用。剩下的内存被称为有效内存,被系统用作需求分页。在系统引导时,会显示有效内存的数目:
Available: xxxxxxx kbytes
全部或部分的有效内存都可以被一个子系统或是用户进程锁定。被锁定的内存不能被交换到磁盘上去。典型的情况是,被锁定的内存页中保存有频繁存取的程序代码或数据结构,通过将程序代码和数据结构常驻内存,可以提高进程的执行效率。但是如果系统的大部分的内存都被锁定会导致系统死锁,所以必须要有一些未锁定的内存存在来避免系统死锁。
在系统启动的时候,能够被锁定的内存的总数会显示出来:
Lockeable: xxxxxxxx kbytes
有效内存减去被子系统或用户进程实际锁定的内存就是虚拟内存分页实际可用的内存。系统参数,unlockable_mem 中保存了不能被锁定的内存的大小。
注意:dmesg 命令可以显示系统启动的时候显示的信息,这些信息包括物理内存的数目,有效内存,和可锁定内存的大小。
什么是交换分区
交换分区是在高速存储设备上的一块区域,交换区是为虚拟存储系统进行分页进程而保留的。物理内存是系统中的有限的资源,这意味着在同一个时刻只能有一定数量的进程可以使用物理内存,甚至会有许多的进程实际上处于等待运行或等待执行当中。当进程运行的时候,程序的数据页和数据结构(文本)从内存中被拷贝到磁盘上或从磁盘上拷贝到内存中(在需要的时候),这就被称为需求分页。通常,程序的文本部分在程序执行的时候不会更改。所以在需要的时候,文本可以从包含可执行程序的文件中被拷贝到RAM中,执行中的程序的数据页会更改,因此,如果一个数据页必须从RAM移动到另外的空间,必须先将其拷贝到交换空间。
分页
内核通常会保持一定数量的空闲内存页来确保系统的效率。这个数字称为lotsfree,只要不低于这个数字,就不会发生分页行为,当空闲内存页的数目小于这个数字的时候,一个称为vhand的进程就会启动,这个守护进程会选择那些最近没有被访问的内存页,在需要的时候将这些内存页拷贝到交换分区中。这个过程被称为page out ,当一个进程试图存取当前内存中不存在地址的时候会发生page fault,这时,这个内存页会被拷贝到RAM中。
当系统有许多的请求内存需要时(例如系统中有许多的大的进程运行),分页守护进程可能变得十分繁忙,忙于交换内存页的进出,这会导致系统花费太多的时间在分页过程中,以至于没有足够的时间来运行其他的进程。在这种情况下,系统的性能下降的十分快,有时会导致系统没有任何地反映,在这种情况下,称为系统颠簸,因为系统的内部开销远大于生产性的工作。
交换器(swapper)
术语交换最早可以追溯到早期的unix用来管理物理内存的方式,其工作原理是在主内存和二级存贮器之间移动整个进程。现代的大多数虚拟内存系统不再交换整个进程,因为这种方式会导致系统消耗大多数的时间在I/O操作上,而没有时间作实际的工作。这种方式已经被一种非活动性的方案所代替,这种方案允许内存页以一种分页的机制被推出。分页是一种更有效的管理虚拟内存的机制。
当系统开始颠簸的时候,或当空闲内存的数量低于另外一个界限的时候,(这个界限被称为minfree),交换器会被激活,然后交换器会停止进程的活动,这样就降低了新的内存页被存取的速度。哪些属于被停止进程的内存页不会被访问,并且会成为分页守护进程释放的内存候选对象。当交换器检查到有效的内存数量回升到minfree界限之上,系统不再处于无效状态,它会重新激活被停止的进程。
交换区预留
在进程创建的时候,交换子系统会预留交换空间,但是不会在磁盘上指定交换空间,除非在内存页需要交换到磁盘上的时候。在进程创建时预留的交换空间可以防止交换器耗尽交换空间。
当系统不能够为一个新的进程预留足够多的交换空间的时候,进程就不能启动,同样,如果运行中的进程试图动态增加更多的内存,更多的交换空间会被预留。如果这个时候没有足够的交换空间,这个进程就会被杀掉。
交换区预留可以防止系统耗尽交换空间,它也会在所有的交换空间都被使用的情况下阻止进程的建立。
评估交换区的需求
在你安装系统之前,你应该了解你需要多少的交换空间。多数的应用程序的正常运行需要一个最小数量的交换空间。这个数字通常在应用程序的随机文档中有说明。
系统管理员应该监视交换空间的使用情况,并且在需要时对其进行调整。在下一章中我们会了解如何进行这种调整。
  交换空间的类型
交换区的类型
设备交换分区 ?????一块专用于交换的磁盘区域或逻辑卷
文件系统交换分区??? 文件系统交换分区,与设备交换分区不同的是,一个文件系统不但能存放 ??????????? 文件和文件的数据结构,同样可以使用有效的空间作为交换的用途。
主交换区???????在系统引导时有效的一种特殊设备交换分区,默认情况是:主交换分区????????????与root文件系统在同一个磁盘上。在内核引导系统的时候被初始化。
二级交换分区?????除主交换分区以外的设备和文件系统交换分区,通常的位置在root 磁?????????????盘的以外的其它磁盘上。
设备交换分区
设备交换分区的速度比文件系统交换分区的速度更快。设备交换分区存在于它自己的分区之中。
当使用整盘的方式分区,你既可以用整块盘作为交换分区,也可以通过命令newfs 的-R选项在磁盘的末尾空间保留一块交换分区。例如,以下的命令在一块磁盘上创建一个文件系统并且保留200M的空间作为交换区
newfs –R 200 /dev/rdsk/c0t2d0
如果是使用LVM的方式分区,可以创建一个单独的逻辑卷作为设备交换区。以下的命令使用lvcreate命令来创建一个200M交换逻辑卷:
lvcreate –L 16 –n myswap /dev/vg01
文件系统交换空间
文件系统交换区是二级交换区的一种形式,它可以动态配置。使用0文件系统交换区可以在一个进程需要更多的交换空间而设备交换区的剩余空间不够的时候使用一个已存在的文件系统。文件系统交换区仅仅在设备交换区不够时被启用。文件系统交换区会浪费一定数量磁盘空间,因为他仅仅使用文件系统中它需要的那一部分。你可以将文件系统交换区限制在一个合适的大小内,以防止消耗太多的空间。
当文件系统中的交换区被启用的时候,这个文件系统的根目录下会建立一个/paging的子目录。文件系统中的每一个交换块都会创建一个文件,默认一个交换块的大小为2M
请注意,一旦一个文件系统作为文件系统交换区而被启用就不能被卸载,除非重启动系统的时候。
主交换区
你的系统在启动时必须至少有一个设备交换区有效,这个交换区就是主交换区。在默认情况下,主交换区与根文件系统在同一个磁盘上。
如果你使用LVM(逻辑卷),主交换区存储在启动数据保留区(BDRA)。命令lvlnboot –s lvol 被用来定义主交换区。如果你想要修改主交换区的定义,你必须首先使用命令lvrmboot –s 来删除先前的定义。
二级交换区
除主交换区之外,你也能被使用其它交换区,这些交换区被称为二级交换区。如果你使用设备交换区作为二级交换区,为了达到更好的性能,请将其放在root磁盘以外的磁盘上。文件系统交换区都是二级交换区。
二级交换区能在引导的时候自动启动,也可以在系统运行的时候动态增加。
命令行方式激活交换分区
例子
1 swapon /dev/vg01/myswap
2 swapon /dev/dsk/c0t2d0
3 swapon –p 4 –l 4M /myfs2
4 swapon –a
解释:
1 激活逻辑卷中的交换分区
2 激活整盘方式的交换分区
3 激活一个文件系统的交换分区
4 激活在/etc/fstab中的所有交换分区
文件系统和设备交换分区都能够使用命令swapon(1m)的方式激活。
这个例子将逻辑卷/dev/vg01/myswap作为一设备交换分区。整个逻辑卷都被用作交换分区,这样文件系统就不能再使用这个逻辑卷。如果这个逻辑卷在过去包括一个文件系统,你需要使用 –f 选项来“强制”覆盖老的文件系统结构。
这个例子激活整盘/dev/dsk/c02d0的设备交换分区。如果这个盘包含一个用newfs –R 200 /dev/rdsk/c0t2d0的文件系统,你可以保留这个文件系统通过使用swapon 的-e 的选项来在磁盘的剩余部分建立交换分区。如果你想要覆盖磁盘上的文件系统,使用 –f 的选项。
这个例子将安装在/myfs2上的文件系统作为一个文件系统交换分区。-p 选项设置交换分区的优先级为4,-l 选项确保vhand在这个文件系统中使用的交换区的大小不超过4M。
注意:在文件系统被作为文件系统交换分区的时候,不能被umount。
在关机的时候,所有的交换区都自动地失效。为了确保交换分区在下次系统启动的时候自动被激活。你必须将其加入到/etc/fstab中去。/etc/fstab中关于交换区的语法在下一节说明,swapon –a 会立即激活/etc/fstab中的所有的交换区。
使用swapon激活交换区
增加设备交换区的语法
/usr/sbin/swapon [-p priority] [ -e |-f] device
priority 指明文件系统或是设备交换分区被使用优先级。
-e 使用一个磁盘设备上的文件系统的剩余空间作为交换分区。这个选项不能和-f选项同时使用。当使用文件系统作为交换分区的时候一定要使用这选项; 这个选项在使用“整盘”方式的情况下,就是一个磁盘上同时有文件系统和交换分区时使用。
-f 当一个设备上文件系统存在地时候,强制使用这个盘作为设备交换区(会破坏这个文件系统)
device 被用作内存分页的块设备。
增加文件系统交换区的语法
/usr/sbin/swapon [-m min] [-l limit] [-r reserve] [-p priority] directory
-m min min定义了分页系统从文件系统中初始化使用的分页空间的大小。
-l limit limit定义了交换系统在文件系统中最大占用的空间。Limit可以以k为单位(k为后缀),或以M为单位(M为后缀),或以文件系统块为单位(没有后缀)
默认是没有限制。
-r reserve 这个空间为当前文件系统占用的空间之外的一部分,仅为文件系统使用保留的,
-p priority 同设备交换区一样
directory 文件系统交换区占用的目录,系统会在作为交换区的文件系统的根目录下创建一个paging的目录。
注意:不能在文件系统交换区正在使用的情况下unmount文件系统。
交换区大小的限制
内核中的几个可调的参数限制了有效交换区的数量。
在设备交换区和文件系统交换区中可以配置的交换区空间的总和最大可以512M。可调的系统参数maxswapchunks,控制这个最大值。这个参数(默认值为512M)限制了交换区chunk的数量,交换区每个chunk的默认值为2MB,swapchunk的大小可以通过swchunk内核参数修改。
/stand/system中的系统参数nswapdev中设置了可以动态配置的交换设备的数量的最大值为10(默认)。最大可以为25。如果要使用超过nswapdev数目的交换设备就必须重新修改内核。
系统参数,nswapfs决定文件系统交换区的最大的数目。默认值是10,最大值是25。
   通过/etc/fstab文件激活交换区
在/etc/fstab中列出的交换区会在系统启动的时候自动激活。
例子
/dev/vg01/myfs1 /myfs1 vxfs delaylog 0 2
/dev/vg01/myfs2 /myfs2 hfs defaults 0 2
/dev/vg01/myswap ?.? ?swap defaults 0 0
/dev/dsk/c0t2d0 ? . ??swap defaults 0 0
. ???????/myfs2 ?swapfs pri=4,lim=4M 0 0
解释:
逻辑卷上的交换区
整盘上的交换区
一个文件系统上的交换区
在/etc/fstab文件中定义交换区可以确保每次系统启动的时候激活交换区。在启动过程中执行的swapon –a 命令可以激活所有的/etc/fstab中的交换区。Swapon –a 命令是作为/sbin/init.d/swap_start脚本文件的一部分在启动时运行,
注意:在修改了/etc/fstab中关于交换区的内容后,运行swapon –a,让系统重新读取fstab文件,并且激活所有新定义的交换区,同时也可以发现可能发生的语法错误。
    监视交换区的使用情况
例子:
swapinfo
swapinfo –f
swapinfo –d
swapinfo –tm
解释:
报告所有的交换区的使用情况
仅列出文件系统交换区
仅列出设备交换区
使用M为单位报告,使用合计方式。
在系统中配置了一个或多个交换区后,你可以通过swapinfo来列出配置的交换区和每个当前正在使用的交换区空间使用情况。如果你的交换区剩余空间已经很小的时候,你可能需要另外配置一个交换区来确保你的用户的应用能够运行。
    选择设备交换区的原则
两个交换区在不同的物理盘上要比一个盘上的一个交换区好
每个盘上只能有一个交换区(逻辑卷或保留空间)
设备交换区的大小应该基本一致
考虑磁盘的速度
使用设备交换区,你必须指定逻辑卷或是一个盘的一部分作为交换区。整盘保留的交换区的大小是在newfs 命令(-R)选项来定义的。你可以在其中创建逻辑卷。
以上给出的的是选择设备交换区的原则。其中大多数的是为性能考虑。你可以以任何你喜欢的方式设置交换区,但是如果不应用上面的原则,你的系统运行会很慢。
为性能考虑,不同磁盘上的两个交换区要比同一磁盘上的同样大小的交换区要好。同样为性能考虑,不要在同一块磁盘上设置多个交换区。
多个交换区使用交错方式来使用。交错交换区的意思是,使用一个磁盘上的交换区后,再使用另外一个盘上的交换区,如果交换区分布在不同的盘上,交换区能够被并行地写,这样可以避免在同一磁盘上进行多次写操作的时候对磁头的争用。
不要在包含主交换区的磁盘上创建一个单独的设备交换区。因为这会导致磁头在盘上过多的移动,会使系统变慢。
如果你使用LVM(逻辑卷),请在不同的磁盘(物理卷)的逻辑卷上安装多个设备交换区。
为了达到更好的性能,每个设备交换区的大小应该相近。否则,当小一点的交换区的空间都被使用的是,更大的交换区的空间还是有效,这样就不能实现交错交换。
如何设置交换区的优先级
所有的设备交换区和文件系统交换区都被分配一个范围在0到10的优先级。这个优先级决定那一个交换区先使用。这个优先级是使用swapon 的-p选项来设置的。默认的值为1。
内存分页数据被送到你的交换区是根据以下的规则:
从更高优先级的交换设备或文件系统中开始。越低的数字,优先级越高;
如果多个设备有同样的优先级,交换区的分配是以循环的方式分配。也就是,在磁盘中交错进行,设备应该被赋予相同的优先级。同样,如果多个文件系统有同样的优先级,交换的要求会在这些文件系统中交错进行。
如果一个设备和一个文件系统有同样的优先级,设备交换区会在文件系统交换区之前使用。
推荐对大多数的交换设备都使用同样的优先级。除非一个设备比另外的设备明显要慢。分配相同的优先级可以减少磁头的移动,这会提高交换区的性能。
    选择文件系统交换区的原则
避免使用繁忙的文件系统例如root文件系统作为交换区
使用bdf命令检查文件系统剩余空间大小
合适地设置优先级
???-更快的设备的优先级应该大于慢的设备
???-不常用的文件系统的优先级应该大于繁忙的文件系统。
当你需要更多的交换空间,而你又没有磁盘空间来作为设备交换区的时候,你可以动态地增加文件系统交换区。
这些原则帮助系统管理员决定那个文件系统的那个部分被用作交换空间。再说一遍,这些规则都是为性能上的考虑。
一般来说,最好对交换区都分配最高的优先级以提供最快的性能。因此,给设备交换区分配比文件系统交换区更高的优先级;给更快的设备分配比慢设备更高的优先级,给低使用率的设备分配比高使用率的设备更高的优先级。使用同样类型的交换设备应该分配同样的优先级。这样才能利用交错交换的优点。
同一个盘上,使用两个文件系统(或物理卷)作为交换区,会导致磁头的过多的移动,同样会导致系统性能的下降。
注释:设备交换区提供了比文件系统交换区更好的性能,如果进行选择的话,请使用设备交换

论坛徽章:
0
2 [报告]
发表于 2003-10-23 16:16 |只看该作者

在加一个关于MEMORY 管理的

不错。

论坛徽章:
0
3 [报告]
发表于 2003-10-24 11:41 |只看该作者

在加一个关于MEMORY 管理的

good!

论坛徽章:
0
4 [报告]
发表于 2003-10-27 17:50 |只看该作者

在加一个关于MEMORY 管理的

好,讲的非常透彻,谢了!

论坛徽章:
0
5 [报告]
发表于 2003-10-27 18:51 |只看该作者

在加一个关于MEMORY 管理的

交换分区在什么时候设置,能不能在安装完后设置呢

最近我的机子出现了这个问题了

论坛徽章:
0
6 [报告]
发表于 2004-02-26 17:02 |只看该作者

在加一个关于MEMORY 管理的

不就是翻译一下吗?给点专业精神,翻译了请注明出处。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP