HACK#15 ramzswap

本节介绍将一部分内存作为交换设备使用的ramzswap。

ramzswap是将一部分内存空间作为交换设备使用的基于RAM的块设备。对要换出(swapout)的页面进行压缩后,不是写入磁盘,而是写入内存。可以使用的内存仅为完成压缩的部分。压缩处理使用的是LZO[1]

ramzswap是从Linux 2.6.33合并到Staging驱动程序的。Staging驱动程序是指尚未达到某种程度的质量的试验性驱动程序。

通过使用ramzswap,运转速度可以比换出到一般磁盘设备时更高。这是因为内存的I/O较快,且经过压缩后I/O变小。只有用于嵌入式系统的内存等的机器中,可以避免内存不足时由于内存回收处理导致性能极端下降,或抑制OOM Killer的运行。

ramzswap的项目在如下环境中,即使减去压缩/解压缩的CPU系统开销,也可以提高性能。

·上网本或瘦客户机(thin client)这种配备了内存容量小但CPU性能较高的的PC。·在组装机器上,不想在外部闪存存储器(flash memory storage)中生成交换区时。使用ramzswap时,可以使用已经整合到上游内核的,也可以从论坛中下载并使用。

整合到上游内核的ramzswap实际安装了论坛的部分成果。本节将针对上游内核和论坛版内核进行介绍。Linux内核以2.6.35为例,论坛数据包以版本0.6.2为例。操作系统使用Fedora 12。

使用论坛版ramzswap

使用论坛版的数据包时,首先需要下载数据包进行编译。由于要对内核模块进行编译,因此必须事先安装kernel-devel。


$wget http://compcache.googlecode.com/fles/compcache-0.6.2.tar.gz

$tar zxvf compcache-0.6.2.tar.gz

$cd compcache-0.6.2/

$make


make命令结束后,将生成内核模块ramzswap.ko和ramzswap设备的控制工具—rzscontrol命令和rzscontrol命令的manual文件。

小贴士:ramswap版本0.6.2的运行已经在Linux 2.6.32中确认。使用RHEL6编译时,需要在ramzswap_drv.c的最前面加上#include<linux/slab.h>。

rzscontrol命令创建的路径为compcache-0.6.2/sub-projects/rzscontrol/rzscontrol, manual文件创建的路径为compcache-0.6.2/sub-projects/rzscontrol/man/rzscontrol.1。ramzswap版本0.6.2不会通过make命令自动安装。可以直接使用这些文件。

ramzswap的使用方法有两种。一种是在内存中创建虚拟交换区磁盘的ramzswap disk,另一种是在使用内存的同时使用交换文件或交换块设备的backing swap。一般系统与使用ramzswap disk、backing swap系统的内存和交换区的关系如图2-2所示。

HACK#15 ramzswap - 图1

图2-2 一般系统与使用ramzswap disk、backing swap的系统的内存和交换区的关系

首先介绍第一个ramzswap disk。

[1]关于LZO请见参考文献。