如何避免Linux的物理内存碎片化.doc
《如何避免Linux的物理内存碎片化.doc》由会员分享,可在线阅读,更多相关《如何避免Linux的物理内存碎片化.doc(4页珍藏版)》请在三一文库上搜索。
1、如何避免Linux的物理内存碎片化Linux buddyy系统是linux kernel比较稳定的一个模块,但是并不是说它没有缺陷,Linux内存管理系统自诞生之日,就一直存在物理内存碎片化的问题:在系统启动并且运行很长一段时间后,极端情况下,尽管总的可用物理page数目很高,但是空闲的连续物理内存可能并不大,这就造成申请大块连续物理内存分配时失败。尤其是当分配操作带有ATOMAIC标记时,系统连回收内存的机会都没有。避免碎片很长时间以来,物理内存的碎片化一直是Linux操作系统的弱点之一,尽管已经有人提出了很多解决方法,但是没有哪个方法能够彻底的解决,memory buddy分配就是解决方法
2、之一。 我们知道磁盘文件也有碎片化问题,但是磁盘文件的碎片化只会减慢系统的读写速度,并不会导致功能性错误,而且我们还可以在不影响磁盘功能的前提的下,进行磁盘碎片整理。而物理内存碎片则截然不同,物理内存和操作系统结合的太过于紧密,以至于我们很难在运行时,进行物理内存的搬移(这一点上,磁盘碎片要容易的多;实际上mel gorman已经提交了内存紧缩的patch,只是还没有被主线内核接收)。 因此解决的方向主要放在预防碎片上。在2.6.24内核开发期间,防止碎片的内核功能加入了主线内核。在了解反碎片的基本原理前,先对内存页面做个归类:1. 不可移动页面 unmoveable:在内存中位置必须固定,无
3、法移动到其他地方,核心内核分配的大部分页面都属于这一类。2. 可回收页面 reclaimable:不能直接移动,但是可以回收,因为还可以从某些源重建页面,比如映射文件的数据属于这种类别,kswapd会按照一定的规则,周期性的回收这类页面。3. 可移动页面 movable:可以随意的移动。属于用户空间应用程序的页属于此类页面,它们是通过页表映射的,因此我们只需要更新页表项,并把数据复制到新位置就可以了,当然要注意,一个页面可能被多个进程共享,对应着多个页表项。防止碎片的方法就是把这三类page放在不同的链表上,避免不同类型页面相互干扰。考虑这样的情形,一个不可移动的页面位于可移动页面中间,那么我
4、们移动或者回收这些页面后,这个不可移动的页面阻碍着我们获得更大的连续物理空闲空间。(图片来源:https:/images2015blogs/blog/758933/201703/758933-20170301165125907-1024080699.png)针对页面的分类,我们引入了movable zone,事实上movable zone是虚拟zone,是在运行时逐渐建立的。当然内核的确可以建立真实的内存zone。我们知道大部分buddy分配失败,发生在申请unremovable页面时。这样分类还有一个潜在的好处,为unremovable保留的页面,被reclaimable和movable分配
5、的优先级低(参见fallbacks),因此客观上减少了buddy分配unremovable页面的几率。数据结构kernel引入了一些宏来表示不同的迁移类型:#define MIGRATE_UNMOVABLE 0#define MIGRATE_RECLAIMABLE 0#define MIGRATE_MOVALBE 0#define MIGRATE_RESERVE 0#define MIGRATE_ISOLATE 0#define MIGRATE_TYPES 0类型MIGRATE_UNMOVABLE, MIGRATE_RECLAIMABLE和MIGRATE_MOVALBE就是我们上面介绍的三种页
6、面类型。如果向特定类型页面分配请求失败,紧急情况下可以从MIGRATE_RESERVE分配内存。当制定类型的空闲列表无法满足分配时,可以按照一定规则从其他类型空闲链表分配,这个次序用下面数据描述static int fallbacksMIRGRATE_TYPESMIGRATE_TYPES-1 = MIGRATE_UNMOVABLE = MIGRATE_RECLAIMABLE, MIGRATE_MOVABLE, MIGRATE_RESERVE, MIGRATE_RECLAIMABLE = MIRGRATE_UNMOVABLE, MIGRATE_MOVABLE, MIGRATE_RESERVE,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何 避免 Linux 物理 内存 碎片
链接地址:https://www.31doc.com/p-3429731.html