Linux内存回收机制总结

本文详细解析了Linux内存管理机制,包括vmaflag中的VM_LOCKED标记、ZONE的水位控制、GFP类型的作用,Page相关标志位的功能,以及如何通过调整/proc/sys/vm/drop_caches来手动释放内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.当vma flag中标记VM_LOCKED时,表示这段内存不能被回收,要常驻内存中.

 2.   当ZONE的空闲页面数大于WMARK_HIGH时,这个ZONE就可认为是balanced(由函数zone_balanced()判断)

 3.    当ZONE的水位低于WMARK_LOW时,触发内核启动内存回收,当ZONE的水位高于WMARK_LOW时,停止内存回收,当水位低于MIN时,进入直接内存回收和规整,如果都无法分配内存,则进入OOM kill

GFP_ATOMIC不会等待内存回收和规整,但是可以使用min以下的内存,一般可使用0.5*min的内存。

GFP_MEMALLOC:可以使用所有内核内存

4.Page相关标志位。

PageWriteback(page)检查page是否设置PG_PageWriteback标志位,表示页面正在回写磁盘:

 PG_writeback:  is set before writeback starts and cleared when it finishes

PG_locked :     This bit is set before I/O and cleared when writeback _starts_ or when read _completes_.

PG_uptodate : tells whether the page's contents is valid.  When a read  completes, the page becomes uptodate

PG_referenced/PG_reclaim :are used for page reclaim for anonymous and file-backed pagecache

PG_head: 表示这个页是head page

PG_unevictable:表示页面不可回收.

PG_PageReclaim:如果页面是Dirty或者处于writeback状态,那么这种页面会放到不活跃链表头,并设置PG_PageReclaim.

PG_swapcache:表示页面是否分配了swap空间 PageSwapCache(page)

PageSwapBacked(page):检查page是否为匿名页面,Page is backed by RAM/swap

对PG_swapcache和PG_SwapBacked的一点理解,swapcache表示匿名页面已经交换(swap)到磁盘,

而SwapBacked,表示匿名页面的内容已经从磁盘换回(backed)到内存中.
设置page的标志位函数定义在头文件:include/linux/page-flags.h

5 共享匿名映射内存实现时,虽然关联到/dev/zero结点,当分配的内存page,挂接到lrulist的匿名非活跃链表。

6. 内核分配的内存kmalloc/alloc_page/vmalloc等等,不会挂接到zone的lrulist

7手动释放page cache

To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值