周恩強,董 勇,張 偉,盧宇彤
(國防科學技術大學高性能計算國家重點實驗室,湖南 長沙 410073)
近年來對象存儲架構在高性能計算領域被廣泛應用,在全球計算能力排名Top500中靠前的系統(tǒng)中大多部署了基于對象存儲架構的并行文件系統(tǒng),如Lustre 和Panasas[1,2.。對象存儲的大文件并行訪問性能優(yōu)異,能夠滿足超大規(guī)模并行條件下的文件讀寫速度和存儲容量需求,因此其成為千萬億次超級計算系統(tǒng)解決大規(guī)??蓴U展輸入和輸出I/O(Input/Output)問題的最佳選擇。
一般認為,HPC 系統(tǒng)中大文件占用空間和I/O 總量的比重大,小文件占用空間和I/O 總量的比重小,但文件數(shù)量多。隨著高性能計算機應用于更多的科學領域,高性能計算系統(tǒng)中的文件I/O的需求呈多樣化特征,小文件的訪問需求逐漸增多[3]。對象存儲體系結(jié)構在小文件訪問方面存在局限性[4],小文件的讀延遲較大,導致很多應用場景下文件訪問性能弱于本地文件系統(tǒng)和其他網(wǎng)絡文件系統(tǒng)。例如,較大規(guī)模的數(shù)據(jù)分析和海量數(shù)據(jù)管理過程中的備份和歸檔操作等。因此,如何提高小文件大規(guī)模并發(fā)讀性能是當前對象存儲系統(tǒng)的熱點研究問題之一。
本文針對典型對象存儲并行文件系統(tǒng)中小文件讀訪問的性能問題,分析了小文件訪問過程的主要開銷構成,設計并實現(xiàn)了面向小文件的并行文件系統(tǒng)服務端緩存機制,采用緩存專用和關聯(lián)文件預讀的方法,提高小文件讀操作的緩存命中率,達到優(yōu)化小文件訪問性能的目的。實際測試結(jié)果表明,該方法可以顯著提高小文件訪問性能,其中小文件打包操作性能提升80%以上。
本文第2節(jié)分析了對象存儲體系結(jié)構下小文件訪問的性能問題;第3節(jié)給出了服務端小文件緩存技術的設計原理;第4節(jié)描述了相關實現(xiàn)技術;第5節(jié)對本文所提出的方法進行了實際測試,并對測試結(jié)果進行了分析;第6節(jié)是相關研究;第7節(jié)對本文所做的工作進行總結(jié)。
對象存儲架構(見圖1)主要由元數(shù)據(jù)服務器、對象服務器和客戶端三部分構成,三者之間采用網(wǎng)絡互連。對象存儲系統(tǒng)中文件的元數(shù)據(jù)和數(shù)據(jù)分開存儲,文件的元數(shù)據(jù)記錄了文件的對象構成以及分布信息,保存在元數(shù)據(jù)服務器中。文件的數(shù)據(jù)以對象的方式保存在對象服務器中。大文件通常由多個對象構成,分布在多個對象存儲服務器上,而小文件則由單個對象構成,分布在單個對象存儲服務器上。每個對象創(chuàng)建時由對象存儲服務器分配一個唯一標識號(以下簡稱對象ID)??蛻舳嗽L問文件數(shù)據(jù)時,首先向元數(shù)據(jù)服務器發(fā)送請求,獲得文件的對象ID 和網(wǎng)絡中的存儲位置,再通過網(wǎng)絡直接訪問對象服務器中存儲的文件數(shù)據(jù)。小文件的讀取性能主要取決于網(wǎng)絡操作延遲、請求在網(wǎng)絡上的往返次數(shù)和磁盤訪問延遲。
Figure 1 Object storage architecture圖1 對象存儲架構示意圖
在基于對象存儲架構的Lustre并行文件系統(tǒng)中,我們通過測試來分析小文件訪問的開銷構成。通過讀取一個目錄下的各種長度的文件,統(tǒng)計各部分的時間開銷,并分析其占整個訪問開銷的比例。文件訪問開銷可以劃分為磁盤開銷、網(wǎng)絡傳輸開銷和其它開銷三個部分。圖2a給出了不同文件大小條件下,三種開銷所占的比例。從圖中可以看出,文件大小從1KB到256KB,磁盤開銷占到了60%~80%。以4KB文件大小為例,整個文件讀取時間為11ms,磁盤開銷為8ms,其余開銷僅為3ms。這主要是因為對象存儲系統(tǒng)大多采用高速互連網(wǎng)絡構建,其網(wǎng)絡延遲往往在數(shù)百微秒級,而磁盤訪問延遲在毫秒級,遠大于訪存和網(wǎng)絡延遲。降低文件訪問的磁盤開銷是優(yōu)化小文件訪問的重點。
Figure 2 Overhead of small file access圖2 小文件訪問開銷測試
使用緩存技術降低訪問磁盤開銷,是優(yōu)化文件系統(tǒng)小文件訪問性能的有效途徑。基于Lustre并行文件系統(tǒng),我們測試了不同的緩存場景下對小文件訪問性能的影響。測試分別模擬了無緩存、100%命中服務端緩存、100%命中客戶端緩存和實際應用場景等四種模式,通過對比四種模式下小文件的訪問開銷,評估緩存對小文件訪問的優(yōu)化效果。圖2b給出了具體測試結(jié)果,該測試中,文件大小設定為4KB。圖2b結(jié)果表明,服務端緩存和客戶端緩存在全部命中條件下對小文件的讀性能提高均有很大幫助,延遲分別降低約60%和80%左右,因此小文件訪問命中緩存會顯著降低訪問延遲。同時緩存的部署位置對性能存在影響,其中客戶端緩存可以降低網(wǎng)絡操作次數(shù),效果最優(yōu),但高速網(wǎng)絡條件下小文件的網(wǎng)絡傳輸開銷較小,使得服務端緩存也能獲得較好的優(yōu)化效果。在模擬實際應用場景測試中,緩存對小文件幾乎失去優(yōu)化效果,因為在實際應用場景中,大文件數(shù)據(jù)持續(xù)進出容量相對有限的緩存,小文件基本被“沖刷”出緩存,小文件的緩存命中率會受到嚴重影響,導致其在實際使用環(huán)境中緩存效果受限。
基于以上研究結(jié)論,本文采用服務端小文件專用緩存的方法提高小文件緩存命中率,降低對象存儲系統(tǒng)中小文件的訪問延遲,大幅提高并發(fā)訪問條件下的小文件數(shù)據(jù)處理效率。
緩存的主要原理是利用I/O 訪問模式的局部性特征,通過命中緩存,減少網(wǎng)絡請求或磁盤訪問。對象存儲環(huán)境下使用緩存技術提高小文件性能的關鍵問題在于:
(1)緩存在存儲架構中的位置,即緩存放在哪里才能取得最優(yōu)效率。
在對象存儲架構下,緩存可以放在客戶端或者服務端,客戶端緩存利用計算節(jié)點的內(nèi)存存儲數(shù)據(jù),又可分為獨立客戶端緩存和協(xié)作式客戶端緩存。獨立客戶端緩存內(nèi)容僅限于本地訪問,客戶端之間無法共享緩存中的數(shù)據(jù),在并行計算系統(tǒng)中的利用率不高。協(xié)作客戶端緩存技術[5]支持通過網(wǎng)絡相互訪問對方緩存,提高了緩存資源的利用率,但需要進行全局緩存管理,緩存數(shù)據(jù)的數(shù)據(jù)定位開銷和緩存一致性維護開銷會限制其可擴展性,較大規(guī)模系統(tǒng)難以應用。服務端緩存靠近磁盤部署,可以被所有客戶端共享,緩存利用率較高,但受限于系統(tǒng)中存儲節(jié)點的數(shù)量(遠低于計算節(jié)點),緩存總?cè)萘坑邢蓿诖笠?guī)模并行I/O 應用場景下,大量的數(shù)據(jù)進出緩存,頻繁的緩存置換會導致后續(xù)文件讀操作的緩存命中率極低。
(2)緩存內(nèi)容的管理,即如何保證有限容量的緩存中存放可被后續(xù)訪問高效利用的數(shù)據(jù)。
高命中率是緩存設計的重要目標,緩存管理和文件預取機制是提高緩存命中率的主要手段。緩存管理研究通過針對性的置換算法可以在緩存容量有限的條件下保留有效緩存項,淘汰無效緩存內(nèi)容,不同的置換算法往往適合特定的應用模式。數(shù)據(jù)預取也是緩存文件的有效手段,預取利用文件訪問的局部性原理預先讀入相關數(shù)據(jù),為后續(xù)訪問提供高緩存命中率,但無效的預取帶來的預取代價也是必須考慮的問題。
本文針對對象存儲體系結(jié)構和小文件訪問的特性,提出了小文件專用緩存技術,通過在服務端部署小文件獨占緩存ECache(Exclusive-Cache)優(yōu)化小文件訪問性能。
ECache的主要設計思想可描述為:
(1)在文件系統(tǒng)的存儲服務端設計小文件專用緩存,多個分布獨立的服務端緩存構成所有客戶端可共享的緩存池;
(2)過濾訪問策略:在文件請求到達服務端后,根據(jù)訪問文件的大小采用不同的處理策略,只有小文件被放入緩存,并支持相關聯(lián)小文件的緩存預讀入,而大文件請求則旁路緩存,直接訪問磁盤。
ECache 具有小文件緩存效率高的特點。ECache在緩存的“入口”設置篩選機制防止大文件進入緩存,使得小文件訪問獨占緩存,消除并行計算中大數(shù)據(jù)量I/O 對緩存的無效占用。多個服務端的緩存自然地聚合成“相對巨大”的小文件共享緩存池,讀入緩存中的“熱點文件”可被所有客戶端共享使用,可顯著降低對服務端磁盤的訪問次數(shù),適合較大規(guī)模高性能計算系統(tǒng)中“熱點小文件”并發(fā)訪問的應用場景。
服務端小文件專用緩存具有天然的可擴展性。和協(xié)作式緩存對比,ECache不涉及復雜的協(xié)作式管理。服務端緩存由存儲節(jié)點獨立管理,具備較好的擴展能力,隨著存儲節(jié)點規(guī)模擴展,服務端緩存總?cè)萘靠呻S之擴展,適合較大規(guī)模并行系統(tǒng)。
ECache采用“過濾”的策略將訪問過的小文件盡量留在緩存,屬于“被動”緩存策略。對于沒有被訪問過的文件,ECache則通過主動預讀技術,使得緩存中預先存儲后續(xù)訪問的其他小文件數(shù)據(jù),進一步提高小文件“首次訪問”的緩存命中率,使其適用于更多的應用場景。
預取能夠發(fā)揮作用的關鍵是對于特定的I/O模式的準確預判。很多應用場景下小文件之間具有相關性,例如搜索一個大型數(shù)據(jù)集,需要按某一次序讀取許多小文件,構成了數(shù)據(jù)訪問過程中的“空間局部性”。在對象存儲架構下,ECache部署在存儲節(jié)點,該節(jié)點不存儲目錄和文件名信息,無法通過文件命名判斷文件之間的空間局部性,只能使用對象ID。識別對象ID 帶來的空間局部性可以指導小文件的預取,這一特性和對象ID 分配以及編碼算法相關,本文基于Lustre并行文件系統(tǒng)常用的對象ID 遞增分配算法展開分析。我們跟蹤統(tǒng)計了在湖南超算中心基于Lustre的對象存儲系統(tǒng)中多個數(shù)據(jù)集合的文件對象ID 分布統(tǒng)計規(guī)律。統(tǒng)計結(jié)果顯示,同一數(shù)據(jù)集合內(nèi)的小文件的對象ID 是分段連續(xù)的,如圖3所示。這些對象ID 分布在若干個區(qū)間,區(qū)間內(nèi)對象屬于同一數(shù)據(jù)集合,而且連續(xù)的對象ID 隱含了這些文件可能在同一個應用場景下被依次訪問,本文將此規(guī)律稱為對象ID的關聯(lián)性。Ecache利用這種對象ID 之間的關聯(lián)性規(guī)律,將應用程序?qū)⒁L問的小文件事先讀入緩存,從而有效提高緩存命中率。
Figure 3 Distribution of object ID in a single dataset圖3 單個數(shù)據(jù)集中對象ID 區(qū)間分布示意圖
ECache預讀時獲取當前訪問文件的對象ID,判斷后續(xù)可能訪問的小文件集合,依次讀入緩存。ECache放在服務端,進行預取時僅涉及少量磁盤讀寫,不涉及網(wǎng)絡操作。小文件被預取到服務端的緩存后可被其他的客戶端訪問命中緩存,預取的利用率高,預取代價相對較小,適合采用“貪婪”[6]的原則提高小文件緩存的命中率,非常適合高性能計算系統(tǒng)中多個客戶端協(xié)同工作的處理模式。
本文基于Lustre并行文件系統(tǒng)設計并實現(xiàn)了ECache緩存。該實現(xiàn)在Lustre對象存儲服務器端的網(wǎng)絡請求處理層和磁盤讀寫層之間嵌入小文件對象過濾機制,基于Linux的pagecache使用存儲節(jié)點的物理內(nèi)存實現(xiàn)ECache。服務端小文件緩存的實現(xiàn)包含以下關鍵設計:
(1)緩存過濾設計。
ECache設置一個可配置的小文件閾值,文件長度小于該值則判斷為小文件。ECache過濾層解析請求報文后,通過訪問偏移量和長度判斷是否滿足小文件條件。如果小于閾值則根據(jù)對象ID 在小文件緩存中查找或分配相應大小的緩存頁面。如果一個大文件采用小塊讀寫,在初始階段也將被放入ECache。針對這一問題,ECache發(fā)現(xiàn)請求的偏移量超出緩存長度限制,則清空該緩存項,以保證緩存的小文件利用率,排除大文件干擾。
(2)緩存預取設計。
ECache采用“貪婪預取”的原則預取屬于某個對象區(qū)間內(nèi)的文件。假設當前訪問的對象為Oi,則設定預取窗口O[i-m,i+n],當m=n 時,表示預取窗口以當前對象ID 為中心,分別向前和向后連續(xù)預取n個對象,m>n則表示趨于向前預取,反之表示趨于向后預取。ECache根據(jù)預取窗口內(nèi)的對象命中率,動態(tài)調(diào)整m 和n,使其窗口移動可按照對象訪問次序移動,若O[i-m,i]區(qū)間命中率高則降低m 值,增加n 值,反之則增加n 值,降低m值。ECache采用一個小文件預讀線程池提高小文件的并發(fā)預取能力。
(3)緩存組織設計。
ECache的每個緩存項表示一個有限數(shù)目的對象區(qū)間,對應一次預取窗口內(nèi)的對象集合。每個緩存項采用一個控制域來標識,包含對象ID、數(shù)據(jù)在文件內(nèi)的偏移和長度以及訪問時間戳等信息,并用來定位區(qū)間內(nèi)緩存的數(shù)據(jù)的地址。緩存項中設定對象區(qū)間的活躍度計數(shù)。訪問一個小文件對象時,如果發(fā)現(xiàn)該對象不在緩存則創(chuàng)建緩存項,并設定窗口實施預取。緩存項以對象ID 為索引進行檢索,采用常用的LRU 緩存管理算法。在申請新頁面不成功時,則按活躍度淘汰一個最不活躍的對象區(qū)間。ECache限制總的內(nèi)存頁面使用量,避免造成內(nèi)存耗盡影響其他存儲服務的運行。
測試使用了湖南超算中心Tianhe-1A 系統(tǒng)的16個存儲節(jié)點,存儲節(jié)點配置兩個Intel Xeon雙核處理器,48GB 內(nèi)存,存儲設備采用DDN SFA 10K-M 磁盤陣列,共計60個磁盤??蛻舳撕头掌髦g使用了天河高速互連,Lustre版本為1.8.1.1。本文測試了常見的數(shù)據(jù)集合管理操作(解包和打包)和并行化數(shù)據(jù)搜索來評估ECache的緩存命中率和實際性能。測試目錄樹中包含2 000個文件,90%的文件小于64KB。
解包和打包測試主要評估不同大小的文件被服務端緩存和預取后對小文件讀寫性能的影響。測試過程中先解包,使文件按所設閾值流入緩存,然后進行打包操作讀取目錄樹下的全部文件。測試中加入大文件讀寫干擾情景:即解包所有文件后,反復讀寫多個大小在512KB~1GB的文件,讀寫數(shù)據(jù)總量大于緩存總?cè)萘?,同時進行打包測試。測試中ECache總?cè)萘吭O為256MB,能夠緩存所有小文件數(shù)據(jù)。為了測試不同的小文件閾值條件下本方法的有效性,測試選取了六個不同的小文件閾值,分別為0KB、4KB、16KB、64KB、256KB 和1 024KB。其中,0KB表示不采用小文件專用緩存。測試結(jié)果如圖4a所示。
多任務并行數(shù)據(jù)搜索測試在整個數(shù)據(jù)集中搜索字符串,所有文件長度小于16KB,緩存閾值設為16KB,并發(fā)多任務間均勻劃分并分配需讀入的數(shù)據(jù)文件集合,每個任務處理多個文件,按文件創(chuàng)建的次序遍歷讀取數(shù)據(jù)。測試中單個任務內(nèi)部按對象ID 遞增次序逐個訪問文件,但多任務間并發(fā)使得整個數(shù)據(jù)集呈現(xiàn)隨機訪問特征。測試中對比了不同任務規(guī)模條件下,無預取和不同ECache預取窗口的性能差異。測試結(jié)果見圖4b,其中預取1和預取2分別表示不同的ECache預取窗口大小,“ECache預取1”的預取窗口大于“ECache預取2”的預取窗口。
打包測試的模式主要測試小文件讀性能。隨著小文件閾值的增加,ECache的過濾設計使得更多的小文件被留在緩存,命中率逐漸上升,打包操作的性能也逐漸提升。當閾值為256KB 時,98%的文件會駐留在緩存,ECache命中率達93%。和不采用ECache相比,打包操作性能提升88%。當閾值進一步增大時,較大文件開始進入緩存,由于緩存大小的限制,部分小文件被置換出緩存,逐漸影響優(yōu)化效果。當閾值設定為1 024KB 時,緩存命中率下降為80%。因此,合理的閾值條件下,小文件過濾機制能夠有效屏蔽大文件讀寫的干擾,提升服務端緩存對小文件的優(yōu)化作用,對優(yōu)化頻繁讀取的小文件是非常有效的。為了測試ECache的最佳效果,測試中的緩存容量設置和測試數(shù)據(jù)集大小相匹配,實際應用中增大緩存容量,則有利于優(yōu)化更大規(guī)模的小文件數(shù)據(jù)集處理。
并發(fā)文件搜索測試中,ECache的預取機制使得后續(xù)要訪問的文件被讀入緩存。因此,當搜索任務數(shù)增加時,整個搜索的執(zhí)行時間并沒有出現(xiàn)大幅增長。在“Ecache預取1”條件下,任務數(shù)由1增加到2 048,搜索時間最大為19 724μs,最小為5 319μs。在“ECache預取2”條件下,當任務數(shù)增加到2 048時,搜索時間增加到50 388μs。在不采用預取時,2 048個任務的搜索時間為255 568μs。上述結(jié)果充分驗證了專用Cache機制的有效性。
優(yōu)化元數(shù)據(jù)訪問會對小文件性能產(chǎn)生影響,例如,分布式元數(shù)據(jù)技術[7]通過增加元數(shù)據(jù)服務器的方法提高元數(shù)據(jù)訪問的吞吐率,但無法降低小文件訪問過程中的元數(shù)據(jù)訪問延遲。將小文件的數(shù)據(jù)和元數(shù)據(jù)都存放在元數(shù)據(jù)服務器可以減少一次網(wǎng)絡操作次數(shù),但這種方法加重了元數(shù)據(jù)服務器的負載,不適合規(guī)模較大的并行計算系統(tǒng)。文獻[3]研究了在對象架構下如何利用命名空間的局部性原理預取元數(shù)據(jù),以降低訪問元數(shù)據(jù)所引發(fā)的交互次數(shù),其主要針對元數(shù)據(jù)的訪問進行優(yōu)化,但沒有涉及到“訪問對象數(shù)據(jù)”過程中小粒度磁盤訪問所引發(fā)的延遲問題。使用延遲較小的網(wǎng)絡可以提高小文件訪問延遲,例如使用Infiniband構建并行文件系統(tǒng)[8]。
采用內(nèi)存或速度更快的存儲介質(zhì),如固態(tài)盤SSD[9]做緩存,可有效降低小文件的訪問延遲。緩存技術使用客戶端內(nèi)存降低元數(shù)據(jù)的訪問延遲,是優(yōu)化文件系統(tǒng)小文件訪問延遲的一個有效途徑。文獻[5]研究了客戶端緩存協(xié)作技術,該技術提高了緩存的利用率,但帶來了緩存管理的復雜性。本文僅針對小文件訪問延遲,以服務端過濾的思想提高緩存利用率,更適合實際應用。文獻[10]基于文件系統(tǒng)歷史信息挖掘元數(shù)據(jù)“親和性”,并指導元數(shù)據(jù)預取,提高預取準確性,但該方法需要統(tǒng)計文件系統(tǒng)運行的歷史信息。本文研究文件和對象ID 之間的潛在關聯(lián)性,利用這種關聯(lián)性所產(chǎn)生的“文件親和性”預取文件對象數(shù)據(jù)。
本文研究了對象存儲并行文件系統(tǒng)的小文件性能問題?;诓⑿形募到y(tǒng)中小文件的訪問開銷分析,本文提出了服務端小文件過濾思想,設計了小文件獨占服務端緩存策略,以及基于對象ID關聯(lián)性的預取技術,并基于Lustre文件系統(tǒng)進行了實現(xiàn)和驗證。實驗結(jié)果表明,小文件獨占服務端緩存可排除大文件訪問的干擾,有效提高小文件的緩存使用效率,優(yōu)化小文件訪問性能。對于打包操作,小文件訪問性能提高可達88%,內(nèi)容搜索操作也可獲得75%的性能提高。本文研究的小文件緩存技術保留了現(xiàn)有對象存儲的架構優(yōu)勢,可彌補其小文件讀性能的不足。未來將進一步研究對象存儲架構下小文件對象ID 的訪問局部性指導預取,提高緩存命中率,降低預取代價。本文所提出的方法也適合在對象存儲架構下,以固態(tài)盤做小文件緩存,實現(xiàn)混合存儲。
[1]Object storage architecture.Panasas white paper[EB/OL].[2009-01-01].http:∥www.panasas.com.
[2]Lustre file system [EB/OL].[2005-08-07].http:∥www.lustre.org.
[3]Cho H,Kim S,Lee S.Analysis of long-term file system activities on cluster systems[J].World Academy of Science Engineering and Technology,2009,60(1):159-164.
[4]Hendricks J,Sambasivan R R,Sinnamohideen S,et al.Improving small file performance in object-based storage[R].CMU-PDL-06-104,Pittsburgh:Carnegie Mellon University,2006.
[5]Dahlin M D,Wang R Y,Anderson T E,et al.Cooperative caching:Using remote client memory to improve file system performance[C]∥Proc of the 1st Symposium on Operating Systems Design and Implementation,1994:1.
[6]Lu kai,Jin Shi-yao,Lu Xi-cheng.Properly greedy cache prefetch integrated algorithm in the parallel file system[J].Chinese Journal of Computers,1999,2.(11):1172-1177.(in Chinese)
[7]Patil S V,Gibson G,Lang S,et al.Giga+:Scalable directories for shared file systems[C]∥Proc of the 2nd International Workshop on Petascale Data Storage,2007:26-29.
[8]Dong Yong,Zhou En-qiang,Chen Juan.Infiniband-based highperformance distributed file system-Lustre[J].Computer Engineering and Applications,2005,41(22):103-107.(in Chinese)
[9]Polte M,Simsa J,Gibson G.Comparing performance of solid state devices and mechanical disks[C]∥Proc of the 3rd Petascale Data Storage Workshop,2008:1-7.
[10]Lin Lin,Li Xue-min,Jiang Hong,et al.AMP:An affinitybased metadata prefetching scheme in large-scale distributed storage systems[C]∥Proc of Cluster of Computing and the Grid,2008:459-466.
附中文參考文獻:
[6]盧凱,金士堯,盧錫城.并行文件系統(tǒng)中適度貪婪的cache預取一體化算法[J].計算機學報,1999,2.(11):1172-1177.
[8]董勇,周恩強,陳娟.基于Infiniband技術構建高性能分布式文件系統(tǒng)-Lustre[J].計算機工程與應用,2005,41(22):103-107.