内核版本说明

本页总结了每个内核版本中的主要功能,并提供了指向更多信息的链接。

内核 6.12 的新功能

本部分介绍内核 6.12 中的新功能。

内存分配性能分析

若要了解内存用量,关键在于了解分配位置。内核 6.12 包含一个名为内存分配性能分析(在配置中为 CONFIG_MEM_ALLOC_PROFILING)的内存分配归因新系统。使用内存分配性能分析时,每项分配都归因于一个具有唯一性的源代码行,以便快速发现分配问题。此外,内存分配性能分析还可:

  • 在工程阶段使用,但在标准 GKI 映像中可用。

  • 可通过使用 sysctl.vm.mem_profiling 启动参数来启用。

  • 适用于内核模块和已加载模块。

利用零复制和多重读取功能实现了更快的 io_uring

在内核 6.12 中,statsdlogd 模块使用 sendfile 零复制,从而提高了性能。

另外,此内核版本还实现了多重读取,即单次读取操作可以同时检索多条数据,从而提高了性能。

改进了柏克莱封包过滤器 (BPF) 功能和支持

在内核 6.12 中,BPF 工具链已移至支持 CO-RE 和多项现代功能。此外,新的 BPF 加载器还支持在 AOSP 中使用现代 BPF 进行程序开发。

代理执行

代理执行可让调度器向高优先级进程借用 CPU 周期,以恢复低优先级进程所持有的锁。此功能可缓解优先级倒置问题。

内核 6.6 的新功能

本部分介绍内核 6.6 中的新功能。

Rust 支持

多个内核 6.6 项目使用 Rust。

虚拟内存区域 (VMA) 级锁

内核 6.6 使用虚拟内存区域级锁来解决与 mmap_sem(以前称为 mmap_lock)的争用问题。因此,使用大量线程的应用的启动用时可能会减少多达 20%。

最早合格虚拟截止时间优先 (EEVDF) 调度器取代了 CFS

EEVDF 取代了完全公平调度程序 (CFS),以便在短时间运行的任务和长时间运行的任务之间更好地平衡 CPU 访问。

降低了读取副本更新 (RCU) 回调的功耗

RCU_LAZY 选项使用基于计时器的 RCU 回调批处理方法来节省电量。对于负载较低或处于空闲状态的系统,此选项可将功耗降低 5%-10%。

改进了 ZRAM 内存压缩

借助新的 CONFIG_ZRAM_MULTI_COMP build 设置,ZRAM 可以使用三种备选算法之一重新压缩网页。这种重新压缩会进一步缩减经过压缩的内存,为进行中的任务提供更多可用空间。

内核 6.1 的新功能

本部分介绍内核 6.1 中的新功能。

利用内核控制流完整性 (KCFI) 实现了更快的安全性

KCFI 取代了控制流完整性 (CFI),从而降低了运行时成本并使构建时成本为零。与 CFI 相比,运行时成本降低了,因此 KCFI 可在更多位置启用,尤其是跟踪点和供应商钩子。

除了 KCFI 之外,内核 6.1 还引入了多项安全功能,例如严格的 memcpy 边界检查和直线推测攻击缓解措施。

如需详细了解 KCFI,请参阅内核控制流完整性

多代 LRU (MGLRU)

我们已将 MGLRU 添加到内核 6.1 中,以便通过更好地识别实际正在使用的页面来改进内存管理。此改进减少了在系统内存不足时需要停止应用的情况。此更新还可改善用户体验,因为设备的整体响应速度更快。

MGLRU 的实现还包括对与 RCU 兼容的新 maple tree 的支持,在某些情况下,该 maple tree 可用于替换红黑树 (rbtree)。使用与 RCU 兼容的新 maple tree 时,由于其占用空间更小且无锁,因此性能会提高。

如需详细了解 MGLRU,请参阅多代 LRU

调度

维护和更新调度器是改进内核的关键工作。6.1 中的内核更新包括:

  • 添加了集群感知调度,通过迁移到共享 L2 缓存的内核来提升性能。
  • 移除了不必要的能源裕度启发法。通过限制某些迁移,此更新可将能源利用率提高多达 5%。
  • 改进了负载均衡,以缩短唤醒延迟时间。
  • 将 RCU 加速宽限期移至实时 kthread。此更新大大减少了与 RCU 相关的延迟离群值。

图形

内核 6.1 包含用于导出和导入同步文件的 dma-buf 新方法,以满足 Vulcan Video API 的需求。

新的 futex_waitv() 方法通过同时等待多个 futex 来简化从其他平台移植游戏的操作。

调试工具

在调试 build 中使用内核并发 SANitizer (KCSAN) 来识别内核代码中的竞态条件。

此外,您还可以使用内核内存 SANitizer (KMSAN) 查找内核中的未初始化值。

改进了 ARM64 支持

6.1 内核带来了对 ARM64 架构的多项改进,包括:

  • 支持 ARMv8.6 计时器扩展
  • 支持 QARMA3 指针身份验证算法
  • 为 ARMv9 可伸缩矩阵扩展 (SME) 提供初步支持
  • 改进了替代功能补丁,从而缩减了内核映像大小