linux Kernel 添加 ZRAM 支持

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


你可能感兴趣的:(zram)