导语
在使用移动设备时,用户同时打开多个app是很常见的。而这很容易造成移动设备的内存紧缺。在现有的方法中,无论是杀死进程(lmkd)来释放内存还是基于压缩算法的in-memory swap方式,都面临用户切换回被杀死的进程过程效率低下问题,这会影响用户体验。
ASAP是一种全新的swap机制,基于预取策略很好地改进了用户体验。其来自韩国首尔大学/谷歌等合作,发表于ATC 21。接下来本文将分成背景和动机、设计和实现和测试结果评估三个部分分别介绍ASAP诞生的背景、具体设计和效能。
背景和动机
安卓操作系统的内存管理机制
在安卓操作系统中,用户正在使用的app被认为是在前台(foreground),而其他启动过但是当前没有被使用的app则是在后台的。
内存紧缺时,Android有个守护进程lmkd,负责杀死最不重要的进程(比如某个后台进程),而该进程的数据自然就被释放了。内存中有个数据集存储被移入后台的进程的状态,用户切换回被lmkd杀死的进程时,根据这个数据集恢复进程数据。除此之外还有另一种方式即使用基于压缩算法的in-memory swap(ZRAM),下图为安卓操作系统in-memory swap机制示意图,其特点是需要压缩和解压缩匿名页,比通过I/O将匿名页写入磁盘更快,但是压缩的页依然占用内存空间且压缩解压缩占用CPU时钟周期。通常来说,lmkd会比这个机制先执行。
安卓操作系统in-memoryswap机制示意图
为了更加直白地展示lmkd和in-memory swap、普通的swap之间的差异,此处定义两个变量:
1) Launch Time:应用数据已经不在内存中,但是内存中依然有它的状态信息。应用利用这些状态信息从头重建所有活动所需要的时间,即被lmkd杀死的进程的重启时间;
2) Switch Time:应用数据依然在内存中。此使启动应用所需要的时间。
根据文件页和匿名页是否在内存中,进而进一步分成四个不同的时间:
1) Ideal Switch Time:进程的文件页和匿名页都在内存中
2) Switch Time(file-backed pages in disk):进程的文件页在磁盘中,匿名页在内存中
3) Switch Time(most pages not in memory):大部分页都不在内存中
4) Launch Time:所有页都不在内存中
下图展示了四种时间的差异。横轴是用来测试的八个应用和平均值,纵轴是四种时间的值,可见使用lmkd会比理想情况满四倍左右,应该尽可能减少lmkd的使用。
四种时间的比较
请求调页的缺陷
内存压力下,switch time的overhead来自于以下两个方面:
1)解压缩匿名页
2)从磁盘检索文件页
而造成switch time大大增加的罪魁祸首就是请求调页的低效率。下图表示switch过程中CPU和磁盘带宽利用率。在switch的过程中,CPU的平均利用率仅仅34.2%;,而磁盘带宽利用率仅9.4%。究其原因, 在于解压缩和读磁盘操作只在一次page fault时启动。
同时,实验者们发现,文件页和匿名页的交换足迹(footprint)不一样。文件页更加“不变”。即同一个应用被重新启动时,往往访问大量相同的文件页。原因是要访问许多相同的库文件。因此这给予实验者一个启示——为匿名页和文件页设计不同的预取器,利用预取来提高硬件利用率。
switch过程中CPU和磁盘带宽利用率
设计和实现
正如前文所说,为文件页和匿名页设计不同的预取器。对于文件页,利用不变的特点减少负载;对于匿名页,则利用实时信息追踪变化的switch footprint。其中的挑战是,如何准确地预测footprint。
1)针对文件页,如下图,设计了以下五个部分:
•Offline profiling
利用前十次交换,把访问超过八次的页当作预取的候选页。其结果被存储在一个文件中。( offline candidate table )。
•Fault logging
记录每次交换时的缺页信息。存放在fault buffer中。
•Prepaging Target Management – Insertion
匹配fault buffer和offline candidate table,能匹配到,则插入prepaging target table。
•Prepaging Target Management – Extent Merging
Extent:一次切换时同一文件中被访问的页的集合。
两个extent相近(小于16页的差距),则合并。
•Prepaging Target Management – Eviction
被预取的页只要在一次交换中没有被用到(检查mapcount是否为0),则从prepaging target table中移除。
文件页的预取过程
2)针对匿名页,如下图,设计了如下五个部分:
•Fault logging
记录所有匿名页的缺页中断。
•Access logging
根据页表的访问位,记录Prepaging Target Table和Online Candidate Table中的页在应用切换时的访问情况。
•Prepaging Target Management – Check & Insertion
把新的缺页中断加入Online Candidate Table。
•Prepaging Target Management – Promotion
若在Online Candidate Table中的页被访问了,则加入prepaging target table。
•Prepaging Target Management – Eviction
在prepaging target table和Online Candidate Table中的页有个超时计时器,每次切换时计时器减小,而页被访问时计时器重置,超时后页被丢弃。
匿名页的预取过程
测试结果评估
1. 在switch latency方面,在两种不同设备上(Pixel 4代表高端设备,Pixel 3a代表低端设备),基于baseline,平均性能提高了22.2%、28.3%。
写延迟示意图
2. 在预测器性能方面,平均准确率分别为匿名页68.4%,文件页79.3%;平均召回率分别为匿名页60.4%,文件页52.2%。
预测器性能示意图
3. 在资源利用率方面,平均提高CPU利用率1.18倍(反映了预取匿名页的影响);平均提高I/O带宽的使用率25.2%(反映了预取文件页的影响)。
总结
ASAP通过合理设计预取机制,在两种设备上,平均性能分别提高了22.2%、28.3%,取得了不错的效果。
-
cpu
+关注
关注
68文章
10824浏览量
211095 -
操作系统
+关注
关注
37文章
6727浏览量
123182 -
SWAP
+关注
关注
0文章
51浏览量
12795
原文标题:聊聊在手机上开启快速swap的可能性
文章出处:【微信号:SSDFans,微信公众号:SSDFans】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论