Android适配低内存

http://blog.csdn.net/gcc_sky/article/details/21093309


5 Android适配低内存

5.1 介绍

Android现在支持512MB内存的设备。该文档的旨在指导OEMs厂商优化和配置android4.4上的低内存设备。

5.2 Android平台优化

5.2.1 改善内存管理
  1. 已验证过的省内存内核配置:Kernel Same-page Merging(KSM)和交换到ZRAM
  2. 杀掉哪些无法再缓存或已缓存过大的进程
  3. 禁止开销大的服务嵌入到Android服务,所以不会导致luncher被杀掉
  4. 杀掉哪些长期空转的进程,尽管是一般不可杀的当前IME
  5. 系列化launch的后台服务
  6. 微调低配设备的内存使用:加大OOM的调整级别,更小的图形缓存,等


5.2.2 精简系统内存
  1. 裁剪系统服务和系统UI进程,可节省几MBs
  2. 往Dalvik中预载dex cache
  3. 关掉JIT-off选项
  4. 减少每个进程前端cache开销
  5. 在framework中引进ArrayMap/ArraySet替代HashMap/HashSet


5.2.3 Procstats

增加一个新的开发选项,用来显示内存状态和应用程序内存使用

5.2.4 API

增加ActivityManage.isLowRamDevice(),以便应用程序子啊运行时能检测系统内存规格,并决定是否选择Low-Memory功能

5.2.5 Memory Tracking

新的内存追踪HAL,用来追踪graphics内存分配,在dumpsys meminfo中增加额外的信息,显示meminfo的概貌

5.3 编译时配置

5.3.1 打开Low Ram Device标志

PRODUCT_PROPERTY_OVERRIDES += ro.config.lowram=true

5.3.2 关掉JIT特性

PRODUCT_PROPERTY_OVERRIDES += dalvik.vm.jit.codecachesize=0

5.3.3 Launcher 配置

不支持动态壁纸

5.4 内核配置

5.4.1 调节kernel/ActivityManager,减少内存直接回收

当一个进程或内核尝试分配一页内存(直接或者在产生新的page fault),但内核已用光所有可用的内存时,内存直接回收将被触发。

当释放页时,内核需要阻塞分配内存。接着轮流请求磁盘I/O协会脏的page,或者等待lowmemorykiller去杀掉一些进程,这将为每个线程带来额外的I/O开销。

内核有触发kswapd或者后台回收的watermarks,这些线程将周期性地回收内存。触发后台内存回收的默认阈值相当低,2GB的设备为2MB,512MB的设备配置为636KB。

内核在后台回收通常仅仅回收几MB内存,这意味着进程只要申请超过几M内存,那么很快就会被直接回收。

这次升级提供补丁去配置一些预留的内存,如:/proc/sys/vm/extra_freekbytes

5.4.2 调整LowMemoryKiller

A ctivityManager设置LowMemoryKiller的阈值,以调整每个进程运行时的缓存大小

5.4.3 KSM(Kernel samepage merging)

KSM是一个运行在后台的线程,用来比较内存中哪些页在上层程序运行时被标记为MADV_MERAGEABLE;如果发现两个page相同,KSM线程就会把它们合并到一个写时拷贝的页中。KSM可以为系统节省内存,但同时因为内存拷贝操作,而带来更大功耗。

打开内核选项:CONFIG_KSM

上层配置借口:

write /sys/kernel/mm/ksm/pagestoscan 100

write /sys/kernel/mm/ksm/sleepmillisecs 500

write /sys/kernel/mm/ksm/run 1

相关调试工具:procrank,librank,&ksminfo

5.4.4 swap to zRAM

zRAM通过压缩内存页并放于动态内存来增加系统可用内存。但是,它会带来CPU开销。

内核选项:CONFIG_SWAP

CONFIG_CGROUP_MEM_RES_CTLR

CONFIG_CGROUP_MEM_RES_CTLR_SWAP

CONFIG_ZRAM

挂载命令:/dev/block/zram0 none swap defaults zramsize=<size in bytes>,swapprio=<swap partition priority>

5.4.5 carveouts,Ion 和 Contiguous Memory Allocation(CMA)

低内存的设备重视CARVEOUTS是很重要的,特别是还没被充分利用的情况下,如用于secure video 回播。这里有几种针对依赖于硬件额外设计的carveouts region的优化方案:

  1. 如果硬件允许不连续的内存分配,ION heap允许从系统内存分配内存,以减少对carveouts的使用;
  2. 如果memory regions必须是连续的或限制在特定地址方位时,可以用CMA

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值