構(gòu)建世界更快的內(nèi)存文件系統(tǒng)
作者 / 沙行勉 華東師范大學(xué) 計(jì)算機(jī)科學(xué)與軟件工程學(xué)院(上海 200062)
本文引用地址:http://butianyuan.cn/article/201807/389570.htm摘要:新一代非易失性存儲(chǔ)器,如PCM、MRAM等,將使內(nèi)存具備數(shù)據(jù)存儲(chǔ)的能力,并顯示出低功耗和優(yōu)秀的數(shù)據(jù)訪問(wèn)性能等優(yōu)越性。把非易失性存儲(chǔ)級(jí)內(nèi)存納入內(nèi)存管理空間將成為解決傳統(tǒng)計(jì)算機(jī)系統(tǒng)數(shù)據(jù)I/O瓶頸的有效解決途徑。然而,現(xiàn)有文件系統(tǒng)的設(shè)計(jì)架構(gòu)使其無(wú)法充分利用非易失性內(nèi)存的特性并發(fā)揮其優(yōu)勢(shì),因此,我們需要重新審視現(xiàn)有文件系統(tǒng)的架構(gòu)。從全新的角度思考面向非易失性內(nèi)存的新型內(nèi)存文件系統(tǒng)設(shè)計(jì)框架。我們提出了一個(gè)全新的概念“文件虛擬地址空間”,并在此基礎(chǔ)之上,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)新型的持久化內(nèi)存文件系統(tǒng)SIMFS。
沙行勉 (Edwin Sha),博導(dǎo),2000年起任美國(guó)終身制正教授 (Full Professor),2010年起任教育部長(zhǎng)江學(xué)者講座教授,2011年起任中國(guó)千人計(jì)劃特聘專家,2012-2017年任重慶大學(xué)特聘教授和計(jì)算機(jī)學(xué)院院長(zhǎng),現(xiàn)全職任上海華東師范大學(xué)終身特聘教授。共獲各類國(guó)家級(jí)教學(xué)、科研獎(jiǎng)項(xiàng)40多項(xiàng)。
0 引言
大數(shù)據(jù)時(shí)代的到來(lái)使得人們對(duì)數(shù)據(jù)處理效率的要求日益高漲,推動(dòng)研究界和工業(yè)界發(fā)展可以克服傳統(tǒng)內(nèi)存、外存之間性能鴻溝的內(nèi)存計(jì)算解決方案。相比基于傳統(tǒng)外存的解決方案,內(nèi)存計(jì)算[1]有突破性的性能優(yōu)勢(shì),這一點(diǎn)從Spark[2]和Hadoop[3]的對(duì)比中得到體現(xiàn)。Spark是一種新型內(nèi)存集群計(jì)算框架,而Hadoop是基于傳統(tǒng)外存的集群計(jì)算框架MapReduce[4]的經(jīng)典實(shí)現(xiàn)。相比之下,Spark可以比Hadoop快100倍。在計(jì)算機(jī)系統(tǒng)中,文件系統(tǒng)是數(shù)據(jù)存儲(chǔ)的最根本的基礎(chǔ)設(shè)施,對(duì)上層應(yīng)用提供存儲(chǔ)數(shù)據(jù)、訪問(wèn)數(shù)據(jù)的基本服務(wù)。因此,如果能夠提供文件系統(tǒng)的內(nèi)存計(jì)算方案,就能加速所有在其上運(yùn)行的、需要處理數(shù)據(jù)的應(yīng)用,從而提升整個(gè)系統(tǒng)的性能及用戶體驗(yàn)。
新興的非易失性內(nèi)存(Non-Volatile Memory,簡(jiǎn)稱NVM)[5]提供了實(shí)現(xiàn)內(nèi)存文件系統(tǒng)的機(jī)遇。一方面,NVM可以通過(guò)DIMM插槽直接連接到內(nèi)存總線,提供字節(jié)尋址的高速數(shù)據(jù)訪問(wèn);另一方面,NVM存儲(chǔ)密度大、數(shù)據(jù)掉電不丟失,和磁盤、固態(tài)硬盤一樣提供大容量的持久性數(shù)據(jù)存儲(chǔ)。在采用新型非易失性內(nèi)存的系統(tǒng)結(jié)構(gòu)中,文件系統(tǒng)可以在NVM內(nèi)存上存儲(chǔ)并通過(guò)片上高速總線讀寫。
但是現(xiàn)有系統(tǒng)軟件沒(méi)有充分發(fā)揮非易失性內(nèi)存物理特性和優(yōu)勢(shì),如現(xiàn)有內(nèi)存文件系統(tǒng)的元數(shù)據(jù)結(jié)構(gòu)仍然以塊設(shè)備上的傳統(tǒng)文件系統(tǒng)的元數(shù)據(jù)結(jié)構(gòu)為模板,要用軟件查找元數(shù)據(jù)結(jié)構(gòu)以獲得文件數(shù)據(jù)塊的物理位置,造成極大性能開(kāi)銷。為此,我們需要思考如何將文件數(shù)據(jù)結(jié)構(gòu)與當(dāng)前計(jì)算機(jī)體系中的內(nèi)存管理機(jī)制相結(jié)合,并充分利用CPU中現(xiàn)有虛擬地址轉(zhuǎn)換硬件的處理能力構(gòu)建高效的內(nèi)存文件系統(tǒng)。
1 對(duì)持久化內(nèi)存文件系統(tǒng)設(shè)計(jì)的思考
對(duì)于在非易失性內(nèi)存上建立文件系統(tǒng)上有一個(gè)常見(jiàn)誤解,認(rèn)為可以利用Ramdisk一類的工具在非易失性內(nèi)存上建立一個(gè)模擬磁盤,然后把現(xiàn)有塊設(shè)備文件系統(tǒng)部署到模擬磁盤。這種誤解沒(méi)有考慮到傳統(tǒng)I/O軟件棧和塊設(shè)備文件系統(tǒng)產(chǎn)生的系統(tǒng)開(kāi)銷,不能發(fā)揮非易失性內(nèi)存文件系統(tǒng)的卓越性能。塊設(shè)備文件系統(tǒng)(如EXT4)需要經(jīng)過(guò)諸多針對(duì)塊設(shè)備的軟件層次,例如I/O調(diào)度層、通用塊層和塊設(shè)備驅(qū)動(dòng)層,如圖1所示。諸多軟件層次會(huì)造成數(shù)據(jù)在各級(jí)緩沖區(qū)中的多次拷貝。即使是管理模擬成磁盤的內(nèi)存,對(duì)于傳統(tǒng)I/O軟件棧和塊設(shè)備文件系統(tǒng),其多個(gè)軟件層次仍會(huì)造成數(shù)據(jù)讀寫之外的大量系統(tǒng)負(fù)載及性能損失。所以,為充分發(fā)掘非易失性內(nèi)存的性能優(yōu)勢(shì),系統(tǒng)設(shè)計(jì)者需要突破原有的設(shè)計(jì)思想,從新研究和設(shè)計(jì)面向新型非易失性的內(nèi)存文件系統(tǒng)。
當(dāng)前內(nèi)存文件系統(tǒng)可以分為兩類。一類是臨時(shí)性的內(nèi)存文件系統(tǒng),如RAMFS和TMPFS。從系統(tǒng)設(shè)計(jì)的角度來(lái)看,這類文件系統(tǒng)借用了內(nèi)核中的虛擬文件系統(tǒng)(VFS)所定義的通用文件組織結(jié)構(gòu),把所有的元數(shù)據(jù)(例如超級(jí)塊和索引節(jié)點(diǎn))和數(shù)據(jù)都存放于內(nèi)存。但是,每次加載的元數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中的位置不確定,物理內(nèi)存也會(huì)隨系統(tǒng)關(guān)閉而回收。因此,即便把臨時(shí)內(nèi)存文件系統(tǒng)部署在NVM上,系統(tǒng)重啟后也無(wú)法找回文件。
另一類是持久化的內(nèi)存文件系統(tǒng),例如BPFS[6],PRAMFS[7]和PMFS[8]。與臨時(shí)內(nèi)存文件系統(tǒng)不同,持久化內(nèi)存文件系統(tǒng)的元數(shù)據(jù)結(jié)構(gòu)獨(dú)立于內(nèi)核的內(nèi)存管理系統(tǒng),并且固定存放在非易失性內(nèi)存的已知位置中。在系統(tǒng)重啟后,持久化內(nèi)存文件系統(tǒng)可以在非易失性內(nèi)存的確定位置找到其特有的元數(shù)據(jù)結(jié)構(gòu)?,F(xiàn)有的內(nèi)存文件系統(tǒng)通過(guò)軟件搜索元數(shù)據(jù)結(jié)構(gòu),或者建立額外的映射表,將文件映射到虛擬地址空間。這些方法都不能充分利用處理器中的地址轉(zhuǎn)換硬件MMU。
當(dāng)前持久化內(nèi)存文件系統(tǒng)的設(shè)計(jì)有兩大缺點(diǎn):
第一,沒(méi)有考慮到傳統(tǒng)I/O軟件棧和塊設(shè)備文件系統(tǒng)(如EXT4)需要經(jīng)過(guò)諸多針對(duì)塊設(shè)備的軟件層次,造成大量額外的系統(tǒng)管理開(kāi)銷及性能損失。
第二,元數(shù)據(jù)搜索由軟件完成,具有較大的開(kāi)銷。文件系統(tǒng)通常管理兩類數(shù)據(jù):描述文件屬性的元數(shù)據(jù)和文件數(shù)據(jù)。其中,元數(shù)據(jù)包含指向文件數(shù)據(jù)的物理存放地址的索引結(jié)構(gòu)。例如,EXT4文件系統(tǒng)的索引節(jié)點(diǎn)(inode)中使用直接索引和間接索引記錄文件數(shù)據(jù)的塊在磁盤中的物理地址。以圖2(a)為例,如果要訪問(wèn)某文件的k個(gè)頁(yè)面,該文件系統(tǒng)需要不斷重復(fù)執(zhí)行以下步驟:1)文件系統(tǒng)搜索元數(shù)據(jù),查找請(qǐng)求的數(shù)據(jù)頁(yè)的物理位置;2)文件系統(tǒng)調(diào)用數(shù)據(jù)傳輸函數(shù)訪問(wèn)當(dāng)前頁(yè)面的數(shù)據(jù)。
因此,我們需要為內(nèi)存文件系統(tǒng)的文件創(chuàng)建一個(gè)連續(xù)的虛擬地址空間,這樣就可以利用文件的虛擬地址空間和硬件MMU迅速定位到文件數(shù)據(jù)的物理位置,避免軟件方式搜索元數(shù)據(jù)結(jié)構(gòu)產(chǎn)生的開(kāi)銷。如圖2(b)所示,文件系統(tǒng)只要1次數(shù)據(jù)拷貝操作就可以讀完k個(gè)頁(yè)面,并不需要用軟件流程逐層搜索文件的元數(shù)據(jù)結(jié)構(gòu)。所以,連續(xù)虛擬地址空間中的文件訪問(wèn)開(kāi)銷遠(yuǎn)低于現(xiàn)有文件系統(tǒng)。
2 持久化內(nèi)存文件系統(tǒng)設(shè)計(jì)的基本架構(gòu)
在以上的思考基礎(chǔ)上,我們提出了“文件虛擬地址空間”的全新設(shè)計(jì)框架,并在此設(shè)計(jì)框架下設(shè)計(jì)實(shí)現(xiàn)了持久化內(nèi)存文件系統(tǒng)(Sustainable In-Memory File System,SIMFS),打破了傳統(tǒng)文件系統(tǒng)的設(shè)計(jì)思路。
在該框架下,每個(gè)文件都有一個(gè)獨(dú)立且連續(xù)的虛擬地址空間。為了充分利用地址轉(zhuǎn)換硬件并迅速地建立文件的虛擬地址空間,我們提出一個(gè)新的元數(shù)據(jù)結(jié)構(gòu)“文件頁(yè)表(File Page Table)”。文件頁(yè)表將存放文件數(shù)據(jù)的物理頁(yè)組織起來(lái),保存文件的每個(gè)數(shù)據(jù)頁(yè)的地址映射信,如圖3所示。
在文件虛擬地址空間的框架下,每個(gè)文件都有一個(gè)文件頁(yè)表。在創(chuàng)建文件時(shí),系統(tǒng)給該文件建立一個(gè)基本的文件頁(yè)表,例如三級(jí)頁(yè)表,每級(jí)各有一個(gè)物理頁(yè)。
在這個(gè)新框架下,文件頁(yè)表用于為對(duì)應(yīng)的文件建立虛擬地址空間。在打開(kāi)文件時(shí),系統(tǒng)將文件頁(yè)表頂層的數(shù)個(gè)指針寫入進(jìn)程頁(yè)表對(duì)應(yīng)的位置,這樣,文件的數(shù)據(jù)頁(yè)就可以用虛擬地址和load/store指令直接訪問(wèn)。這種建立虛擬地址空間的方式的耗時(shí)與文件大小無(wú)關(guān),系統(tǒng)可以在常數(shù)時(shí)間內(nèi)為文件建立起進(jìn)程中的虛擬地址空間。基于這種結(jié)構(gòu),文件可以獲得連續(xù)的虛擬地址空間,而真正的文件數(shù)據(jù)卻可以分散存儲(chǔ)在物理內(nèi)存中,每一個(gè)文件所擁有的物理內(nèi)存都由一個(gè)專有的層次化的“文件頁(yè)表”組織起來(lái)。
這個(gè)全新的文件虛擬地址空間的優(yōu)點(diǎn)在于:
1) 文件系統(tǒng)讀文件數(shù)據(jù)不需要軟件搜索元數(shù)據(jù)結(jié)構(gòu)。此外,由于文件的虛擬地址空間已經(jīng)嵌入到進(jìn)程的虛擬地址空間,讀文件數(shù)據(jù)不會(huì)引起缺頁(yè)中斷;
2) 當(dāng)文件擁有連續(xù)虛擬地址空間后,文件訪問(wèn)操作僅需調(diào)用一次數(shù)據(jù)傳輸操作。文件的虛擬地址到物理地址的轉(zhuǎn)換由CPU中的硬件MMU完成,不需要軟件搜索元數(shù)據(jù),查找文件數(shù)據(jù)的效率極高。
3 結(jié)論
本文介紹了基于文件虛擬地址空間的概念而設(shè)計(jì),并在Linux內(nèi)核中實(shí)現(xiàn)的一個(gè)功能完整的持久化內(nèi)存文件系統(tǒng)SIMFS。首次提出“文件虛擬地址空間”的設(shè)計(jì)框架。提出了在文件虛擬地址空間組織文件數(shù)據(jù)的組織結(jié)構(gòu)“文件頁(yè)表”。 這種設(shè)計(jì)架構(gòu)能夠充分利用硬件MMU實(shí)現(xiàn)高速文件數(shù)據(jù)訪問(wèn)。我們?cè)贚inux內(nèi)核中設(shè)計(jì)實(shí)現(xiàn)一個(gè)功能完整的持久化內(nèi)存文件系統(tǒng)SIMFS。支持所有POSIX標(biāo)準(zhǔn)文件系統(tǒng)接口,支持基于Linux系統(tǒng)的應(yīng)用程序。
用標(biāo)準(zhǔn)測(cè)試工具驗(yàn)證文件系統(tǒng)的性能。與華為公司合作測(cè)試的結(jié)果表明,SIMFS的文件讀寫帶寬可以達(dá)到性能理論上限(即內(nèi)存總線帶寬)的89%,超過(guò)其他已知的內(nèi)存文件系統(tǒng),是目前世界上文件讀寫速度最快的內(nèi)存文件系統(tǒng)。
參考文獻(xiàn):
[1]Ousterhout J K, Agrawal P, Erickson D, et al. The Case for RAMClouds: Scalable High-Performance Storage Entirely in DRAM[J]. Operating Systems Review, 2010, 43(4):92-105.
[2]Zaharia M, Chowdhury M, Franklin M J, et al. Spark: Cluster Computing with Working Sets[C], in Proceedings of the Usenix Conference on Hot Topics in Cloud Computing (HotCloud '10), 2010, 15:1-7.
[3]Hadoop[Z]. http://hadoop.apache.org/.
[4]Dean J, Ghemawat S. Simplified Data Processing on Large Clusters[C], in Proceedings of the Proceedings of Operating Systems Design and Implementation (OSDI '04), 2004:107-113.
[5]Freitas R F, Wilcke W W. Storage-Class Memory: The Next Storage System Technology[J]. IBM Journal of Research & Development, 2008, 52(4.5):439-447.
[6]Condit J, Nightingale E B, Frost C, et al. Better I/O through Byte-Addressable, Persistent Memory[C], in Proceedings of the ACM SIGOPS Symposium on Operating Systems Principles (SOSP '09), 2009 :133-146.
[7]Longerbeam S, Locke M A, Morgan K D. Protected and Persistent RAM Filesystem[P], 2003.
[8]Dulloor S R, Kumar S, Keshavamurthy A, et al. System Software for Persistent Memory[C], in Proceedings of the European Conference on Computer Systems (EuroSys '14), 2014:1-15.
本文來(lái)源于《電子產(chǎn)品世界》2018年第8期第24頁(yè),歡迎您寫論文時(shí)引用,并注明出處。
評(píng)論