学会这些小技巧,离精通更进一步
内核也提供了接口给用户触发规整动作,接口如下: /proc/sys/vm/compact_memory 只要往这个节点写值即可触发对系统所有node管理的内存做内存规整。 2.kcompactd (1)kcompact设计原理 kcompactd是一个内核规整的后台进程,它跟memory compaction的区别在于: memory compaction的触发途径是内存分配进入direct_reclaim(暂不分析costly_order情况)后系统会根据内存剩余判断是否触发内存规整,或者用户手动触发; kcompactd在唤醒kswapd或者kswapd进入休眠时,主动触发内存规整。 kcompactd的触发路径如下:主要有如下两个途径:
唤醒kswapd之前触发规整,触发的条件是:本次分配不支持direct_reclaim,node内存节点是平衡的,并且kswapd失败的次数大于MAX_RECLAIM_RETRIES(默认16)。 当分配页面时,伙伴系统拿页面的步骤如下:(不考虑内存慢速路径)
当向伙伴系统释放页面时,buddy释放页面的步骤如下:
三、Linux针对物理内存外碎片化的措施 从“二、Linux物理内存管理架构”,可以发现伙伴系统内存管理框架是可以有效改善物理内存外碎片的,因为伙伴系统有如下两个管理逻辑,可以减少了外碎片化的产生:
除此之外,内核还支持以下措施改善物理内存外碎片化(只列举主要的机制): 1.memory compaction (1)内存规整原理 Linux物理页面规整机制,类似于磁盘整理,主要是应用了内核的页面迁移机制,是一种将可移动页面进行迁移后腾出连续物理内存的方法。
假设存在一个非常小的内存域如下: (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |