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)