作者:吴业亮
博客:wuyeliang.blog.csdn.net

zram(也称为 zRAM,先前称为 compcache)是 Linux 内核的一项功能,可提供虚拟内存压缩。zram 通过在 RAM 内的压缩块设备上分页,直到必须使用硬盘上的交换空间,以避免在磁盘上进行分页,从而提高性能。由于 zram 可以用内存替代硬盘为系统提供交换空间的功能,zram 可以在需要交换 / 分页时让 Linux 更好利用 RAM ,在物理内存较少的旧电脑上尤其如此。

即使 RAM 的价格相对较低,zram 仍有利于嵌入式设备、上网本和其它相似的低端硬件设备。这些设备通常使用固态存储,它们由于其固有性质而寿命有限,因而避免以其提供交换空间可防止其迅速磨损。此外,使用 zRAM 还可显著降低 Linux 系统用于交换的 I/O 。

zram 在 2009 年的时候就进了 kernel 的 staging 目录,并于 2014 年 3 月 30 日发布的 3.14 版本正式合并入 Linux 内核主线。在 2014 年 6 月 8 日发布的 3.15 版本的 Linux 内核中,zram 已可支持 LZ4 压缩算法,而 LZO 仍然作为默认的压缩后端。内核 3.15 中的修改还改进了性能,以及经由 sysfs 切换压缩算法的能力。

Lubuntu 于 13.10 开始使用 zram 。截至 2012 年 12 月,Ubuntu 考虑为小内存的计算机默认启用 zram 。 Google 在 Chrome OS 中使用 zram,它也成为了 Android 4.4 及以后版本设备的一个选项。
本文主要介绍在 Android 设备上使用的 zram swap,它可以让小内存的设备在多任务的情况下切换自如,提高用户体验。

zram swap 主要原理就是从内存分配一块区域出来用作 swap 分区,每次如果内存空间不够了,不是把应用程序杀掉,而是把应用程序所占用的内存数据复制到 swap 分区,等切换回来的时候就可以直接把这部分数据恢复到内存当中,节省重新开启所需的时间。而被放到 swap 分区的应用程序,所占用的内存都是被压缩过的,比如,微信在普通内存中占用 50 MB 的空间,如果压缩率为 0.4,则放到 swap 分区里面的数据只需要 20 MB 的空间,这样 swap 分区里面就可以存放更多后台临时不用的应用程序,变相扩展了内存的大小。
1、磁盘 swap和zram区别
 磁盘 swap:是把磁盘的一部分作为内存, 对应用来说完全是透明的,相当与增大了内存, 但是缺点很明显, 当用到swap的时候,速度会变的很慢。
 zram: 是把物理内存的一部分划分出来,把不是常用的内存数据压缩后放到zram里, 用到的时候把数据解压出来, 相当于牺牲了一些cpu效率,变相增大了内存。
 
2、判断是否支持zram 
如果设备支持zram,肯定是优先使用zram, 不过有的设备内核比较旧,只有使用磁盘 swap了。
查看设备是否zram的方法:
adb到设备中shell中, cd /dev/block/ 下, 看是否有zram0 或zram1
如果没有该文件,也不一定是设备不支持zram, 也有可能是内核中没有把zram选项勾中,可以到内核源码中搜索 zram

3、使用ZRAM
修改/etc/profile,在最下面加上以下代码

if [ ! -e /dev/zram0 ];then
    modprobe zram num_devices=1
    echo 1024M > /sys/block/zram0/disksize # 1G的zram,可以根据实际情况修改
    mkswap /dev/zram0
    swapon -p 100 /dev/zram0
fi

立即生效

# source /etc/profile

积极使用zram修改swappiness

# echo "vm.swappiness=100" >> /etc/sysctl.conf  
# sysctl -p

可选:修改/etc/fstab,禁用自带的swap

# sed -i 's/^\/dev\/mapper\/centos-swap/#&/g' /etc/fstab
Logo

更多推荐