1. MGLRU内存回收算法概述
MGLRU(Multi-Generational Least Recently Used)是近年来Linux内核社区提出的一种新型内存页面回收算法。作为传统active/inactive LRU算法的改进版本,它在Android系统中的应用正逐步兴起。我在实际的内核开发工作中发现,MGLRU通过引入多代页面管理机制,显著提升了内存回收的效率。
与传统LRU算法相比,MGLRU最大的创新在于将内存页面划分为多个"代"(generation)。每个代代表页面被访问的时间远近程度,最年轻的代包含最近被访问的页面,而最老的代则包含长时间未被访问的页面。这种设计使得系统能够更精确地识别出真正"冷"的内存页面,从而避免误回收那些频繁访问的"热"页面。
在Android系统中,MGLRU的表现尤为突出。由于移动设备的内存资源相对有限,且应用场景复杂多变,传统LRU算法经常会出现回收效率低下的问题。MGLRU通过其多代机制,能够更好地适应Android这种动态环境。我在测试中发现,在某些场景下,MGLRU可以将页面回收效率提升30%以上。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 荣耀在LSF/MM/BPF峰会上的提案分析
荣耀团队在即将举行的LSF/MM/BPF峰会上提交了关于MGLRU的四个关键问题。这个峰会是Linux社区在存储、内存管理和BPF领域最具影响力的技术会议,其讨论内容往往预示着未来1-2年内社区的技术发展方向。
2.1 匿名页与文件页的不平衡问题
荣耀提出的第一个问题涉及MGLRU中匿名页(anon)和文件页(file)的回收不平衡现象。根据我的实际测试,这个问题在Android设备上表现得尤为明显:
- 匿名页主要集中在最年轻的两个代中
- 文件页则分散在多个代中,且存在过度回收的情况
- 在16GB内存的设备上,MGLRU的可用内存比传统LRU少约1GB
这个问题不能简单地通过调整swappiness参数或使用ANON_ONLY标志来解决。我在内核开发中遇到过类似情况,发现这是因为MGLRU的设计机制导致:当文件和匿名页的代差距≥2时,系统会同步推进它们的代,这使得即使设置较高的swappiness值,也难以像传统LRU那样积极回收匿名页。
2.2 内存回收量的控制难题
第二个问题关注memcg(内存控制组)回
