專利名稱:一種基于hugetlbfs技術(shù)的龍芯刀片文件系統(tǒng)的實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及操作系統(tǒng)大頁文件系統(tǒng)的應(yīng)用,具體來說,涉及一種基于hugetlbfs 技術(shù)的龍芯刀片文件系統(tǒng)的實現(xiàn)方法。
背景技術(shù):
隨著計算需求規(guī)模的不斷增大,應(yīng)用程序?qū)?nèi)存的需求也越來越大。為了實現(xiàn)虛擬內(nèi)存管理機制,操作系統(tǒng)對內(nèi)存實行分頁管理。自內(nèi)存“分頁機制”提出之始,內(nèi)存頁面的默認(rèn)大小便被設(shè)置為4096字節(jié)GKB),雖然原則上內(nèi)存頁面大小是可配置的,但絕大多數(shù)的操作系統(tǒng)實現(xiàn)中仍然采用默認(rèn)的4KB頁面。龍芯刀片的系統(tǒng)目前也都是采用4KB大小的頁面.由于龍芯刀片要廣泛應(yīng)用在信息化,高興能領(lǐng)域,這些應(yīng)用對內(nèi)存需求量都比較大,由于其采用的默認(rèn)頁面大小為4KB,因而將會產(chǎn)生較多TLB Miss和缺頁中斷,從而大大影響應(yīng)用程序的性能。當(dāng)操作系統(tǒng)以2MB甚至更大作為分頁的單位時,將會大大減少TLB Miss和缺頁中斷的數(shù)量,顯著提高應(yīng)用程序的性能。這也正是需要在龍芯刀片系統(tǒng)中引入大頁面支持的直接原因。好處是很明顯的,假設(shè)應(yīng)用程序需要2MB的內(nèi)存,如果操作系統(tǒng)以 4KB作為分頁的單位,則需要512個頁面,進(jìn)而在TLB中需要512個表項,同時也需要512 個頁表項,操作系統(tǒng)需要經(jīng)歷至少512次TLB Miss和512次缺頁中斷才能將2MB應(yīng)用程序空間全部映射到物理內(nèi)存;然而,當(dāng)操作系統(tǒng)采用2MB作為分頁的基本單位時,只需要一次 TLB Miss和一次缺頁中斷,就可以為2MB的應(yīng)用程序空間建立虛實映射,并在運行過程中無需再經(jīng)歷TLB Miss和缺頁中斷(假設(shè)未發(fā)生TLB項替換和Swap)。
發(fā)明內(nèi)容
為了能以最小的代價實現(xiàn)大頁面支持,本設(shè)計采用了基于hugetlbfs特殊文件系統(tǒng)2M字節(jié)大頁面支持。一種基于hugetlbfs技術(shù)的龍芯刀片文件系統(tǒng)的實現(xiàn)方法,系統(tǒng)初始化時,函數(shù) hugetlb_init對文件系統(tǒng)初始化,由SyS_open函數(shù)調(diào)用huget_creat為創(chuàng)建的文件分配內(nèi)存索引節(jié)點,并進(jìn)行文件初始化,由sysjnmap調(diào)用函數(shù)hugetlbfs_filejnmap為應(yīng)用進(jìn)程
建立映射;在內(nèi)核中設(shè)置三級頁表,每個基本分頁單位為2MB,并通過內(nèi)聯(lián)函數(shù)ptejiikhuge 設(shè)置頁表項標(biāo)志位來區(qū)分4KB物理頁面和2MB虛擬頁面。優(yōu)選的,所述索引節(jié)點在初始化時將文件操作表指針指向函數(shù)跳轉(zhuǎn)表hugetlbfS_ file_operations 0優(yōu)選的,所述函數(shù)跳轉(zhuǎn)表hugetlbfs—file—operations包含函數(shù)hugetlbfs— f ile—Himap0優(yōu)選的,所述hugetlbfs在物理頁面上建立的虛擬文件系統(tǒng),每個頁面為2MB,占用512個4KB物理頁面。
優(yōu)選的,所述函數(shù)hugetlbfS_file_mmap對虛擬文件區(qū)域的偏移和邊界進(jìn)行檢查,并設(shè)置虛擬頁面標(biāo)志位。優(yōu)選的,虛擬頁面和物理頁面映射時在程序訪問內(nèi)存區(qū)域引起缺頁中斷時進(jìn)行。優(yōu)選的,所述hugetldfs在使用時,需要先配置編譯Iinux內(nèi)核,在Iinux啟動成功后掛載到根文件系統(tǒng)目錄中。本發(fā)明采用特殊文件系統(tǒng)形式支持大頁面的方式,使得應(yīng)用程序可以根據(jù)需要靈活地選擇虛存頁面大小,而不會被強制使用2MB大頁面。靈活支持了 Iinux下的大頁文件系統(tǒng)的實現(xiàn),使得操作效率有效提高。
具體實施例方式Hugetlb特殊文件系統(tǒng)的在龍芯刀片系統(tǒng)的實現(xiàn)。hugetlbfs 初始化Hugetlbfs的初始化是通過函數(shù)hugetlb_init ()完成的,該函數(shù)在系統(tǒng)初始化時執(zhí)行。用于hugetlbfs的大頁面是在這一初始化過程就分配好了的,并且在系統(tǒng)運行過程中不會被回收在hugetlbfs中創(chuàng)建文件在系統(tǒng)中由sysjpenO函數(shù)最終調(diào)用hugetlbfsjreateO為該文件分配內(nèi)存索引節(jié)點(inode)結(jié)構(gòu),并進(jìn)行基本的初始化工作。其中值得一提的是,在inode初始化時將文件操作表指針inode- > i_fop指向hugetlbfs特有的函數(shù)跳轉(zhuǎn)表hugetlbfs_file_ operations,而此表中就包含了實現(xiàn)文件映射的mmap方法hugetIbfs_file_mmap (),這個函數(shù)在系統(tǒng)調(diào)用SyS_mmap()的實現(xiàn)中極為關(guān)鍵。由于hugetlbfs是一個偽文件系統(tǒng),在磁盤上沒有相應(yīng)的副本,因此在該文件系統(tǒng)中創(chuàng)建一個文件的過程也僅僅是分配虛擬文件系統(tǒng)(VFS)層的inode、dentry等結(jié)構(gòu)。 甚至連物理內(nèi)存頁面都不會分配,而是在對該文件映射后并訪問時,才通過缺頁中斷進(jìn)入內(nèi)核分配大頁面并建立虛實映射。為Hugetlb文件建立映射在成功創(chuàng)建了 hugetlbfs文件之后,就可以將其映射到應(yīng)用進(jìn)程的地址空間了, 這是通過系統(tǒng)調(diào)用mmapO實現(xiàn)的。在系統(tǒng)中,sysjnmap ()調(diào)用函數(shù)hugetlbfS_file_ mmapO方法為應(yīng)用進(jìn)程建立映射。函數(shù)hugetlbfS_file_mmap ()對虛存區(qū)域(vma)的偏移、邊界等進(jìn)行檢查,并設(shè)置該vma的VM_HUGETLB和VM_RESERVED等標(biāo)志,以區(qū)別于4KB映射的虛存區(qū)域,并且在進(jìn)程運行過程中,該虛存區(qū)域映射的物理頁面不會被回收。在這個過程中,虛擬地址并沒有真正映射到物理地址空間,而這一工作則推遲到應(yīng)用程序訪問該內(nèi)存區(qū)域并引發(fā)缺頁中斷(即 Page Fault)的時候進(jìn)行。分配大頁面、建立虛實映射以4KB為基本分頁單位的龍芯刀片操作系統(tǒng)來采用四級頁表管理虛實映射。每個頁表項占據(jù)64位(SBytes),因此每個作為頁表的物理頁面可以存放512個頁表項,從而最末級頁表所映射的物理內(nèi)存大小為512*4KB = 2MB,依此類推,在上一級頁表(PMD)中,每一個PMD表項可映射2MB的物理內(nèi)存。當(dāng)采用2MB作為分頁的基本單位時,內(nèi)核中則設(shè)置了三級頁表。在三級頁表中,最末一級頁表為PMD表,同樣地,每一個PMD表項指出了一個2MB 的大頁面,也即虛擬地址的低21位作為大頁面的頁內(nèi)偏移,而高位則作為大頁面的頁面編號(Pfn)。為了能讓MMU正確地進(jìn)行虛實地址轉(zhuǎn)換,必須告知MMU哪個頁表項映射的是4KB 的物理頁面,哪個頁表項映射的是2MB的大頁面,這是通過頁表項中的標(biāo)志位_PAGE_PSE來區(qū)分的,這一般是通過內(nèi)聯(lián)函數(shù)ptejiikhuge ()設(shè)置的。Hugetlb FileSystem 的應(yīng)用使用hugetlbfs之前,首先需要在編譯內(nèi)核(make menuconfig)時配置C0NFIG_ HUGETLB_PAGE和CONFIG_HUGETLBFS選項,這兩個選項均可在File systems內(nèi)核配置菜單中找到。內(nèi)核編譯完成并成功啟動內(nèi)核之后,將hugetlbfs特殊文件系統(tǒng)掛載到根文件系統(tǒng)的某個目錄上去,以使得hugetlbfs可以訪問。命令如下mount none /mnt/huge-t hugetlbfs此后,只要是在/mnt/huge/目錄下創(chuàng)建的文件,將其映射到內(nèi)存中時都會使用 2MB作為分頁的基本單位。對于系統(tǒng)中大頁面的統(tǒng)計信息可以在特殊文件系統(tǒng)(/proc)中查到,如/ proc/sys/vm/nr_hugepages給出了當(dāng)前內(nèi)核中配置的大頁面的數(shù)目,也可以通過該文件配置大頁面的數(shù)目,如echo 20 > /proc/sys/vm/nr—hugepages總之,本技術(shù)很好的解決了龍芯刀片系統(tǒng)對大頁的需求問題,提高了龍芯刀片在內(nèi)存需求量大的應(yīng)用領(lǐng)域的競爭力。
權(quán)利要求
1.一種基于hugetlbfs技術(shù)的龍芯刀片文件系統(tǒng)的實現(xiàn)方法,其特征在于系統(tǒng)初始化時,函數(shù)hugetlb_init對文件系統(tǒng)初始化,由sys_open函數(shù)調(diào)用huget_creat為創(chuàng)建的文件分配內(nèi)存索引節(jié)點,并進(jìn)行文件初始化,由sysjnmap調(diào)用函數(shù)hugetlbfs_filejnmap 為應(yīng)用進(jìn)程建立映射;在內(nèi)核中設(shè)置三級頁表,每個基本分頁單位為2MB,并通過內(nèi)聯(lián)函數(shù)ptejiikhuge設(shè)置頁表項標(biāo)志位來區(qū)分4KB物理頁面和2MB虛擬頁面。
2.如權(quán)利要求1所述的方法,其特征在于所述索引節(jié)點在初始化時將文件操作表指針指向函數(shù)跳轉(zhuǎn)表 hugetlbfs_file_operations。
3.如權(quán)利要求2所述的方法,其特征在于所述函數(shù)跳轉(zhuǎn)表hugetlbfs_file_ operations 包含函數(shù) hugetlbfs_file_mmap0
4.如權(quán)利要求1所述的方法,其特征在于所述hugetlbfs在物理頁面上建立的虛擬文件系統(tǒng),每個頁面為2MB,占用512個4KB物理頁面。
5.如權(quán)利要求1所述的方法,其特征在于所述函數(shù)hugetlbfS_file_mmap對虛擬文件區(qū)域的偏移和邊界進(jìn)行檢查,并設(shè)置虛擬頁面標(biāo)志位。
6.如權(quán)利要求1所述的方法,其特征在于虛擬頁面和物理頁面映射時在程序訪問內(nèi)存區(qū)域引起缺頁中斷時進(jìn)行。
7.如權(quán)利要求1所述的方法,其特征在于所述hugetldfs在使用時,需要先配置編譯 Iinux內(nèi)核,在Iinux啟動成功后掛載到根文件系統(tǒng)目錄中。
全文摘要
本發(fā)明提供了一種基于hugetlbfs技術(shù)的龍芯刀片文件系統(tǒng)的實現(xiàn)方法,系統(tǒng)初始化時,函數(shù)hugetlb_init對文件系統(tǒng)初始化,由sys_open函數(shù)調(diào)用huget_creat為創(chuàng)建的文件分配內(nèi)存索引節(jié)點,并進(jìn)行文件初始化,由sys_mmap調(diào)用函數(shù)hugetlbls_file_mmap為應(yīng)用進(jìn)程建立映射;在內(nèi)核中設(shè)置三級頁表,每個基本分頁單位為2MB,并通過內(nèi)聯(lián)函數(shù)pte_mkhuge設(shè)置頁表項標(biāo)志位來區(qū)分4KB物理頁面和2MB虛擬頁面。本發(fā)明采用特殊文件系統(tǒng)形式支持大頁面的方式,使得應(yīng)用程序可以根據(jù)需要靈活地選擇虛存頁面大小,而不會被強制使用2MB大頁面。靈活支持了linux下的大頁文件系統(tǒng)的實現(xiàn),使得操作效率有效提高。
文檔編號G06F17/30GK102339302SQ201110188859
公開日2012年2月1日 申請日期2011年7月7日 優(yōu)先權(quán)日2011年7月7日
發(fā)明者劉新春, 尹寧寧, 李豐旺, 李永成, 楊曉君, 邵宗有, 鄭臣明 申請人:曙光信息產(chǎn)業(yè)股份有限公司