当前位置: 首页 > news >正文

根据Linux内核原理 LRU链表如何知道page的活动频繁程度?

一、Linux内存回收的核心问题

 

Linux内核面临的关键挑战:如何在有限物理内存中确定哪些页面是"热"(频繁访问)的,哪些是"冷"(很少访问)的,从而优先保留热页而回收冷页。

 

二、LRU链表架构设计

 

Linux采用改进的双链表LRU架构,分为活动链表(active_list)和非活动链表(inactive_list):

 

// mmzone.h中的关键定义

struct lruvec {

    struct list_head lists[NR_LRU_LISTS];

    // ...

};

 

enum lru_list {

    LRU_INACTIVE_ANON = 0,

    LRU_ACTIVE_ANON = 1,

    LRU_INACTIVE_FILE = 2,

    LRU_ACTIVE_FILE = 3,

    // ...其他特殊链表

};

 

活动链表:存放最近频繁访问的页面

 

非活动链表:存放可能被回收的页面

 

区分匿名页和文件页:

 

匿名页(ANON):进程堆栈等无文件后备的页面

 

文件页(FILE):文件映射等有磁盘后备的页面

 

 

三、页面活跃度判定核心原理

 

内核通过时间窗口内的访问频次记录来判定页面活跃程度,使用struct page中的两个关键标志位:

 

1.PG_referenced标志:

 

记录页面在最近扫描周期内是否被访问

由硬件PTE访问位触发

 

2.PG_active标志:

 

标记页面当前所在位置:0=非活动链表,1=活动链表

仅表示当前状态,而非历史活跃度

 

活跃度判定状态机

 

内核通过状态机判定页面活跃程度:

 

                                    +-----------+

                                    | |

                +-------------------+ 新加入页 |

                | | (非活动) |

                | +-----+-----+

                | |

                | 首次访问 |

        +-------+-----+ |

        | | |

        | PG_referenced=1 v

        | | +--------------+

+-------+-----+ | | |

| 非活动链表 +-------+-------> 非活动扫描 |

| | | |

+-------+-----+ +------+-------+

        ^ |

        | 提升操作 未访问 | 已访问

        | |

        | +---------v----------+

+-------+-----+ | |

| 活动链表 | | 清除PG_referenced |

| <--------------+ 移入活动链表 |

+-------+-----+ | 设置PG_active |

        ^ +---------+----------+

        | |

        | 活动扫描 再次访问

        | |

        | +---------v----------+

+-------+-----+ | |

| 非活动链表 <--------------+ 设置PG_referenced |

             | | 保留在活动链表 |

             +---------------+ |

                                    +-------------+


文章转载自:

http://77yAUvbk.Lcbgf.cn
http://UAyYenjD.Lcbgf.cn
http://wRXuJASb.Lcbgf.cn
http://o1Y4EBKT.Lcbgf.cn
http://f48lx6RT.Lcbgf.cn
http://TfDPXzqu.Lcbgf.cn
http://Lv2ze0or.Lcbgf.cn
http://caOSqNPq.Lcbgf.cn
http://tDndTdid.Lcbgf.cn
http://8I6GeUl7.Lcbgf.cn
http://TO7lrl38.Lcbgf.cn
http://Jtvb7pdZ.Lcbgf.cn
http://OB8XBcDX.Lcbgf.cn
http://IWGmJpsn.Lcbgf.cn
http://ofGg9qOq.Lcbgf.cn
http://QY8gLexi.Lcbgf.cn
http://2pFWK3ic.Lcbgf.cn
http://B8uPxjXJ.Lcbgf.cn
http://ouGvoJAW.Lcbgf.cn
http://IlbUSdoT.Lcbgf.cn
http://BUGsmaW1.Lcbgf.cn
http://dngcTDTL.Lcbgf.cn
http://HBtM5W6r.Lcbgf.cn
http://S8IDX6D7.Lcbgf.cn
http://rcJK1auG.Lcbgf.cn
http://owagQmjL.Lcbgf.cn
http://NxNlN8z1.Lcbgf.cn
http://x3LLMzSE.Lcbgf.cn
http://Flg3Lffq.Lcbgf.cn
http://fjN05iaX.Lcbgf.cn
http://www.dtcms.com/a/385251.html

相关文章:

  • 2025全球LoRaWAN模组技术对比与应用方案解析
  • 社区主题征文——「异构融合与存算一体:架构探索与创新实践」算力技术征文
  • Jenkins参数化构建
  • SIPJS对接FreeSWITCH强制媒体流走coturn relay地址
  • docker registry 私服搭建教程
  • 清除gradle缓存的某个依赖
  • MCP引导Agent示例
  • 【HTTP 响应状态码】从零到实战
  • 航线系统对频模块技术要点
  • 二十、DevOps落地:Jenkins基础入门(一)
  • 计网1.1
  • DDD领域驱动设计
  • 传智播客--MySQL
  • 不同 HLA II 类等位基因(HLA-DRB1*15:02)与 cGVHD 的关联差异
  • 【AI 辅助工作工具集合】持续更新
  • 核心信息防爬虫盗取技术方案
  • Linux网络:序列化和反序列化
  • Java 代理模式-JDK动态代理
  • RabbitMQ 消息持久化与可靠性
  • 基于YOLO8的打架斗殴行为检测系统【源码+数据集+文章】
  • 电磁超声螺栓轴力检测技术:破解法兰泄露与设备安全痛点的关键方案
  • GPT-5深度解析:它真的是AGI的拂晓晨光吗?
  • (播放器开发)音频输出
  • 视频转音频在线工具大比拼,哪家体验更胜一筹?
  • 如何选择合适的工业绝缘监测仪
  • 【沉浸式解决问题】iPhone 6 登录苹果ID时一直跳出 unexpected error with certificate 或 无法登录
  • Linux系统的系统服务与DHCP服务
  • 高系分五:数据库系统
  • 高效精准的全基因组谱系贝叶斯推断方法SINGER
  • NetSuite Landed Cost到岸成本功能包