安卓手机为什么越用越卡?一个比较偏底层的解释

admin 2024年6月7日00:03:18评论8 views字数 1562阅读5分12秒阅读模式

最近看到有篇文章标题为 "[PATCH v7 0/4] per-vma locks in userfaultfd" https://lwn.net/Articles/962373/,由 Lokesh Gidra 发送至 Linux 内核邮件列表,主要讨论了在 Linux 内核中对 userfaultfd 功能进行的一系列改进。以下是对文章内容的总结分析:

主要内容:

  1. 问题陈述:在 Linux 内核的 mmap_lock(内存映射锁)的读模式下执行 userfaultfd 操作(如复制/移动等)会导致显著的锁争用问题。当有操作需要以写模式获取锁时,如果这些操作同时发生,争用问题会变得更加严重。
  2. 解决方案:提出使用每个虚拟内存区域(VMAs)的独立锁(per-vma locks)来显著减少锁争用问题。
  3. 背景:Android 运行时的垃圾收集器使用 userfaultfd 进行并发压缩。在压缩期间,mmap-lock 的争用可能导致用户体验不稳定。文章中提到了一个可复现的场景,通过应用这个补丁集,实现了以下改进:
    • 压缩阶段的墙钟时间从大约 3 秒减少到小于 500 毫秒。
    • 所有线程的不可中断睡眠时间在压缩期间大约是 10 毫秒(mmap_lock 中没有),而不是超过 20 秒。

补丁集变化:

v7 相对于 v6 的变化:

  • 添加了 vma_assert_locked() 函数,用于不支持 CONFIG_PER_VMA_LOCK 的情况。
  • 在 move_pages_huge_pmd() 中用 vma_assert_locked() 替换了 mmap_assert_locked()。

v5 相对于 v4 的变化:

  • 使用抽象函数名,以减少 #ifdef 的使用。对 anon_vma 相关的检查使用 unlikely 宏。
  • 消除多余的指针错误转换。
  • 将错误返回类型从 long 改为 int。

v4 相对于 v3 的变化:

  • 修复了 find_and_lock_vmas() 中可能出现的死锁。
  • 确保如果源和目标 VMA 相同,只锁定一次 VMA。
  • 修复了 move_pages() 中在成功锁定 VMA 后的错误处理。
  • 引入了辅助函数,用于在 mmap_lock 临界区中找到目标 VMA 并准备其 anon_vma。

v3 相对于 v2 的变化:

  • 重命名函数名,以清晰反映所使用的锁。
  • 在 mm/userfaultfd.c 中分离函数和抽象,以避免关于获取/释放哪个锁的混淆。
  • 为所有私有 VMA 准备 anon_vma,无论是匿名还是基于文件的。

v2 相对于 v1 的变化:

  • 实现并使用了 lock_vma(),它使用 mmap_lock 临界区通过 per-vma 锁锁定 VMA。

补丁集详情:

补丁集涉及的文件包括 fs/userfaultfd.c、include/linux/mm.h、include/linux/userfaultfd_k.h、mm/huge_memory.c 和 mm/userfaultfd.c。总共有 413 行代码被插入,196 行代码被删除。

结论:

回到标题,安卓手机在长期使用后会变慢的原因之一是优先级翻转问题。安卓系统和应用程序都是基于Java编写的,里面存在着数以千计的锁。有时一个低优先级的进程(可能是流氓程序)获取了锁,就有可能导致优先级翻转,从而阻塞了高优先级进程的运行。为了解决这个问题,最新的安卓补丁通过引入userfaultfd机制来优化锁争用和内存管理效率,有助于减少垃圾回收时的卡顿。具体来说,它使用per-vma锁代替了mmap_lock,从而在内存页面操作时减少了锁竞争,进而降低了垃圾回收过程中的延迟。总的来说,通过减少锁争用和优化内存管理,最新补丁旨在提高安卓系统的响应速度,缓解长期使用后手机变卡的问题。最新情况是谷歌已经将这个补丁合并到了安卓主线,国内厂商只有等谷歌发布更新了,再加上各厂商的优化估计得一段时间了。

原文始发于微信公众号(独眼情报):安卓手机为什么越用越卡?一个比较偏底层的解释

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月7日00:03:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   安卓手机为什么越用越卡?一个比较偏底层的解释https://cn-sec.com/archives/2821357.html

发表评论

匿名网友 填写信息