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_scan
-
-
- static 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 with that of