2009年5月4日星期一

Linux swap 是必需的吗?

新的 Ubuntu 9.04 发布后,我立刻就开始了体验。不得不说,较最近的 8.10 版,Ubuntu 9.04 的启动与运行速度都有了不少提高。
重新给笔记本分区安装新系统时,遇到了是否该给硬盘划分 swap(交换空间)分区的问题,因为之前从不少地方都曾见到过物理内存足够大,便可不必划分 swap 分区的评论。相对于大内存,我这台机器的 2GB 内存应该算是不小,但最终还是留出了 1GB 划分给了 swap 分区。从网络上得到一些保留 swap 的理由。
Linux divides its physical RAM (random access memory) into chucks of memory called pages. Swapping is the process whereby a page of memory is copied to the preconfigured space on the hard disk, called swap space, to free up that page of memory. The combined sizes of the physical memory and the swap space is the amount of virtual memory available.
Linux 把物理内存划分作称为分页(Page)的内存区块。内存交换是一个内存分页被复制到一个预配置的称为 swap 空间的硬盘空间里的过程,以此来释放内存分页。物理内存与这个 swap 空间的共同大小称为可用的虚拟内存量。
在这里,保留 swap 分区有两个重要的原因。
其一,当物理内存不足以支撑系统和应用程序(进程)的运作时,这个 swap 空间可以用作临时存放使用率不高的内存分页,把腾出的内存交给急需的应用程序(进程)使用。
再有,即使你的机器拥有足够多的物理内存,也有一些程序会在它们初始化时残留的极少再用到的内存分页内容转移到 swap 空间,以此让出物理内存空间。对于有发生内存泄漏几率的应用程序(进程),swap 空间更是重要,因为谁也不想看到由于物理内存不足导致系统崩溃。
如果你需要在 Ubuntu 下跑虚拟机或者常用休眠(Hibernate),推荐划分 swap 空间。

如果在使用过程中想要清空 swap 空间,可以先禁用 swap,然后再次启用。以 Ubuntu为例,
sudo swapoff -a
sudo swapon -a
通过系统监视器,例如 gnome-system-monitor,你就可以看到 swap 空间的内容被转移到了物理内存中。
可能也许你不习惯把一个分区留给 swap,那么也可以使用一个文件作为 swap 空间,设置方法如下。但是这样确实不如 swap 分区的性能来得好。
打开控制台,创建一个 512MB 的文件用作 swap:
sudo dd if=/dev/zero of=/mnt/512Mb.swap bs=1M count=512
格式化这个 swap 文件作为内存交换设备:
sudo mkswap /mnt/512Mb.swap
添加这个 swap 文件到系统:
sudo swapon /mnt/512Mb.swap
* 要在开机时就使用这个 swap 文件,需要编辑配置文件:
gksudo gedit /etc/fstab
* 在 /etc/fstab 最末加入这一行:
/mnt/512Mb.swap none swap sw 0 0
重启即可生效。

# 更多关于 Linux swap 的知识,可以阅读 Linux.com - All about Linux swap space / Ubuntu SwapFaq