[发明专利]一种提高操作系统大页使用率的方法有效
申请号: | 201410146873.3 | 申请日: | 2014-04-14 |
公开(公告)号: | CN103984599B | 公开(公告)日: | 2017-05-17 |
发明(设计)人: | 汪小林;罗韬威;罗英伟 | 申请(专利权)人: | 北京大学 |
主分类号: | G06F9/50 | 分类号: | G06F9/50 |
代理公司: | 北京君尚知识产权代理事务所(普通合伙)11200 | 代理人: | 余长江 |
地址: | 100871 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 提高 操作系统 使用率 方法 | ||
技术领域
本发明涉及一种提高操作系统大页使用率的方法,属于操作系统内存管理技术领域。
技术背景
分页机制是现代CPU所共有的特征。它建立了一个从程序的虚拟内存空间到机器的物理内存之间的映射。内存以页为单位进行管理。包括Intel x86在内的很多CPU体系结构实现了一种大页机制,支持4k,2M,4M等多种不同大小的物理页粒度。
目前的操作系统(例如Linux)为了简单起见,普遍使用4K大小的页,这种做法使得每一个映射覆盖的虚拟地址的范围只有4K。如果需要访问一段长度为2M的内存,操作系统需要处理512次缺页中断,每次缺页中断分配4K内存。
以Linux操作系统为例,Linux自2.6.38开始支持透明大页。使得操作系统能建立大小为2M(使用32位操作系统时为4M)的虚拟地址到物理地址映射,称之为大页映射(简称大页)。使用大页能够减少TLB失效和CPU寻址时发生的计算和Cache开销。该机制包含了几个功能,例如物理页碎片的整理,用以保证有足够的大页对齐的物理内存供使用。在发生缺页中断(page fault)时进行判断,如果条件允许则使用大页建立映射。一套针对大页的内存操作工具,提供了写时复制等基本内存操作。
该大页模块主要针对程序中的私有匿名内存进行优化(一个程序使用的内存绝大部分是以私用匿名的方式使用的。而且大页并不适合在其他环境下使用。共享内存使用大页会增加写时复制的开销,映射到文件的内存使用大页会增加缓存的负担)。大页的优化不是强制的,而是采用“如果满足条件,那么使用大页”的逻辑。用“大页使用率”来衡量Linux大页模块的使用程度。它等于:一个进程的私有匿名内存中,以大页形式分配的内存数,除以程序总的私有匿名内存使用量。
操作系统对内存的分配是以page fault驱动的。每个进程有自己的地址空间(在Linux系统中对应mm_struct结构),一个地址空间维护进程的虚拟地址以及虚拟地址到物理地址的映射。一个进程刚建立或者申请内存的时候,进程会调用函数申请一些虚拟内存。这时候操作系统并不会立刻分配物理内存,而是建立一个virtual memory area(以下简称vma),表示说,这段虚拟地址已经被使用了。每一个mm_struct包含若干个vma,而每一个vma必定属于某一个mm_struct。等到进程实际读写这段虚拟地址的时候,因为没有分配内存,一定会发生page fault。操作系统根据发生page fault的地址通过mm_struct定位到对应的vma,根据发生page fault的原因和vma的属性决定如何处理page fault。例如如果访问到的虚拟地址不在任何vma里面,或者访问的区域不是可读的,那么就是访问了非法的地址,返回segment fault,并杀死进程。如果写操作访问了一个vma标明可写,但是页表上标记不可写的地址时,那么是写了写时复制的页面,操作系统会将页面拷贝一份并重新设为可写页面。如果访问的位置在vma内,但是没有建立虚拟地址到物理地址的映射,那说明还没有分配内存,此时根据vma的类型,分配物理内存,建立映射。
建立内存映射时会根据vma的情况决定是否使用大页,一般来说,如果访问地址上下2M对齐构成的一段2M虚拟空间被所在vma包含,而且这段2M虚拟地址空间里面没有建立过映射(二级页表为空),那么Linux内核会为这段虚拟地址分配大页。如果上层申请内存的时候没有考虑大页对齐的需求,申请的vma经常不会2M对齐,这样就无法使用大页。
由于大页分页机制的固有限制,要求所有的物理地址和虚拟地址必须是对齐的。如果64位操作系统使用2M的页进行映射,那么虚拟地址的首尾必须2M对齐,物理地址的首尾也需要2M对齐。对于32位操作系统,则在物理地址和虚拟地址4M对齐的情况下才能使用大页。物理页的管理是操作系统自己维护的,在透明大页的实现中已经具有了碎片整理功能,可以保证有足够大页对齐的物理页用于建立大页映射。虚拟地址一般是用户申请的,不会考虑到底层是否有透明大页的支持,因此虚拟地址申请时往往不是大页对齐的。例如现在Linux透明大页就存在这个问题。应用程序虚拟地址的申请在很多情况下不满足大页对齐的要求,这使得Linux内核不会分配大页,转而使用小页。这种做法使得很多情况下,Linux内核不会给程序分配大页,大页使用率不高。
发明内容
针对现有技术中存在的技术问题,本发明的目的在于提供一种提高操作系统大页使用率的方法,可有效的提升大页的使用率,进而提升了程序的性能。
本发明的技术方案为:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学,未经北京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410146873.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:改进型微型稻麦收割机
- 下一篇:一种太阳能热水器反射板