一个物理页被分配之后,page其所挂载的链表从buddy空闲链表中摘除,会进入到active 或者inactive链表中,当物理内存water mark存在压力时会根据LRU(least recently unsed)策略将很久没有使用的物理页内存swap或者写入到磁盘中,以便将该页空闲出来供其分配使用。
在各种服务器中应用程序 为了提高性能,大都使用内存密集性策略,因此随着长时间使用或者较多服务时会出现内存压力,因此采用合理策略从正在使用的物理页中选出合适的物理内存swap到磁盘中,以供分配使用,显得特别重要。
内核对swap策略是 选择least recently used(LRU)即最近最少使用的页面将其内容置换到磁盘中以腾出空闲物理页给其分配使用。
LRU链表管理结构
内核LRU链表管理结构如下:
- 每个node 节点pg_data_t内 struct lruvec结构用于管理本节点内LRU链表。(注意在4.8版本之前LRU是基于zone,即LRU链表不是挂在pd_data_t下面也是挂载在zone结构内,主要是基于zone LRU管理方法会造成不同zone之前 物理页老化速率不一样,该patch由Mel Gorman 修改引入)
采用zone LRU链表方案主要是由于