linux内核异步内存回收的另一个思路:基于冷热文件的冷热区域精准的回收冷文件页( 六 )


【linux内核异步内存回收的另一个思路:基于冷热文件的冷热区域精准的回收冷文件页】可以发现,这个流程主要讲解怎么一个个扫描文件,从 ->链表尾扫出冷,然后把冷对应的文件页page回收掉 。还有就是->和->链表上怎么降级到->链表,热文件、大文件怎么降级为普通文件等等 。源码就不再列了,后续的文章再讲解 。
5:总结
本文只是简单介绍了一下异步内存回收的大体方案,实际还有很多细节没讲解,比如:
当然,还有很多其他细节,代码开发测试过程也遇到很多棘手的bug!就不在本文介绍了,后续再单独写文章 。其实有一个想法,能否把本方案的一些源码合入内核呢?比如:修改内核原来保存文件页page指针的radix/ tree,不再保存page指针,而是保存和page指针的联合体 。文件页page被访问则的age跟随全局age增加,据此判断和文件页page的冷热 。再开一个内核线程回收冷对应的文件页page 。原理是类似的,对内核的改动也比较小,同时应该能实现不错的异步内存回收效果 。
本次实践是个不错的学习内核内存回收的机会!在模仿内核原生内存回收源码,修改成适用于本方案的内存回收代码的过程中,对内存回收的理解加深了很多 。目前已经解决了很多bug,但不排除还存在隐藏bug,欢迎大佬的指导和批评指正 。