ZRAM那点事.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《ZRAM那点事.pptx》由用户(无敌的果实)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ZRAM
- 资源描述:
-
1、ZRAM那点事那点事ZRAM和和ZSMALLOC简介及简介及3个问题的改进和个问题的改进和1个提高个提高什么是ZRAM?Linux内核中提供的虚拟磁盘。将写入的页面压缩并分配内存存储在系统中。主要用来作为SWAP设备。常用在用闪存作为存储空间的设备上。为什么用ZRAM?(见下图)设备上可以不再需要开其他的SWAP。(区别于ZSWAP)节省了闪存的寿命。节省了硬盘空间。节省了BLOCK IO。通过压缩节省内存。Android下可用来提高进程保活度。LRU ShrinkerZRAMAndroid 无SWAPAndroid有SWAP什么是ZSMALLOC?(见下图)针对内存压缩场景设计的内存分配器。
2、类似其的还有ZBUD和Z3FOLD。ZRAM直接使用ZSMALLOC。ZSWAP通过ZPOOL框架使用其。ZSMALLOC内部结构(见下图)基本结构:每个对ZSMALLOC的使用者会申请一个zs_pool。每个zs_pool根据存储数据的大小分出若干size_class。每个size_class中根据元素占有状态分出4个fullness_list。每个fullness_list保存若干zspage,每个zspage由一个到几个几个不连续page组成。每个zspage(由最多4个非连续page组成)保存若干储存对象obj,ZRAM中每个page最终会被保存为一个obj。ZRAM通过handle以
3、映射的形式访问某个obj,因为是映射式的访问,highzone page也是可以使用的。(今年还有修改,后面会提到)比较重要:页面被压缩后存储为一个obj,被存于由页面组成的zspage中,外面访问其要通过handle。实际观测ZSMALLOC内部结构可在配置内核中打开CONFIG_ZSMALLOC_STAT=y。访问/sys/kernel/debug/zsmalloc/zram0/classes就可查看ZSMALLOC中的内部信息。注意查找彩蛋ZRAM使用中出现3大问题Minchan Kim于2015年提出:外部碎片 不能移动的页 内部碎片这三个问题有一定相关性,并且都需要在ZSMALLOC
4、中进行修复。从去年开始层层修复到今年在Upstream上全部修复完成。内部碎片(见下图)开ZRAM时间长了以后感觉内存还是不够。杀掉一堆进程后又感觉好点了。但是很快又不够了。内部碎片的成因(见下图)针对一个尺寸的size_class中实际存储数据的是obj。而obj被存储在zspage中,随着使用会不断有分配和释放,如果没有相应碎片处理,则会出现很多碎片化的zspage。内部碎片导致ZRAM内存使用率变差,影响ZRAM效果。注意这张图和前面的图不同,因为前面的图是根据修正后来做的。fullness_list最早的抗碎页机制(见下图)ZS_EMPTY,ZS_ALMOST_EMPTY,ZS_ALM
5、OST_FULL,ZS_FULL这4个zspage的列表。每个列表储存的ZSPAGE是其标记的所处状况。使用的时候优先从ZS_ALMOST_FULL中找ZSPAGE。缺点:完全被动,虽然分配抗碎页,但是释放还是碎片化的。_zs_compact主动碎片清理(1)准备工作(见下图)将handle从存储指向obj的数据改为指向obj的指针。这样zsmalloc内部可以根据obj位置的变化修改handle内容,ZRAM还可以找到某个页面对应的obj。_zs_compact主动碎片清理(2)实际处理(见下图)对一个size_class进行如下处理:按照先ZS_ALMOST_EMPTY,后ZS_ALMOS
6、T_FULL的顺序抽出一个来源zspage。然后按照先ZS_ALMOST_FULL,后ZS_ALMOST_EMPTY的顺序抽出一个目标zspage。把来源zspage中的obj依次移动到目标zspage中。将已经空了的来源zspage释放掉,再按照刚才的方法取得一个来源zspage。将满了的目标zspage加入ZS_FULL,再按照刚才的方法取得一个目标zspage。如此循环,直到无法取得来源zspage或者目标zspage。_zs_compact主动碎片清理(3)调用处理(见下图)zs_compact会依次调用_zs_compact对一个zs_pool中的每个size_class进行清理。需
展开阅读全文