kswapd进程工作原理(四)——总结

本文详细分析了Linux内核中kswapd进程的工作原理,包括初始化、触发条件、内存回收策略。kswapd主要负责LRU链表和slab缓存的回收,确保系统内存的有效管理。通过kswapd_init启动,kswapd内核进程在内存压力下执行page回收,涉及shrink_node、shrink_list等关键函数,实现对active和inactive LRU链表的扫描,以及slab缓存的释放。
摘要由CSDN通过智能技术生成

注:本文分析基于linux-4.18.0-193.14.2.el8_2内核版本,即CentOS 8.2

kswapd进程工作原理(一)——初始化及触发
kswapd进程工作原理(二)——回收内存上半部
kswapd进程工作原理(三)——回收LRU链表

关于kswapd进程,我们通过之前这三篇文章分析了它的具体工作原理,现在就做一个简单的梳理,从大框架去回顾下。

kswapd_init---------------------------------kswapd进程初始化
  kswapd_run--------------------------------为每个内存节点创建kswapd内核进程
    kswapd----------------------------------kswapd内核进程主体函数
      kswapd_try_to_sleep-------------------kswapd尝试睡眠并且让出CPU
      balance_pgdat-------------------------kswapd无法睡眠,开始对当前节点回收页面
        kswapd_shrink_node------------------针对该节点回收内存页面
          pgdat_balanced--------------------检查当前内存节点是否处于高水位
          shrink_node-----------------------不满足高水位要求,开始扫描回收的页面
            shrink_node_memcg---------------遍历扫描该节点各个内存cgroup,回收页面
              shrink_list-------------------扫描各种LRU链表,尝试回收页面
                shrink_active_list----------扫描active LRU链表,把一些active页面迁移到inactive链表中
                shrink_inactive_list--------扫描inactive LRU链表,尝试回收页面
                  shrink_page_list----------扫描并尝试回收从inactive链表隔离出来的page_list链表的页面
            shrink_slab---------------------调用系统注册的所有shrinker,回收slab缓存

由上可知,kswapd回收内存最核心的两件事就是回收LRU链表上的页面和回收slab缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值