admin管理员组

文章数量:1534890

2024年6月19日发(作者:)

谈谈内存压缩那些事

展开全文

1. 技术背景

说到压缩这个词,我们并不陌生,应该都能想到是降低占用空间,使同样的空间可以

存放更多的东西,类似于我们平时常用的文件压缩,内存压缩同样也是为了节省内存。

尽管当前android手机6GB,8GB甚至12GB的机器都较为常见了,但内存无论多

大,总是会有不够用的时候。当系统内存紧张的时候,会将文件页丢弃或回写回磁盘(如

果是脏页),还可能会触发LMK杀进程进行内存回收。这些被回收的内存如果再次使用

都需要重新从磁盘读取,而这个过程涉及到较多的IO操作。就目前的技术而言,IO的速

度远远慢于这RAM操作速度。因此,如果频繁地做IO操作,不仅影响flash使用寿命,

还严重影响系统性能。内存压缩是一种让IO过程平滑过渡的做法, 即尽量减少由于内存紧

张导致的IO,提升性能。

2. 主流内存压缩技术

目前linux内核主流的内存压缩技术主要有3种:zSwap, zRAM, zCache。

2.1 zSwap

zSwap是在memory与flash之间的一层“cache”,当内存需要swap出去磁盘的时

候,先通过压缩放到zSwap中去,zSwap空间按需增长。达到一定程度后则会按照LRU

的顺序(前提是使用的内存分配方法需要支持LRU)将就最旧的page解压写入磁盘swap

device,之后将当前的page压缩写入zSwap。

zswap本身存在一些缺陷或问题:

1) 如果开启当zswap满交换出backing store的功能, 由于需要将zswap里的内存

按LRU顺序解压再swap out, 这就要求内存分配器支持LRU功能。

2) 如果不开启当zswap满交换出backing store的功能, 和zRam是类似的。

2.2 zRram

zRram即压缩的内存, 使用内存模拟block device的做法。实际不会写到块设备中

去,只会压缩后写到模拟的块设备中,其实也就是还是在RAM中,只是通过压缩了。由

于压缩和解压缩的速度远比读写IO好,因此在移动终端设备广泛被应用。zRam是基于

本文标签: 内存压缩需要磁盘使用