论文部分内容阅读
物理内存是现代计算机的核心硬件资源,同时也是短缺的资源。内存中越来越多的进程数量以及日益增长的应用程序的内存占用,都让物理内存利用率的优化永远不能停下脚步。在众多物理内存利用率的优化方案中,大页的运用是一个典型的代表。大页技术在减少TLB(TranslationLookasideBuffer,转址旁路缓存)失效开销的同时,能减少操作系统管理的页表项数量,被现代计算机系统广泛支持。目前Linux系统的大页机制采用的是基于连续小页的复合大页。在这种机制下,页描述符所描述的页框依然是小页页框;需要大页的时候,系统分配连续的小页当成一个大页使用。复合大页兼容了原有的基于小页的物理内存管理模块,而且一般能切实有效地减少系统的页表项和降低TLB的失效开销。但是,这种复合大页技术没有减少管理物理内存的元数据开销,对大页的操作常常要分解成对小页操作的迭代。在空间和时间两个方面,大页技术都有进一步优化的可能性。一种可能的优化方案是物理大页(页描述符直接描述大页)的运用,但是物理大页的运用面临着挑战。首先,一般情况下物理小页应该得到保留。大页在适用场景中确实能显著提升整机性能和节约内存空间,但是大页的适用还是不如小页广泛。如果纯用大页,可能造成过多的内部碎片,反而没有提高内存利用率。如果不放弃小页,那么物理大页就要与物理小页共存,这为操作系统的设计提出了不少问题,比如物理内存空间如何分布,如何调整大页和小页的空间配额等等。本文从一种面向Linux系统下的hugetlbfs接口的物理大页技术出发,探讨其可行的物理内存空间布局。在一种物理大页与小页共存的布局下,设计与实现了一种页迁移方案来支持大小页内存池的运行时调整。本文的主要工作有:研究分析了 Linux系统支持的大页技术,包括从系统程序员的角度看到的共享大页内存和映射大页内存,以及从内核程序员的角度看到的透明大页(THP)以及hugetlbfs,同时还研究分析了一种基于Linux的面向hugetlbfs的物理大页技术。实现了物理大页上的页迁移机制,并运用大小页的页迁移机制,设计了一种混合页粒度系统的页迁移方案。实验评测了这种页迁移方案,并对内存利用率的优化进行了量化分析。