ZRAM, 简单的说,就是拿一部分内存当做交换分区使用,暂时不用的内存页面压缩后保存在 zram交换分区面.因为是压缩后保存的,所以可以省出一部分内存. zram 特别适合于内存有限,并且没有硬盘可以作为交换分区的设备上,特别是嵌入式系统里面.
如果系统想要使用 zram,首先要配置下内核,把 zram添加进来:
在 3.10内核上, zram 在 Device Drivers --- Staging Drivers 里面:
│ │ [*] Memory allocator for compressed pages │ │ │ │ <M> Compressed RAM block device support选中之后, 重新编译内核.会得到一个 zram.ko 文件.把它放到目标系统的 lib/modules/3.10.20/下面.
然后,还要修改 /etc/rc.local 如下:
4 modprobe zram && 5 echo $((256*1024*1024)) > /sys/block/zram0/disksize && 6 mkswap /dev/zram0 && 7 swapon -p 10 /dev/zram0 && sysctl -w vm.swappiness=10目的是加载zram 内核模块,配置zram 分区大小为 256M, 创建 zram交换分区,并设置优先级为 10.
最后,重启系统,第一次没有成功,有下面的错误:
zram: module is from the staging directory, the quality is unknown, you have been warned. zram: Unknown symbol lzo1x_decompress_safe (err 0) zram: Unknown symbol lzo1x_1_compress (err 0) modprobe: module 'lzo_compress' not found modprobe: module 'lzo_decompress' not found zram: module is from the staging directory, the quality is unknown, you have been warned. zram: Unknown symbol lzo1x_decompress_safe (err 0) zram: Unknown symbol lzo1x_1_compress (err 0) modprobe: 'zram.ko': unknown symbol in module or invalid parameter /etc/rc.local: line 7: can't create /sys/block/zram0/disksize: nonexistent directory
原因是有两个 zram依赖的模块 lzo_compress 和 lzo_decompress 没有加载进来.
把这两个模块加来之后,重新启动系统,这次就没问题了.
root@taotao:/#free total used free shared buffers Mem: 1033864 15792 1018072 0 248 -/+ buffers: 15544 1018320 Swap: 262140 0 262140