聊聊在手机上开启快速swap的可能性

描述

导语

在使用移动设备时,用户同时打开多个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-memory swap机制示意图

为了更加直白地展示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%,取得了不错的效果。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分