智能手机内外存可靠性研究
2016-09-01 17:23
344 查看
一. 研究目的
随着智能手机的计算处理能力越来越强,其所能做的事情越来越多,但在运行过程中(如Android)还是会存在卡顿现象。该研究的目的是要从内核层的内存管理、外存管理,框架层的虚拟机垃圾回收、显存管理等方面找出卡顿的原因所在。对于内核层的内存管理,又细分为了三个研究方向:内存碎片化带来的影响,low memory killer(lmk)带来的影响以及交换分区带来的影响。对于框架层的垃圾回收,也细分为两个方向:传统Dalvik虚拟机垃圾回收所存在的问题,最新的ART运行模式的垃圾回收存在的问题。研究的最后还提供了对应问题的可能的解决方案。
二. 内存(内核层)
1. 内存碎片
Buddy system原理机制(数据结构如下)。每个zone都有这11个链表,包含了不同大小(order从0到10)的连续物理块。
存在的问题
碎片化。系统使用一段时间后,内存链表中的连续物理块出现大量的内存碎块,导致在进行大块物理内存的请求性能低下:页面分配要从alloc_page变成alloc_page_slowpath,其分配速度会降低1000多倍。主要原因是此时对大块物理内存的分配不能满足(大块物理内存链表为空),从而需要对内存进行回收整理。
难以量化。传统量化方式是使用不可用指数(unusable index)。很难刻画全局碎片化程度,所以该研究给出了全局内存碎片化程度量化公式。
解决方案
主动内存碎片整理线程。当内存碎片程度超过90%以后,在后台开启一个线程进行direct compact和direct reclaim的操作。
基于Domain的内存分配方案。每个进程对应一个Domain,当进程有内存请求时,是以region为粒度进行分配(region的order可以选取2-7)。
2. low memory killer(lmk)
lmk回收原理。基于进程的优先级和其所占的内存大小对每个进程进行评分,然后根据评分结果进行终止进程。
存在问题:回收进程的选择精度存在问题,也就是说经常出现杀死过的进程马上又会被启动起来。
解决方案:更改lmk进程过滤模块。根据用户的使用习惯,在用户层对用户对应用的使用进行预测。然后根据预测结果来进行回收进程的选择。
三. 虚拟机垃圾回收(框架层)
1. Dalvik虚拟机和ART运行时垃圾回收存在的问题
Dalvik虚拟机垃圾回收采用的是Mark-Swap算法。其实现有非并行的和并行的两种方式。而对于ART垃圾回收,当Android应用程序在前台运行时,就使用Mark-Sweep垃圾回收的并行回收方式,这可以使得垃圾回收拥有较高的效率;而当Android 应用程序回退到后台运行时,就使用Compacting垃圾回收方式,这可以利用CPU时间对内存碎片进行整理。
回收效率问题。Dalvik回收效率低于ART。根据实验结果可以看出,完成一项任务,Dalvik垃圾回收触发的次数为356次,而ART垃圾回收触发的次数为19次。这说明了ART垃圾回收的效率大大高于Dalvik垃圾回收的效率。
回收频率问题。Dalvik垃圾回收的低效率导致了其高回收频率,反过来,ART垃圾回收的频率则相对较低。
2. 解决方案
多阈值控制垃圾回收频率。传统垃圾回收算法都是根据可用内存阈值来触发的,也就是说当可用内存降低到一个预设阈值时,就会立即出发垃圾回收,从而满足后续的内存请求。该方案设定了5个阈值,只有当第一次到达该阈值时才会进行垃圾回收,连续第二次到达该阈值时会选择以一定的大小增长堆。这样达到了降低垃圾回收频率的目的,同时也可以较好地满足垃圾回收需要。
基于页面引用统计的内存堆大小调节。
随着智能手机的计算处理能力越来越强,其所能做的事情越来越多,但在运行过程中(如Android)还是会存在卡顿现象。该研究的目的是要从内核层的内存管理、外存管理,框架层的虚拟机垃圾回收、显存管理等方面找出卡顿的原因所在。对于内核层的内存管理,又细分为了三个研究方向:内存碎片化带来的影响,low memory killer(lmk)带来的影响以及交换分区带来的影响。对于框架层的垃圾回收,也细分为两个方向:传统Dalvik虚拟机垃圾回收所存在的问题,最新的ART运行模式的垃圾回收存在的问题。研究的最后还提供了对应问题的可能的解决方案。
二. 内存(内核层)
1. 内存碎片
Buddy system原理机制(数据结构如下)。每个zone都有这11个链表,包含了不同大小(order从0到10)的连续物理块。
存在的问题
碎片化。系统使用一段时间后,内存链表中的连续物理块出现大量的内存碎块,导致在进行大块物理内存的请求性能低下:页面分配要从alloc_page变成alloc_page_slowpath,其分配速度会降低1000多倍。主要原因是此时对大块物理内存的分配不能满足(大块物理内存链表为空),从而需要对内存进行回收整理。
难以量化。传统量化方式是使用不可用指数(unusable index)。很难刻画全局碎片化程度,所以该研究给出了全局内存碎片化程度量化公式。
解决方案
主动内存碎片整理线程。当内存碎片程度超过90%以后,在后台开启一个线程进行direct compact和direct reclaim的操作。
基于Domain的内存分配方案。每个进程对应一个Domain,当进程有内存请求时,是以region为粒度进行分配(region的order可以选取2-7)。
2. low memory killer(lmk)
lmk回收原理。基于进程的优先级和其所占的内存大小对每个进程进行评分,然后根据评分结果进行终止进程。
存在问题:回收进程的选择精度存在问题,也就是说经常出现杀死过的进程马上又会被启动起来。
解决方案:更改lmk进程过滤模块。根据用户的使用习惯,在用户层对用户对应用的使用进行预测。然后根据预测结果来进行回收进程的选择。
三. 虚拟机垃圾回收(框架层)
1. Dalvik虚拟机和ART运行时垃圾回收存在的问题
Dalvik虚拟机垃圾回收采用的是Mark-Swap算法。其实现有非并行的和并行的两种方式。而对于ART垃圾回收,当Android应用程序在前台运行时,就使用Mark-Sweep垃圾回收的并行回收方式,这可以使得垃圾回收拥有较高的效率;而当Android 应用程序回退到后台运行时,就使用Compacting垃圾回收方式,这可以利用CPU时间对内存碎片进行整理。
回收效率问题。Dalvik回收效率低于ART。根据实验结果可以看出,完成一项任务,Dalvik垃圾回收触发的次数为356次,而ART垃圾回收触发的次数为19次。这说明了ART垃圾回收的效率大大高于Dalvik垃圾回收的效率。
回收频率问题。Dalvik垃圾回收的低效率导致了其高回收频率,反过来,ART垃圾回收的频率则相对较低。
2. 解决方案
多阈值控制垃圾回收频率。传统垃圾回收算法都是根据可用内存阈值来触发的,也就是说当可用内存降低到一个预设阈值时,就会立即出发垃圾回收,从而满足后续的内存请求。该方案设定了5个阈值,只有当第一次到达该阈值时才会进行垃圾回收,连续第二次到达该阈值时会选择以一定的大小增长堆。这样达到了降低垃圾回收频率的目的,同时也可以较好地满足垃圾回收需要。
基于页面引用统计的内存堆大小调节。
相关文章推荐
- Linux智能手机安全策略研究
- 智能手机为医疗研究开启新世界
- 深度长文:智能手机的社会学研究
- 拓墣研究:预测2011年智能手机出货量将超4亿部
- 2011年中国Android智能手机用户调查研究报告
- Linux智能手机安全策略研究
- 智能手机屏幕解锁图案研究
- 2011年中国Android智能手机用户调查研究报告
- 2016年中国智能手机市场发展趋势研究
- HTC欲整合全球智能手机资源致力于社会研究
- 智能手机制造问题研究
- 研究表明:睡眠不好跟智能手机没什么关系
- Linux智能手机安全策略研究
- 美国研究机构列辐射最大及最小10款智能手机
- 迎战智能手机时代,芯片厂商谁能笑到最后?
- 基于智能手机的加速计进行计步实现。
- 伯克利人工智能研究院最新研究:协作型工业机器人如何更智能?
- 关于Smartphone的智能手机键盘输入法的疑惑
- 树梅派应用47:用树莓派给智能手机发送推送通知