【原创】(十)Linux内存管理
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 本文将讨论 memory reclaim 内存回收这个话题。 在内存分配出现不足时,可以通过唤醒 kswapd 内核线程来异步回收,或者通过 direct reclaim 直接回收来处理。在针对不同的物理页会采取相应的回收策略,而页回收算法采用 LRU(Least Recently Used) 来选择物理页。 直奔主题吧。 2. LRU和pagevec 2.1 数据结构 简单来说,每个 Node 节点会维护一个 lrvvec 结构,该结构用于存放5种不同类型的 LRU链表 ,在内存进行回收时,在 LRU链表 中检索最少使用的页面进行处理。 为了提高性能,每个CPU有5个 struct pagevecs 结构,存储一定数量的页面(14),最终一次性把这些页面加入到 LRU链表 中。 上述的描述不太直观,先看代码,后看图,一目了然! typedef struct pglist_data { ... /* Fields commonly accessed by