一种基于hugetlbfs技术的龙芯刀片文件系统的实现方法

文档序号:6559397阅读:441来源:国知局
专利名称:一种基于hugetlbfs技术的龙芯刀片文件系统的实现方法
技术领域
本发明涉及操作系统大页文件系统的应用,具体来说,涉及一种基于hugetlbfs 技术的龙芯刀片文件系统的实现方法。
背景技术
随着计算需求规模的不断增大,应用程序对内存的需求也越来越大。为了实现虚拟内存管理机制,操作系统对内存实行分页管理。自内存“分页机制”提出之始,内存页面的默认大小便被设置为4096字节GKB),虽然原则上内存页面大小是可配置的,但绝大多数的操作系统实现中仍然采用默认的4KB页面。龙芯刀片的系统目前也都是采用4KB大小的页面.由于龙芯刀片要广泛应用在信息化,高兴能领域,这些应用对内存需求量都比较大,由于其采用的默认页面大小为4KB,因而将会产生较多TLB Miss和缺页中断,从而大大影响应用程序的性能。当操作系统以2MB甚至更大作为分页的单位时,将会大大减少TLB Miss和缺页中断的数量,显著提高应用程序的性能。这也正是需要在龙芯刀片系统中引入大页面支持的直接原因。好处是很明显的,假设应用程序需要2MB的内存,如果操作系统以 4KB作为分页的单位,则需要512个页面,进而在TLB中需要512个表项,同时也需要512 个页表项,操作系统需要经历至少512次TLB Miss和512次缺页中断才能将2MB应用程序空间全部映射到物理内存;然而,当操作系统采用2MB作为分页的基本单位时,只需要一次 TLB Miss和一次缺页中断,就可以为2MB的应用程序空间建立虚实映射,并在运行过程中无需再经历TLB Miss和缺页中断(假设未发生TLB项替换和Swap)。

发明内容
为了能以最小的代价实现大页面支持,本设计采用了基于hugetlbfs特殊文件系统2M字节大页面支持。一种基于hugetlbfs技术的龙芯刀片文件系统的实现方法,系统初始化时,函数 hugetlb_init对文件系统初始化,由SyS_open函数调用huget_creat为创建的文件分配内存索引节点,并进行文件初始化,由sysjnmap调用函数hugetlbfs_filejnmap为应用进程
建立映射;在内核中设置三级页表,每个基本分页单位为2MB,并通过内联函数ptejiikhuge 设置页表项标志位来区分4KB物理页面和2MB虚拟页面。优选的,所述索引节点在初始化时将文件操作表指针指向函数跳转表hugetlbfS_ file_operations 0优选的,所述函数跳转表hugetlbfs—file—operations包含函数hugetlbfs— f ile—Himap0优选的,所述hugetlbfs在物理页面上建立的虚拟文件系统,每个页面为2MB,占用512个4KB物理页面。
优选的,所述函数hugetlbfS_file_mmap对虚拟文件区域的偏移和边界进行检查,并设置虚拟页面标志位。优选的,虚拟页面和物理页面映射时在程序访问内存区域引起缺页中断时进行。优选的,所述hugetldfs在使用时,需要先配置编译Iinux内核,在Iinux启动成功后挂载到根文件系统目录中。本发明采用特殊文件系统形式支持大页面的方式,使得应用程序可以根据需要灵活地选择虚存页面大小,而不会被强制使用2MB大页面。灵活支持了 Iinux下的大页文件系统的实现,使得操作效率有效提高。
具体实施例方式Hugetlb特殊文件系统的在龙芯刀片系统的实现。hugetlbfs 初始化Hugetlbfs的初始化是通过函数hugetlb_init ()完成的,该函数在系统初始化时执行。用于hugetlbfs的大页面是在这一初始化过程就分配好了的,并且在系统运行过程中不会被回收在hugetlbfs中创建文件在系统中由sysjpenO函数最终调用hugetlbfsjreateO为该文件分配内存索引节点(inode)结构,并进行基本的初始化工作。其中值得一提的是,在inode初始化时将文件操作表指针inode- > i_fop指向hugetlbfs特有的函数跳转表hugetlbfs_file_ operations,而此表中就包含了实现文件映射的mmap方法hugetIbfs_file_mmap (),这个函数在系统调用SyS_mmap()的实现中极为关键。由于hugetlbfs是一个伪文件系统,在磁盘上没有相应的副本,因此在该文件系统中创建一个文件的过程也仅仅是分配虚拟文件系统(VFS)层的inode、dentry等结构。 甚至连物理内存页面都不会分配,而是在对该文件映射后并访问时,才通过缺页中断进入内核分配大页面并建立虚实映射。为Hugetlb文件建立映射在成功创建了 hugetlbfs文件之后,就可以将其映射到应用进程的地址空间了, 这是通过系统调用mmapO实现的。在系统中,sysjnmap ()调用函数hugetlbfS_file_ mmapO方法为应用进程建立映射。函数hugetlbfS_file_mmap ()对虚存区域(vma)的偏移、边界等进行检查,并设置该vma的VM_HUGETLB和VM_RESERVED等标志,以区别于4KB映射的虚存区域,并且在进程运行过程中,该虚存区域映射的物理页面不会被回收。在这个过程中,虚拟地址并没有真正映射到物理地址空间,而这一工作则推迟到应用程序访问该内存区域并引发缺页中断(即 Page Fault)的时候进行。分配大页面、建立虚实映射以4KB为基本分页单位的龙芯刀片操作系统来采用四级页表管理虚实映射。每个页表项占据64位(SBytes),因此每个作为页表的物理页面可以存放512个页表项,从而最末级页表所映射的物理内存大小为512*4KB = 2MB,依此类推,在上一级页表(PMD)中,每一个PMD表项可映射2MB的物理内存。当采用2MB作为分页的基本单位时,内核中则设置了三级页表。在三级页表中,最末一级页表为PMD表,同样地,每一个PMD表项指出了一个2MB 的大页面,也即虚拟地址的低21位作为大页面的页内偏移,而高位则作为大页面的页面编号(Pfn)。为了能让MMU正确地进行虚实地址转换,必须告知MMU哪个页表项映射的是4KB 的物理页面,哪个页表项映射的是2MB的大页面,这是通过页表项中的标志位_PAGE_PSE来区分的,这一般是通过内联函数ptejiikhuge ()设置的。Hugetlb FileSystem 的应用使用hugetlbfs之前,首先需要在编译内核(make menuconfig)时配置C0NFIG_ HUGETLB_PAGE和CONFIG_HUGETLBFS选项,这两个选项均可在File systems内核配置菜单中找到。内核编译完成并成功启动内核之后,将hugetlbfs特殊文件系统挂载到根文件系统的某个目录上去,以使得hugetlbfs可以访问。命令如下mount none /mnt/huge-t hugetlbfs此后,只要是在/mnt/huge/目录下创建的文件,将其映射到内存中时都会使用 2MB作为分页的基本单位。对于系统中大页面的统计信息可以在特殊文件系统(/proc)中查到,如/ proc/sys/vm/nr_hugepages给出了当前内核中配置的大页面的数目,也可以通过该文件配置大页面的数目,如echo 20 > /proc/sys/vm/nr—hugepages总之,本技术很好的解决了龙芯刀片系统对大页的需求问题,提高了龙芯刀片在内存需求量大的应用领域的竞争力。
权利要求
1.一种基于hugetlbfs技术的龙芯刀片文件系统的实现方法,其特征在于系统初始化时,函数hugetlb_init对文件系统初始化,由sys_open函数调用huget_creat为创建的文件分配内存索引节点,并进行文件初始化,由sysjnmap调用函数hugetlbfs_filejnmap 为应用进程建立映射;在内核中设置三级页表,每个基本分页单位为2MB,并通过内联函数ptejiikhuge设置页表项标志位来区分4KB物理页面和2MB虚拟页面。
2.如权利要求1所述的方法,其特征在于所述索引节点在初始化时将文件操作表指针指向函数跳转表 hugetlbfs_file_operations。
3.如权利要求2所述的方法,其特征在于所述函数跳转表hugetlbfs_file_ operations 包含函数 hugetlbfs_file_mmap0
4.如权利要求1所述的方法,其特征在于所述hugetlbfs在物理页面上建立的虚拟文件系统,每个页面为2MB,占用512个4KB物理页面。
5.如权利要求1所述的方法,其特征在于所述函数hugetlbfS_file_mmap对虚拟文件区域的偏移和边界进行检查,并设置虚拟页面标志位。
6.如权利要求1所述的方法,其特征在于虚拟页面和物理页面映射时在程序访问内存区域引起缺页中断时进行。
7.如权利要求1所述的方法,其特征在于所述hugetldfs在使用时,需要先配置编译 Iinux内核,在Iinux启动成功后挂载到根文件系统目录中。
全文摘要
本发明提供了一种基于hugetlbfs技术的龙芯刀片文件系统的实现方法,系统初始化时,函数hugetlb_init对文件系统初始化,由sys_open函数调用huget_creat为创建的文件分配内存索引节点,并进行文件初始化,由sys_mmap调用函数hugetlbls_file_mmap为应用进程建立映射;在内核中设置三级页表,每个基本分页单位为2MB,并通过内联函数pte_mkhuge设置页表项标志位来区分4KB物理页面和2MB虚拟页面。本发明采用特殊文件系统形式支持大页面的方式,使得应用程序可以根据需要灵活地选择虚存页面大小,而不会被强制使用2MB大页面。灵活支持了linux下的大页文件系统的实现,使得操作效率有效提高。
文档编号G06F17/30GK102339302SQ201110188859
公开日2012年2月1日 申请日期2011年7月7日 优先权日2011年7月7日
发明者刘新春, 尹宁宁, 李丰旺, 李永成, 杨晓君, 邵宗有, 郑臣明 申请人:曙光信息产业股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1