linux 内存回收机制

linux 4.14 aarch32

一、内存回收的对象

page_cache 文件映射缓存,文件读写和代码段等占用一些内存,缓存文件以提高文件访问的效率,当内存紧张的时候page_cache会被丢弃或者协会磁盘后丢弃,以回收物理内存

匿名映射因为不与文件关联想要回收其所占空间不能想pages_pache那样直接丢弃,利用外存空间将部分内存swap出去达到回收内存的目的

drop_caches

Writing to this will cause the kernel to drop clean caches, as well as
reclaimable slab objects like dentries and inodes.  Once dropped, their
memory becomes free.

To free pagecache:                                                                                                                                            echo 1 > /proc/sys/vm/drop_caches
To free reclaimable slab objects (includes dentries and inodes):
echo 2 > /proc/sys/vm/drop_caches 
To free slab objects and pagecache:                                                                                                                           echo 3 > /proc/sys/vm/drop_caches 


swappiness

This control is used to define how aggressive the kernel will swap
memory pages.  Higher values will increase aggressiveness, lower values
decrease the amount of swap.  A value of 0 instructs the kernel not to
initiate swap until the amount of free and file-backed pages is less
than the high water mark in a zone.

The default value is 60.

 

二、内存回收的时机

1.zone kswpad周期回收

vm中的每个zone会有一个kswap负责周期的内存回收,kswap源码在mm/vmscan.c

kswap回收的主要函数shrink_slab 和 shrink node

shrink_slab 是针对一些模块自己注册的shrinker 自定义cache回收

比如ubifs 中会register_shrinker就是回收本文件系统的TNC(tree node cache),用来缓存flash上的索引树,提高访问速度

/* UBIFS TNC shrinker description */
static struct shrinker ubifs_shrinker_info = {
	.scan_objects = ubifs_shrink_scan,
	.count_objects = ubifs_shrink_count,
	.seeks = DEFAULT_SEEKS,
};

shrink_node则是去shrink 可回收的LRU list

2.分配不到mem时候主动回收

直接回收发生在__alloc_pages_nodemask 中try_to_free_pages

 

三、LRU机制

LRU(最近使用)与二次机会原则(被使用两次的inactive页面会转换位active)是内存页面回收的方法

为了实现上述功能,kernel以zone为单位建立了五种不同类型的页面的链表,如下图所示,内核需要回收页面的时候会优先选择inactive链表中的末端reference为0的页面回收

page的active inactive与reference的状态的变换如下

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shenhuxi_yu

感谢投币,继续输出

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值