Linux内存从0到1学习笔记(11.2 内存优化方案之内存压缩zram)

Posted 高桐@BILL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内存从0到1学习笔记(11.2 内存优化方案之内存压缩zram)相关的知识,希望对你有一定的参考价值。

写在前面

zram是Linux内核提供的一种虚拟内存压缩功能,通过在将一部分内存模拟成块设备,并将压缩后的内存写到这部分模拟的块设备中,直到必须使用硬盘上的交换空间,zram 本质是就是一个块设备。

zram的触发时机是在进行内存回收的时候,如下:

1.kswapd:当内存watermark低于low水位时,kswapd回收线程被唤醒。

2.direct reclaim:内存分配过程中进入slowpath,进行直接内存回收。

3.compact:用户进程通过操作zram暴露的结点”echo 1 > /sys/block/zram0/compact"。

一、原理学习

zram机制运行在内存回收链路上,在内存回收过程中,会通过将当前不活跃的内存页进行shrink,如果是匿名页则进行pageout,触发内存压缩并存放到zram中。

android 设备上使用的 zram swap为例,其主要原理就是从内存分配一块区域出来用作 swap 分区,每次如果内存空间不够了,不是把应用程序杀掉,而是把应用程序所占用的内存数据复制到 swap 分区,等切换回来的时候就可以直接把这部分数据恢复到内存当中,节省重新开启所需的时间。而被放到 swap 分区的应用程序,所占用的内存都是被压缩过的,比如,微信在普通内存中占用 50 MB 的空间,如果压缩率为 0.4,则放到 swap 分区里面的数据只需要 20 MB 的空间,这样 swap 分区里面就可以存放更多后台临时不用的应用程序,变相扩展了内存的大小。

1.1 内存压缩链路

以上是关于Linux内存从0到1学习笔记(11.2 内存优化方案之内存压缩zram)的主要内容,如果未能解决你的问题,请参考以下文章

Linux内存从0到1学习笔记(九,内存优化调试之一 - kswapd0)

Linux内存从0到1学习笔记(九,内存优化调试之三 - 使用page owner调试内存黑洞)

Linux内存从0到1学习笔记(9.6,内存优化调试之page_owner拆解)

Linux内存从0到1学习笔记(9.5,内存优化调试之记录pid到page_owner)

Linux内存从0到1学习笔记(9.10 内存优化调试之panic_on_oom介绍

Linux内存从0到1学习笔记(9.7 内存优化调试之page_owner内存分配堆栈详解)---更新中