以下数组明确了各种页面类型可偷的页面类型,例如第一行表示UNMOVABLE页面可以偷RECLAIMABLE和MOVABLE类型的页面,其他类似 。
文章插图
如果不可移动页面频繁的偷页会导致不可移动页面很快污染了内存环境,特别污染了可移动页面的内存,对内存规整成功率的影响比较大 。基于以上情况,可以在偷页的机制上加上分配大小限制的判断,不可移动页面只有大块内存分配才允许偷页,以此减少不可移动页面对内存环境的污染 。
- 不可移动类型页面偷页后主动偿还
(2)降低分配页帧号的随机性
假设有一块小内存域如下,以下两种内存分配方式哪种会导致严重的内存碎片化?
- 页面从头部开始分配,直到尾部;
- 页面随机从任何位置分配 。
文章插图
明显是第二种内存分配方式的对内存外碎片化更不友好,而这点也是伙伴系统目前没有解决的问题 。伙伴系统虽然将内存规划成各种大小的内存块,以让小内存分配在小块链表分配,尽量不污染大块内存链表,但是却没办法保证小块内存具体是在物理内存的哪个页帧范围分配 。随着系统的运行越久,小块内存的分配的物理页帧号越发随机,那么其导致碎片化的概率就会越高 。
- 预留法
预留一定的内存专门用于小块内存分配,经过这个优化措施后,可以有效降低小块内存分配的物理页帧号的随机性,从而降低小块内存污染内存环境的概率 。
预留一定的内存专门用于大块内存分配,经过该优化措施后,预留的内存被小块内存污染的概率就会降低,可以提升预留内存分配大块内存的成功率 。
另外关于降低伙伴系统分配页帧号随机性,还是存在很多优化的措施,后续根据需要会专门开展一篇阐述该部分优化的文章,如果读者有兴趣,到时可以查阅 。
参考文献
1、内核源代码
2、http://tinylab.org/lwn-368869/
3、https://patchwork.kernel.org/patch/
【Linux 物理内存外碎片化浅析】
推荐阅读
- 老电脑升级加固态硬盘还是内存、CPU、显卡?旧电脑升级硬件建议
- linux中tcpdump的详细用法
- Linux 建立本地yum源
- 网络防御-防火墙设置IP网段规则
- 同样的内核,为什么linux干净稳定,而android臃肿又乌烟瘴气?
- RedHat Linux系统U盘安装图文教程
- 科普|物理学家在水下开枪“自杀”:把科学作S玩明白了
- linux入门命令详解
- Linux第8课:Redirection的4类7种方法,实现文件的呼叫转移
- 学习 Shell 脚本编程的免费资源 | Linux 中国