概述
MGLRU作为全新的LRU算法尤其独特之处,但是传统LRU算法中涉及的很多问题,MGLRU算法依然也要面对,比如本文即将讨论的在回收内存的时候,到底应该是回收anon 还是 file page,前面我们有一篇文章专门介绍了传统lru算法的策略和实现方式,可以作为参考和对比,看看两种回收方式的差异点:Linux 回收内存到底怎么计算anon/file回收比例,只是swappiness这么简单?-CSDN博客
由于当下时间点mglru全网分析的基本为0,这种问题只能去研究mglru的源码,接下来我们直接通过源码分析其实现方式:
源码实现
vmscan.c:
shrink_lruvec--->lru_gen_shrink_lruvec--->evict_folios--->isolate_folios--->get_type_to_scanstatic int get_type_to_scan(struct lruvec *lruvec, int swappiness, int *tier_idx)
{int type, tier;struct ctrl_pos sp, pv;int gain[ANON_AND_FILE] = { swappiness, 200 - swappiness };/** Compare the first tier of anon