发布于
安卓SWAP探索 01
什么是SWAP?
SWAP是Linux下的一个磁盘分区,Linux内核可将其当作内存进行使用,以此来在不增加物理内存的情况下获得更大的内存。
SWAP的种类
SWAP
SWAP将磁盘上的一块指定大小的连续区域划为SWAP分区,在内存用量到达指定阈值时会将多出的内存内容写入到SWAP分区中,将SWAP分区作为内存进行使用,通过占用一部分磁盘增加设备的可用内存。
ZRAM
ZRAM是一种SWAP实现,它采用虚拟分区在内存上模拟出一块系统分区,它将内存中暂时不被用到的内容压缩起来,在需要的时候解压还原,以此变相增加设备的可用内存。
安卓上调整SWAP
在安装了Magisk或KernelSU的前提下,可以使用scene的swap附加模块方便快捷地调整安卓系统的swap分区及其相关参数。
有关ZRAM的调整
首先,也是最重要的,不要开ZRAM Writeback,没有必要。ZRAM Writeback是ZRAM的一个可选特性,它会将压缩后的内存内容写入磁盘中的ZRAM Writeback分区,在需要的时候会从磁盘读取出来后解压,这个过程涉及磁盘IO,与SWAP分区一样会减少磁盘的寿命,但是因为进行了磁盘IO,ZRAM的运行性能反而会下降。ZRAM Writeback也是手机厂商使用的内存融合、内存扩展所采用的技术,建议有条件的用户使用普通的ZRAM,不要使用ZRAM Writeback。
然后,就是ZRAM算法的选择,ZRAM算法决定了ZRAM的CPU占用以及ZRAM可压缩的内存内容大小(或者说ZRAM增加的等效内存大小),安卓平台的ZRAM有四种算法可选,分别是lzo-rle、lzo、lz4、zstd。安卓系统默认为lzo-rle,也是Linux上的ZRAM默认使用的算法,这是一种在压缩率、压缩速度以及CPU占用上取得了平衡的算法,lzo算法与其差不多,但是在一些极端情况下不如lzo-rle。lz4算法的压缩速度最快,CPU占用最低,但是压缩率最低。zstd算法的压缩率最高,CPU占用最高,压缩速度与lzo和lzo-rle差不多。所以建议CPU较好的设备使用zstd算法以增加更多的可用内存,CPU一般的设备使用lzo-rle,CPU较差但想使用ZRAM的设备使用lz4算法。
最后,就是ZRAM的大小问题,可以根据自己需要增加的内存大小以及ZRAM算法的压缩率计算需要分配多少的ZRAM,比如lzo-rle算法的压缩率约为20%~30%,设备的物理内存有8 GB,那么所有内存内容压缩后的大小为1.6 GB ~ 2.4 GB,即若将ZRAM设为8 GB时,可以为设备增加5.6 GB ~ 6.4 GB的等效内存,相当于此时设备的可用内存大小为13.6 GB ~ 14.4 GB。