资讯 更多 >>
漳州举办“数字工匠”职工职业技能...
河南4名阳性人员私自返乡并瞒报情况...
山西吕梁:发现盗采矿产资源行为可举报
受害方律师:接法院通知,乐安命案...
橙色——“柑橘院士”邓秀新心中最...
刷视频相认的双胞胎姐妹:两次创业...
四川通报2021年秋冬季首批大气污染...
首轮筛查:天津73443人全部阴性!
首席气象预报员张霞:30年坚守筑牢...
杭州火灾系二房东与房客纠纷引起 ...
动态更多 >>
如何改进移动系统的内存管理?
国泰君安国际(01788)拉开“818理财节”帷幕
专访焰火总设计师:空中看大运会焰...
辣不辣?告一哈!看四川人民怎么向...
7月31日 9:44分 华锋股份(0028...
“新茶饮上市”正当时?
巴陵石化环氧树脂出口量增七成
金士顿高调亮相ChinaJoy 2023!内...
装修的先后顺序是什么 装修的先后顺序
感恩优秀作文600字记叙文 感恩话题...
会展 更多 >>
美籍酿酒师在崇礼:中国是第二故乡...
河南项城报告2名疑似新冠肺炎病例 ...
浙江绍兴确诊病例首次零新增 上虞...
广西东兴实行全员居家隔离 启动口...
新疆全方位推进乡村振兴 “富春山...
云南瑞丽市主城区全员核酸检测结果...
内蒙古满洲里累计治愈出院本土确诊...
孙海洋夫妻驱车山东阳谷:还在为孙...
大国工匠追梦“玉米强国”40载:用...
让南海“海洋热带雨林”斑斓多彩
专题报道 
当前位置: 动态 > >> 正文
 
如何改进移动系统的内存管理?
来源:SSDFans     时间:2023-07-31 11:02:54

1、背景&问题

A、现今移动系统的内存管理对用户程序和用户来说都不友好:

① 上层应用程序以object为单位进行内存分配和回收,而底层内核以page为粒度进行内存管理。这导致系统不了解应用程序内存使用情况,往往直接分配固定大小的内存预算(heap)。而应用程序实际工作集只占应用程序被分配的heap大小的很小一部分,造成内存资源的浪费;


(相关资料图)

② 当内存资源紧张时,系统会直接杀死应用程序(lmkd),而重新启动应用程序需要很长时间,并且应用程序并没有积极使用被分配的内存;

B、传统的swap机制效果不好:

① 传统的swap机制不适用于托管语言(比如,Java),因为这类语言运行时的垃圾回收会导致额外的swap操作,让工作集的估计变得困难;

② 传统的按需swap无法满足基于触控响应的移动设备,在内存压力下,会造成延时和卡顿;

基于以上分析,作者提出对移动系统来说,限制内存管理改善的主要问题是底层系统缺少对上层系统语言运行时(比如,AndroidRun Time,ART)的了解。

2、设计

本文提出一种新的内存管理机制Marvin。Marvin的核心思想是结合Android系统内核内存管理机制和上层Java运行时,重新设计针对移动系统的swap机制。

A、Marvin包括三个基本功能:以对象为粒度的工作集估计、提前进行swap以及带书签的垃圾回收机制(Bookmarking garbage collector)。

以对象为粒度的工作集估计:

Marvin利用这个设计识别提前swap的候选并且将垃圾回收访问与应用程序访问分离;由于缺乏硬件访问位来帮助进行跟踪,Marvin实现ART 解释器和编译器中的软件访问跟踪,因为现代移动语言运行时同时运行解释代码和编译代码。

提前进行swap:

Marvin将磁盘交换与回收内存分开,提前swap。根据不同object的状态,划分两类object:saved objects,已经复制到磁盘,但仍然驻留在内存中;reclaimed objects,不再驻留在内存中,只存在于磁盘中。

带书签的垃圾回收机制:

垃圾回收器在遍历对象堆以查找未使用的对象时可能会无意中在内存中进行换页导致swap操作。Marvin 通过将修改后的书签垃圾收集器集成到 Android 运行时来解决这个问题

B、Marvin包括三个核心设计:存根(Stubs),相当于对象之间的中间层;回收表,运行时和底层系统进行访问协调swap工作;对象访问干预(Object access interposition),使得系统在运行时可以透明的采取行动。

对象引用间接存根:

Marvin 需要在相互引用的对象之间建立一个间接层,捕获对换出对象(swapped-out)的访问;存根提供该间接层,它是位于 Java 堆中小型伪对象,指向真实对象并且存储真实对象引用的副本。

底层系统-运行时协调的回收表:

Marvin 需要一种让运行时和操作系统协调的方法,告诉 OS 哪些对象可以被回收,防止操作系统回收运行时正在使用的对象。同时共享内存回收表允许这种协调,存储对象的位置和大小,并具有用于锁定的元数据位。

对象访问干预:

当应用程序代码访问对象时,运行时需要一种透明的方式恢复换出的对象并且更新工作集元数据。同时,对象访问干预是通过一系列成对解释器和编译器的修改来实现的。具体来说,解释器在执行对象访问时直接行动,编译器围绕对象访问生成额外的 ARM64 指令。

C、Marvin三个基本功能的工作过程:

以对象为粒度的工作集估计:对对象设置访问位;扫描访问位;产生工作集(Marvin 在每个对象标头中保留四个字节,并使用它们来存储交换元数据和访问位)。

设置访问位

GC扫描访问位,产生以对象为粒度的工作集

提前swap:将对象提前保存到外存;回收对象;恢复对象。

带书签的垃圾回收机制:运行时使用对象访问干预来维护存根引用;GC 在不接触底层对象的情况下检测存根和读取引用。

3、实现

Marvin 有两个关键组件:(1) Marvin 内核 (MK),修改后的 Android/Linux内核(MK 的唯一职责是通过决定何时以及从哪个应用程序回收内存来平衡应用程序之间的内存分配。),以及 (2) Marvin Runtime (MRT),一种改进的 ART(它执行工作集估计、提前交换和书签垃圾收集)。

4、实验

A、实验配置:Pixel XL phones,Android 7.1.1 (orour modified build)

B、性能指标:运行App数量;提前swap的效率;开销

Marvin 可以运行的应用程序数量是普通 Android 的 2 倍以上,同时在带有 Linux swap 的 Android 上,少量分配会使应用程序无法使用;

Marvin 回收内存比带 Linux swap 的 Android 快得多

5、总结

相比起之前优化移动系统内存管理(尤其是swap)的设计,Marvin的创新性在于结合上层高级语言运行时和底层内核对内存管理优化这一经典问题提出针对性设计。尽管Marvin的具体设计取得文章所述的收益有待验证,但作者发现的这一问题确实存在,即软件运行时和底层内核运行存在信息壁垒。通过设计合理的机制来解决这一问题,应该能够带来系统性能的有效提升。审核编辑:刘清

关键词:

热门推荐
猜你喜欢