何曉斌,高潔,肖偉,陳起,劉鑫,陳左寧
(1.國(guó)家并行計(jì)算機(jī)工程技術(shù)研究中心,北京 100080;2.清華大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)系,北京 100084;3.中國(guó)工程院,北京 100088)
當(dāng)前高性能計(jì)算已經(jīng)邁入E 級(jí)時(shí)代,隨著傳統(tǒng)超算與AI 的不斷融合,超算應(yīng)用領(lǐng)域不斷擴(kuò)大,應(yīng)用產(chǎn)生的數(shù)據(jù)量也呈爆發(fā)性增長(zhǎng)[1-3]。為此,主流高性能計(jì)算系統(tǒng)均構(gòu)建了多層存儲(chǔ)體系,主要包括全局文件系統(tǒng)(Global File System,GFS)、突發(fā)緩沖存儲(chǔ)(Burst Buffer,BB)[4]、節(jié)點(diǎn)高速存儲(chǔ)層等,其中GFS 主要使用大容量磁盤(pán)構(gòu)建,BB 一般使用NVMe SSD 構(gòu)建。此外,近年來(lái)利用非易失性隨機(jī)訪問(wèn)存儲(chǔ)器(Non-Volatile Random Access Memory,NVRAM)、非易失性雙列存儲(chǔ)模塊(Non-Volatile Dual In-line Memory Module,NVDIMM)等高速存儲(chǔ)介質(zhì)構(gòu)建節(jié)點(diǎn)高速存儲(chǔ)層也成為研究熱點(diǎn)[5]。最新發(fā)布的美國(guó)Frontier 超算部署了三層存儲(chǔ)[6],包括計(jì)算節(jié)點(diǎn)本地高速存儲(chǔ)、全局共享的SSD 存儲(chǔ)和全局共享的磁盤(pán)存儲(chǔ),合計(jì)存儲(chǔ)容量高達(dá)760 PB,數(shù)據(jù)讀帶寬達(dá)75 TB/s,數(shù)據(jù)寫(xiě)帶寬達(dá)35 TB/s;日本超級(jí)計(jì)算機(jī)富岳[7]部署了兩層存儲(chǔ),包括計(jì)算節(jié)點(diǎn)共享的SSD 存儲(chǔ)系統(tǒng),容量達(dá)16 PB,帶寬達(dá)10 TB/s,此外還基于磁盤(pán)構(gòu)建了容量達(dá)100 PB 的全局文件系統(tǒng)。存儲(chǔ)層次的不斷增加,雖然提升了存儲(chǔ)系統(tǒng)的總體性能,但是目前多層存儲(chǔ)系統(tǒng)的構(gòu)建缺乏統(tǒng)一標(biāo)準(zhǔn),特別是BB 層與計(jì)算節(jié)點(diǎn)本地存儲(chǔ)層,為了發(fā)揮硬件介質(zhì)的性能優(yōu)勢(shì),其軟件設(shè)計(jì)與傳統(tǒng)存儲(chǔ)軟件存在顯著差異,無(wú)法與傳統(tǒng)文件系統(tǒng)形成統(tǒng)一名字空間,如GekkoFS[8]、UnifyFS[9]、CROSS[10]、Datawarp[11]、BeeOND[12-13]等文件系統(tǒng)均基于BB 構(gòu)建了獨(dú)立的文件系統(tǒng)空間,需要應(yīng)用修改數(shù)據(jù)訪問(wèn)路徑,往往會(huì)導(dǎo)致額外的數(shù)據(jù)管理負(fù)擔(dān)。正是由于以上原因,導(dǎo)致存儲(chǔ)加速系統(tǒng)的利用率普遍不高[14]。業(yè)界針對(duì)以上問(wèn)題研發(fā)了多款軟件,如Elevator[15]、Unistor[16]、Hermes[17]等,但是此類軟件或者針對(duì)特定的上層I/O 庫(kù)(例如HDF5 等),或者無(wú)法支持多層異構(gòu)存儲(chǔ)介質(zhì),難以適用于下一代國(guó)產(chǎn)超算存儲(chǔ)系統(tǒng)。
為解決多層存儲(chǔ)架構(gòu)無(wú)法實(shí)現(xiàn)統(tǒng)一名字空間訪問(wèn)的問(wèn)題,本文提出對(duì)應(yīng)用透明的加速技術(shù)。針對(duì)計(jì)算節(jié)點(diǎn)NVDIMM 等高速存儲(chǔ)層設(shè)計(jì)透明的塊級(jí)數(shù)據(jù)讀寫(xiě)緩存機(jī)制,提出支持?jǐn)?shù)據(jù)順序讀和跨步讀的預(yù)讀算法,實(shí)現(xiàn)NVDIMM 層與BB 層統(tǒng)一名字空間管理;針對(duì)BB 層設(shè)計(jì)文件級(jí)的數(shù)據(jù)緩存機(jī)制,提出緩存副本的一致性管理方法,實(shí)現(xiàn)BB 層與傳統(tǒng)GFS 層統(tǒng)一名字空間管理。最終,基于神威E 級(jí)原型驗(yàn)證系統(tǒng)對(duì)這2 種緩存技術(shù)進(jìn)行測(cè)試。
當(dāng)前,隨著超算算力的高速增長(zhǎng),為支撐超算應(yīng)用的數(shù)據(jù)訪問(wèn)需求,超算存儲(chǔ)系統(tǒng)一般使用分層存儲(chǔ)架構(gòu)構(gòu)建,主要包括大容量全局文件系統(tǒng)、高性能Burst Buffer 以及計(jì)算節(jié)點(diǎn)本地高速NVDIMM 等層次[6-7,18-19],其架構(gòu)如圖1 所示。
圖1 超算分層存儲(chǔ)架構(gòu)Fig.1 Tiered storage architecture of supercomputing
大容量全局文件系統(tǒng)一般基于磁盤(pán)存儲(chǔ)構(gòu)建,具有容量大、數(shù)據(jù)全局共享、可靠性高、兼容標(biāo)準(zhǔn)接口、聚合帶寬較低等特點(diǎn),如Lustre[20-21]、BeeGFS[12]等;而高性能BB 存儲(chǔ)系統(tǒng)一般基于SSD 構(gòu)建,性能相比全局文件系統(tǒng)更高,具備一定的數(shù)據(jù)共享機(jī)制,但是目前這一類系統(tǒng)往往不能完整支持POSIX 接口,應(yīng)用使用時(shí)不僅需要修改路徑,而且還需要定制數(shù)據(jù)從GFS 導(dǎo)入至BB(stage-in)以及從BB導(dǎo)出至GFS(stage-out)的管理流程,如GekkoFS[8]、DAOS[22]、UnifyFS[9]、HadaFS[23]、Datawarp[11]等;計(jì)算節(jié)點(diǎn)本地的NVDIMM 存儲(chǔ)性能更接近內(nèi)存,但是容量較小,僅可作為臨時(shí)性局部存儲(chǔ)空間,這類存儲(chǔ)介質(zhì)一般通過(guò)塊接口使用[24-25],難以適用于通用的I/O 流程[26]。
分層存儲(chǔ)通過(guò)更多層次高速硬件的部署提升了存儲(chǔ)系統(tǒng)的基礎(chǔ)性能,然而卻帶來(lái)了統(tǒng)一名字空間的問(wèn)題,如何對(duì)應(yīng)用隱藏多層次存儲(chǔ)系統(tǒng)的復(fù)雜性,透明提升應(yīng)用數(shù)據(jù)訪問(wèn)的效率成為業(yè)界關(guān)注的難題[14,27]。Elevator提出了一種針對(duì)Burst Buffer 的透明緩存機(jī)制,可實(shí)現(xiàn)BB 與GFS 的透明整合,但是這種機(jī)制只能運(yùn)行在HDF5 庫(kù)內(nèi)部,存在適應(yīng)性問(wèn)題[15];Unistor 在Elevator 的基礎(chǔ)上實(shí)現(xiàn)了對(duì)通用場(chǎng)景下BB 的加速機(jī)制支持,但是無(wú)法支持NVDIMM存儲(chǔ)環(huán)境[16];IBM 在Summit 中分別提出了面向計(jì)算節(jié)點(diǎn)本地SSD 的塊和文件級(jí)緩存機(jī)制,但是僅支持透明的寫(xiě)緩存[28];LPCC 基于Lustre 文件系統(tǒng)實(shí)現(xiàn)了BB 與GFS 的數(shù)據(jù)緩存[20],但是其要求BB 中的數(shù)據(jù)必須寫(xiě)回GFS 以支持?jǐn)?shù)據(jù)共享,數(shù)據(jù)共享效率較低;Hermes 提出多級(jí)存儲(chǔ)融合使用的方法,但是其緩存管理和分配機(jī)制需要統(tǒng)計(jì)大量I/O 事件信息,在大規(guī)模超算中存在擴(kuò)展性差的問(wèn)題[17]。
神威E 級(jí)原型驗(yàn)證系統(tǒng)是我國(guó)面向E 級(jí)超算關(guān)鍵技術(shù)挑戰(zhàn)構(gòu)建的驗(yàn)證平臺(tái)[29],配置了全局文件系統(tǒng)、BB 存儲(chǔ)系統(tǒng),并且具備利用節(jié)點(diǎn)內(nèi)存進(jìn)行I/O 加速的基礎(chǔ)。該系統(tǒng)中的全局文件系統(tǒng)基于Lustre+LWFS 構(gòu)建,與神威·太湖之光全局存儲(chǔ)相似[19];BB存儲(chǔ)系統(tǒng)基于全新研制的HadaFS 構(gòu)建,該系統(tǒng)實(shí)現(xiàn)了用戶層、松耦合的文件訪問(wèn)語(yǔ)義。面向下一代超算的I/O 挑戰(zhàn),本文針對(duì)NVDIMM 的塊訪問(wèn)和BB 的文件訪問(wèn)優(yōu)勢(shì)分別提出不同的數(shù)據(jù)緩存機(jī)制,從而支持多層存儲(chǔ)加速的統(tǒng)一名字空間,實(shí)現(xiàn)對(duì)應(yīng)用透明的I/O 加速。相關(guān)技術(shù)在神威E 級(jí)原型驗(yàn)證系統(tǒng)中進(jìn)行部署,為神威下一代超算存儲(chǔ)系統(tǒng)的研發(fā)提供參考。
為解決當(dāng)前超算多層存儲(chǔ)異構(gòu)軟件堆疊帶來(lái)的多種名字空間統(tǒng)一的問(wèn)題,本文提出面向下一代超算的透明存儲(chǔ)加速技術(shù),如圖2 所示,該技術(shù)嵌入在超算多層存儲(chǔ)軟件棧中,支持POSIX 標(biāo)準(zhǔn)的文件讀寫(xiě)接口,主要包括基于NVDIMM 的塊級(jí)緩存和基于BB 的文件級(jí)緩存兩個(gè)方面。基于NVDIMM 的塊級(jí)緩存以計(jì)算節(jié)點(diǎn)高速NVDIMM 存儲(chǔ)介質(zhì)為基礎(chǔ),通過(guò)NVDIMM 高速塊訪問(wèn)協(xié)議實(shí)現(xiàn)對(duì)傳統(tǒng)文件數(shù)據(jù)塊的緩存;基于BB 的文件級(jí)緩存通過(guò)文件級(jí)的動(dòng)態(tài)數(shù)據(jù)遷移,解決BB 層與全局文件系統(tǒng)無(wú)法實(shí)現(xiàn)名字空間統(tǒng)一的問(wèn)題。
圖2 面向下一代超算的透明存儲(chǔ)加速技術(shù)架構(gòu)Fig.2 Transparent storage acceleration technology architecture for next-generation supercomputing
基于NVDIMM 的塊級(jí)緩存運(yùn)行在超算BB 層存儲(chǔ)之上,針對(duì)計(jì)算節(jié)點(diǎn)本地讀寫(xiě)的數(shù)據(jù)流進(jìn)行加速,其利用計(jì)算節(jié)點(diǎn)NVDIMM 實(shí)現(xiàn)對(duì)文件的數(shù)據(jù)塊級(jí)緩存,原理如圖3 所示。NVDIMM 層塊級(jí)緩存功能作為一個(gè)獨(dú)立模塊嵌入超算存儲(chǔ)客戶端內(nèi)部,自動(dòng)截獲應(yīng)用文件讀寫(xiě)的數(shù)據(jù)塊地址、大小等信息,并為存儲(chǔ)客戶端提供塊級(jí)寫(xiě)數(shù)據(jù)緩存和數(shù)據(jù)預(yù)讀功能。
圖3 NVDIMM 塊級(jí)緩存的工作原理Fig.3 Principle of NVDIMM block-level cache
NVDIMM 塊級(jí)緩存模塊在NVDIMM 介質(zhì)中以文件為單位分別維護(hù)了讀寫(xiě)兩個(gè)先進(jìn)先出(FIFO)隊(duì)列,此外還包括數(shù)據(jù)一致性控制、數(shù)據(jù)異步寫(xiě)引擎和數(shù)據(jù)預(yù)讀引擎等部分。應(yīng)用進(jìn)程產(chǎn)生的文件操作如讀(read)、寫(xiě)(write)、刷新(flush)、獲取狀態(tài)(stat)等將按照時(shí)間順序依次進(jìn)入隊(duì)列,并由數(shù)據(jù)一致性控制部件決定是否立即向上層應(yīng)用返回成功。對(duì)于寫(xiě)操作,若NVDIMM 中事先設(shè)定的緩存窗口沒(méi)有溢出,則設(shè)置為異步操作,否則設(shè)置為同步操作。異步操作意味著該寫(xiě)請(qǐng)求的數(shù)據(jù)塊將被緩存至NVDIMM,同時(shí)客戶端將立即向應(yīng)用返回寫(xiě)成功,而同步操作意味著客戶端需要等待該請(qǐng)求刷新至BB 層文件系統(tǒng)后才能向應(yīng)用返回結(jié)果。寫(xiě)操作緩存的數(shù)據(jù)塊由數(shù)據(jù)異步寫(xiě)引擎負(fù)責(zé)刷新至BB 層文件系統(tǒng)中。
對(duì)于讀操作,系統(tǒng)將盡可能多地預(yù)讀數(shù)據(jù)塊并緩存在讀數(shù)據(jù)隊(duì)列中,以減少?gòu)姆?wù)端直接讀數(shù)據(jù)的次數(shù)。數(shù)據(jù)讀引擎根據(jù)讀緩存隊(duì)列中緩存的數(shù)據(jù)塊大小和偏移位置決定預(yù)讀數(shù)據(jù)起始位置和大小,目前有可探測(cè)順序(Sequential)讀和跨步(Stride)讀兩種模式,對(duì)于隨機(jī)讀默認(rèn)按照順序讀的方式預(yù)取數(shù)據(jù),數(shù)據(jù)預(yù)取塊大小為事先設(shè)定的大數(shù)據(jù)塊,以提升命中概率。數(shù)據(jù)預(yù)讀算法如算法1 所示。
算法1數(shù)據(jù)預(yù)讀算法
輸入最近兩次讀請(qǐng)求q1(offset,size)、q2(offset,size),以及記錄的跨步偏移量stride_offset
輸出預(yù)讀的數(shù)據(jù)塊請(qǐng)求q_preread(offset,size)
NVDIMM 塊緩存模塊收到應(yīng)用讀數(shù)據(jù)請(qǐng)求后,將在文件預(yù)讀數(shù)據(jù)塊列表中查找對(duì)應(yīng)的數(shù)據(jù)塊,具體算法如算法2 所示。此外,為了保證緩存的利用率,緩存塊搜索的過(guò)程也需要同步進(jìn)行緩存塊清理,以實(shí)現(xiàn)后續(xù)更多數(shù)據(jù)的預(yù)讀。
算法2預(yù)讀數(shù)據(jù)塊的搜索和管理算法
輸入已經(jīng)預(yù)讀的數(shù)據(jù)塊(offset,size,buffer)組成的順序列表list,以及應(yīng)用的讀請(qǐng)求rq(offset,size)
輸出命中返回hitbuf,以及剩余未命中部分的left_offset和left_size;未命中返回NULL
高性能計(jì)算應(yīng)用數(shù)據(jù)讀寫(xiě)類型較為單一,幾乎不存在多進(jìn)程對(duì)同一文件同一區(qū)域進(jìn)行可覆蓋寫(xiě)以及讀寫(xiě)交叉的應(yīng)用場(chǎng)景,因此,NVDIMM 塊級(jí)緩存對(duì)讀、寫(xiě)隊(duì)列分開(kāi)處理,且不支持對(duì)同一文件進(jìn)行緩存寫(xiě)與預(yù)讀。讀寫(xiě)一致性模塊對(duì)于請(qǐng)求隊(duì)列中的數(shù)據(jù)一致性進(jìn)行檢查,發(fā)現(xiàn)對(duì)同一文件同時(shí)進(jìn)行緩存寫(xiě)與預(yù)讀的I/O行為后將對(duì)該文件強(qiáng)制禁用寫(xiě)緩存和預(yù)讀功能。
由于NVDIMM 是一種非易失的存儲(chǔ)介質(zhì),因此基于NVDIMM 的塊緩存機(jī)制理論上具備節(jié)點(diǎn)故障后恢復(fù)數(shù)據(jù)的能力,為此,讀寫(xiě)一致性處理部件在數(shù)據(jù)寫(xiě)入的同時(shí)還保留了文件數(shù)據(jù)塊緩存的日志,以在節(jié)點(diǎn)故障恢復(fù)后快速恢復(fù)數(shù)據(jù),同時(shí)由于底層文件系統(tǒng)存儲(chǔ)了文件的真實(shí)大小和訪問(wèn)時(shí)間,因此故障狀態(tài)下應(yīng)用可根據(jù)文件大小、訪問(wèn)時(shí)間等檢索受影響的文件,以在應(yīng)用層做出補(bǔ)救。對(duì)于讀緩存,由于本身不涉及數(shù)據(jù)一致性問(wèn)題,因此無(wú)需特殊處理。
NVDIMM 層塊級(jí)緩存支持兩種管理方式:一種是用戶通過(guò)環(huán)境變量設(shè)置加速目錄和緩存窗口大小,該模塊自動(dòng)為目錄中文件讀寫(xiě)的全流程進(jìn)行NVDIMM 緩存;另一種是應(yīng)用通過(guò)標(biāo)準(zhǔn)的ioctl 接口以文件為單位進(jìn)行緩存的動(dòng)態(tài)開(kāi)關(guān),實(shí)現(xiàn)對(duì)數(shù)據(jù)緩存更加精確的控制。
基于BB 的文件級(jí)緩存模塊運(yùn)行在超算存儲(chǔ)服務(wù)端,對(duì)上兼容POSIX 接口,也作為NVDIMM 塊級(jí)緩存數(shù)據(jù)導(dǎo)出和預(yù)讀的支撐平臺(tái),對(duì)下訪問(wèn)GFS 和BB 文件系統(tǒng),支持BB 與GFS 統(tǒng)一名字空間,應(yīng)用的所有目錄操作均由GFS 完成,而對(duì)文件數(shù)據(jù)訪問(wèn),則提供寫(xiě)緩存和預(yù)加載兩種策略。在寫(xiě)緩存策略中,應(yīng)用產(chǎn)生的數(shù)據(jù)默認(rèn)寫(xiě)入BB 中,系統(tǒng)將在收到close 操作后將數(shù)據(jù)由BB 遷移至GFS;而在預(yù)加載策略中,文件將在首次讀或者收到用戶預(yù)加載命令后,將文件由GFS 預(yù)加載至BB。圖4 以文件預(yù)加載為例子,說(shuō)明了文件級(jí)透明緩存的流程。
圖4 BB 文件級(jí)緩存的文件預(yù)加載流程Fig.4 Procedure of file proload in BB file-level cache
BB 與GFS 之間的文件遷移完成后,同一個(gè)文件在GFS 和BB 中存在兩個(gè)副本。對(duì)于寫(xiě)緩存策略,BB 中的副本在遷移完成后數(shù)據(jù)將被刪除或者設(shè)置為只讀權(quán)限,而對(duì)于預(yù)加載策略,BB 中的副本只有讀權(quán)限,文件緩存管理利用一個(gè)K-V 庫(kù)監(jiān)控存儲(chǔ)副本信息,并由緩存文件的屬性檢查和更新模塊監(jiān)控管理BB 中只讀副本與GFS 中副本的屬性變化,一旦發(fā)現(xiàn)GFS 中的數(shù)據(jù)被更改或者BB中副本的存儲(chǔ)時(shí)間超過(guò)預(yù)設(shè)時(shí)間,則BB中的只讀副本將被刪除,從而減少文件副本占用的BB空間,具體原理如圖5 所示。
圖5 BB 層緩存文件副本的管理流程Fig.5 Management procedure of cache file copies in BB layer
BB 層文件級(jí)緩存支持用戶通過(guò)特定的工具以目錄為單位設(shè)置緩存管理策略,包括數(shù)據(jù)遷移的觸發(fā)條件、副本在BB 中的留存時(shí)間等,系統(tǒng)將以目錄為單位按照策略進(jìn)行緩存文件的自動(dòng)管理,緩存文件管理的過(guò)程對(duì)應(yīng)用I/O 過(guò)程透明。
神威系列超算是具有世界影響力的超算平臺(tái)[30-31],神威E 級(jí)原型驗(yàn)證系統(tǒng)是神威面向E 級(jí)時(shí)代超算技術(shù)研制的驗(yàn)證系統(tǒng),部署于國(guó)家超級(jí)計(jì)算濟(jì)南中心,其基于國(guó)產(chǎn)SW26010Pro 處理器構(gòu)建[32],每個(gè)處理器包含6 個(gè)核組,可支持6 路I/O 并發(fā)進(jìn)程,節(jié)點(diǎn)之間使用神威網(wǎng)絡(luò)互連[29],單節(jié)點(diǎn)上網(wǎng)帶寬達(dá)到400 Gb/s以上,可用于I/O的網(wǎng)絡(luò)帶寬超過(guò)200 Gb/s。神威E 級(jí)原型驗(yàn)證系統(tǒng)的存儲(chǔ)系統(tǒng)符合圖1 所示的超算存儲(chǔ)架構(gòu),其中數(shù)據(jù)轉(zhuǎn)發(fā)節(jié)點(diǎn)配置了雙路服務(wù)器CPU,單節(jié)點(diǎn)網(wǎng)絡(luò)帶寬為200 Gb/s,并部署了兩塊NVMe SSD(單塊容量為3.2 TB)以構(gòu)建突發(fā)緩沖存儲(chǔ)(BB)。全局存儲(chǔ)方面利用Lustre 構(gòu)建了全局文件系統(tǒng)(GFS),利用LWFS 實(shí)現(xiàn)了全局文件系統(tǒng)的數(shù)據(jù)轉(zhuǎn)發(fā)。在本文的測(cè)試中,由于NVDIMM 硬件針對(duì)國(guó)產(chǎn)處理器環(huán)境的適配仍在實(shí)驗(yàn)階段,因此使用節(jié)點(diǎn)DRAM 內(nèi)存模擬NVDIMM 構(gòu)建塊級(jí)緩存。
本文使用IOR Benchmark[33]在神威原型驗(yàn)證系統(tǒng)中測(cè)試存儲(chǔ)加速技術(shù)使用后的帶寬變化情況。IOR 測(cè)試進(jìn)程運(yùn)行在計(jì)算節(jié)點(diǎn)中,每個(gè)測(cè)試進(jìn)程通過(guò)本文提出的加速技術(shù)讀寫(xiě)?yīng)毩⒌奈募?。測(cè)試在不修改應(yīng)用程序數(shù)據(jù)訪問(wèn)路徑的前提下進(jìn)行,分別測(cè)試加速技術(shù)啟用和不啟用時(shí)的性能,以對(duì)比本文所提技術(shù)的透明加速效果。此外,還使用超算典型應(yīng)用對(duì)本文提出的加速技術(shù)進(jìn)行測(cè)試。
3.3.1 計(jì)算節(jié)點(diǎn)NVDIMM 塊級(jí)緩存的測(cè)試
NVDIMM 塊緩存機(jī)制運(yùn)行在存儲(chǔ)系統(tǒng)客戶端,由于在高性能應(yīng)用運(yùn)行時(shí),NVDIMM 可能有SWAP 空間、應(yīng)用直接存儲(chǔ)數(shù)據(jù)等多種其他用途,同時(shí)為了測(cè)試NVDIMM 緩存機(jī)制在緩存溢出時(shí)的加速效果,選擇16 MB 緩存窗口進(jìn)行測(cè)試(單節(jié)點(diǎn)4 進(jìn)程運(yùn)行時(shí)占據(jù)的內(nèi)存為64 MB,考慮常用的國(guó)產(chǎn)NVDIMM 單根大小為16 GB,占比為1/256),對(duì)比技術(shù)為未使用NVDIMM 塊緩存的BB 文件系統(tǒng)HadaFS 的常規(guī)讀寫(xiě)機(jī)制,內(nèi)存刷新和預(yù)讀塊大小為1 MB,選擇128 KB 塊順序讀寫(xiě)和8 KB 塊隨機(jī)讀寫(xiě)兩種典型模式,128 KB 塊順序讀寫(xiě)單進(jìn)程數(shù)據(jù)量為1 GB,8 KB 塊隨機(jī)讀寫(xiě)單進(jìn)程數(shù)據(jù)量為80 MB,由于NVDIMM 塊緩存機(jī)制僅作用在客戶端,因此測(cè)試中服務(wù)端固定為一個(gè)轉(zhuǎn)發(fā)節(jié)點(diǎn)。
緩存窗口大小為16 MB 時(shí)128 KB 順序讀寫(xiě)帶寬的測(cè)試結(jié)果如圖6 所示。隨著測(cè)試進(jìn)程數(shù)的不斷增加,塊緩存機(jī)制實(shí)現(xiàn)了讀寫(xiě)帶寬的加速。對(duì)于寫(xiě)操作:當(dāng)1、4、16 進(jìn)程時(shí),塊緩存模式寫(xiě)帶寬增幅超過(guò)40%;當(dāng)進(jìn)程超過(guò)64 個(gè)時(shí),寫(xiě)帶寬增幅逐漸降低;當(dāng)1 024 個(gè)進(jìn)程并發(fā)時(shí),增幅為12%;不同進(jìn)程規(guī)模下的平均增幅為36%。出現(xiàn)這種現(xiàn)象的主要原因在于塊緩存機(jī)制啟用后雖然數(shù)據(jù)寫(xiě)入本地緩存,但是由于緩存窗口大小的限制,并未實(shí)現(xiàn)完全的緩存命中。以64 進(jìn)程為例,寫(xiě)緩存命中率為89%,一旦寫(xiě)緩存未命中,則該請(qǐng)求必須等待緩存隊(duì)列清空后才能向應(yīng)用返回,因此影響了性能。此外,測(cè)試中計(jì)算了文件的close 時(shí)間,由于寫(xiě)文件完成后的close 操作需要刷新元數(shù)據(jù)等信息,因此耗時(shí)較長(zhǎng),也一定程度影響了寫(xiě)緩存的總體效果。對(duì)于讀操作:由于數(shù)據(jù)預(yù)讀的塊大小為1 MB,128 KB 塊讀寫(xiě)時(shí)緩存命中率最高為87.5%,命中率低于寫(xiě)操作,因此測(cè)試的不同進(jìn)程規(guī)模下的平均增幅更小,為27%;隨著進(jìn)程數(shù)的不斷增加,加速幅度降低的主要原因在于底層存儲(chǔ)的性能已經(jīng)達(dá)到峰值,因此每個(gè)計(jì)算節(jié)點(diǎn)端可見(jiàn)的緩存刷新或者預(yù)讀的速率降低,從而導(dǎo)致緩存命中率降低。
圖6 16 MB 緩存窗口時(shí)128 KB 塊的順序讀寫(xiě)性能Fig.6 Sequential read/write performance of a 128 KB block when the cache window is set to 16 MB
緩存窗口大小為16 MB 時(shí)8 KB 隨機(jī)讀寫(xiě)帶寬如圖7 所示。隨著測(cè)試進(jìn)程數(shù)的增加,8 KB 隨機(jī)讀寫(xiě)的帶寬不斷增加,相對(duì)HadaFS 常規(guī)操作的性能增幅變化與128 KB 塊大小順序讀寫(xiě)帶寬增幅變化規(guī)律相似,在64 進(jìn)程規(guī)模下讀寫(xiě)帶寬分別提升19%和39%,不同進(jìn)程規(guī)模下的平均增幅分別為20% 和37%。雖然8 KB 隨機(jī)場(chǎng)景下NVDIMM 緩存機(jī)制難以準(zhǔn)確預(yù)測(cè)出讀請(qǐng)求的偏移量,但是由于緩存窗口相對(duì)于8 KB 塊大小比例較高,因此提前讀入的數(shù)據(jù)量大,一定程度上增加了緩存命中的概率,由此保證了讀帶寬相比未使用緩存機(jī)制有所提升。
圖7 16 MB 緩存窗口8 KB 塊的隨機(jī)讀寫(xiě)性能Fig.7 Random read/write performance of an 8 KB block when the cache window is set to 16 MB
固定進(jìn)程數(shù)為1 024,數(shù)據(jù)塊大小為128 KB,每個(gè)進(jìn)程順序讀寫(xiě)1 GB 數(shù)據(jù),并按照4 倍比例逐漸增加緩存窗口和數(shù)據(jù)預(yù)讀塊,測(cè)試得到的帶寬數(shù)據(jù)歸一化后如圖8 所示。隨著緩存窗口的不斷增大,寫(xiě)緩存命中率不斷提升,因此寫(xiě)帶寬加速比也不斷增加,一旦緩存窗口大小超過(guò)寫(xiě)入的數(shù)據(jù)總量,寫(xiě)緩存的命中率達(dá)到100%,寫(xiě)帶寬達(dá)到峰值,1 GB 窗口下寫(xiě)帶寬相比16 MB提升達(dá)到10 倍以上。隨著緩存窗口、預(yù)讀數(shù)據(jù)塊大小的不斷增加,讀帶寬也呈現(xiàn)增加趨勢(shì),但是增加幅度相對(duì)緩慢,這是由于預(yù)讀數(shù)據(jù)塊大小始終沒(méi)有超過(guò)文件大小。固定測(cè)試的進(jìn)程規(guī)模,單進(jìn)程以8 KB 塊隨機(jī)讀寫(xiě)80 MB 數(shù)據(jù),在增加緩存窗口時(shí)呈現(xiàn)出完全相同的規(guī)律,且加速效果更加明顯,此處不再贅述。
圖8 增加緩存窗口時(shí)128 KB 塊的順序讀寫(xiě)性能Fig.8 Sequential read/write performance of a 128 KB block when increasing cache window size
以上測(cè)試表明,未來(lái)隨著NVDIMM 等新型存儲(chǔ)介質(zhì)的大規(guī)模應(yīng)用,對(duì)于文件大小在NVDIMM 緩存空間內(nèi)的應(yīng)用,塊緩存機(jī)制有望大幅提升應(yīng)用的數(shù)據(jù)讀寫(xiě)性能,對(duì)于那些文件大小超過(guò)緩存空間的應(yīng)用,該機(jī)制也具有一定的加速效果。
3.3.2 基于BB 的文件級(jí)緩存測(cè)試
基于Burst Buffer 的文件級(jí)緩存機(jī)制運(yùn)行在BB節(jié)點(diǎn)上,負(fù)責(zé)實(shí)現(xiàn)BB 存儲(chǔ)的HadaFS 文件系統(tǒng)與底層全局文件系統(tǒng)(GFS)之間的數(shù)據(jù)統(tǒng)一管理和透明加速。測(cè)試使用IOR 程序,分別測(cè)試128 KB 順序讀寫(xiě)和8 KB 隨機(jī)讀寫(xiě)兩種模式,對(duì)比技術(shù)為使用磁盤(pán)構(gòu)建的GFS。測(cè)試中關(guān)閉了計(jì)算節(jié)點(diǎn)NVDIMM 緩存,測(cè)試程序運(yùn)行在計(jì)算節(jié)點(diǎn),分別測(cè)試1、16、256、1 024、4 096、8 192 進(jìn)程規(guī)模,128 KB 塊順序讀寫(xiě)測(cè)試每個(gè)進(jìn)程讀寫(xiě)數(shù)據(jù)量為1 GB,8 KB 塊隨機(jī)讀寫(xiě)測(cè)試每個(gè)進(jìn)程讀寫(xiě)數(shù)據(jù)量為80 MB,服務(wù)端運(yùn)行在8個(gè)轉(zhuǎn)發(fā)節(jié)點(diǎn),每個(gè)轉(zhuǎn)發(fā)節(jié)點(diǎn)包含2個(gè)NVMe SSD,對(duì)比本文提出的BB 級(jí)文件緩存功能打開(kāi)和關(guān)閉(相當(dāng)于使用底層GFS 進(jìn)行數(shù)據(jù)讀寫(xiě))時(shí)的聚合帶寬變化,以測(cè)試加速效果。
128 KB 塊順序讀寫(xiě)性能如圖9 所示。隨著進(jìn)程規(guī)模的不斷增加,GFS 模式和BB 文件級(jí)緩存模式均實(shí)現(xiàn)了性能增長(zhǎng),最終在8 192 進(jìn)程規(guī)模下BB 文件級(jí)緩存模式的讀寫(xiě)帶寬相比GFS 提升90%和147%,不同測(cè)試規(guī)模讀寫(xiě)帶寬的平均增幅分別為55%和141%。BB 文件級(jí)緩存機(jī)制使用后,由于BB 文件級(jí)緩存空間達(dá)到51.2 TB,遠(yuǎn)大于測(cè)試程序產(chǎn)生的數(shù)據(jù)量,確保了測(cè)試中讀寫(xiě)數(shù)據(jù)均實(shí)現(xiàn)緩存命中,測(cè)試程序產(chǎn)生的文件全部通過(guò)SSD 讀寫(xiě),因此,測(cè)試程序?qū)嶋H使用的帶寬即為BB 層HadaFS 的峰值帶寬。事實(shí)上,當(dāng)前幾乎所有主流超算在設(shè)計(jì)時(shí),其BB 層緩存空間基本都能滿足應(yīng)用突發(fā)數(shù)據(jù)的多次寫(xiě)入,可基本保證突發(fā)數(shù)據(jù)的緩存能通過(guò)BB 層的要求,提升系統(tǒng)總體I/O 性能。
圖9 BB 文件級(jí)緩存128 KB 塊順序讀寫(xiě)性能Fig.9 Sequential read/write performance of a 128 KB block in BB layer file-level cache
文件級(jí)緩存8 KB 塊隨機(jī)讀寫(xiě)性能如圖10 所示,隨著進(jìn)程數(shù)的不斷增加,8 KB 塊隨機(jī)讀寫(xiě)帶寬的變化規(guī)律與128 KB 順序?qū)懴嗨啤? 192 進(jìn)程時(shí)8 KB 隨機(jī)寫(xiě)帶寬提升240%,隨機(jī)讀帶寬提升220%,不同測(cè)試規(guī)模下讀寫(xiě)帶寬的平均增幅分別為163% 和209%,主要原因在于BB 基于SSD 構(gòu)建,其小塊隨機(jī)讀寫(xiě)性能相對(duì)于基于磁盤(pán)構(gòu)建的GFS 更具優(yōu)勢(shì)。
圖10 BB 文件級(jí)緩存8 KB 隨機(jī)讀寫(xiě)性能Fig.10 Random read/write performance of an 8 KB block in BB layer file-level cache
3.3.3 實(shí)際應(yīng)用測(cè)試
本文提出的透明存儲(chǔ)加速機(jī)制在神威E 級(jí)原型驗(yàn)證系統(tǒng)部署后,為多道應(yīng)用課題提供了數(shù)據(jù)加速服務(wù),典型的包括WRF[34]、H5bench[35]等。
WRF 是一種經(jīng)典的區(qū)域數(shù)字天氣預(yù)報(bào)系統(tǒng),通過(guò)單進(jìn)程寫(xiě)出數(shù)據(jù)。使用本文提出的塊級(jí)數(shù)據(jù)緩存技術(shù)后,WRF 寫(xiě)數(shù)據(jù)I/O 帶寬提升50%。H5bench 是一種多個(gè)進(jìn)程寫(xiě)同一個(gè)文件的經(jīng)典程序,模擬了VPIC 應(yīng)用的I/O 流程,需要進(jìn)行大量數(shù)據(jù)的讀寫(xiě)。使用基于BB 的文件級(jí)緩存后,H5bench 性能變化如圖11 所示。可以看出:使用BB 文件級(jí)緩存后,H5bench 的寫(xiě)性能相比GFS 平均提升3.6 倍,讀性能提升1.3 倍,這是由于H5bench 是典型的多進(jìn)程讀寫(xiě)同一文件的應(yīng)用場(chǎng)景,GFS 在這種場(chǎng)景下由于需要維護(hù)嚴(yán)格數(shù)據(jù)一致性,因此性能開(kāi)銷(xiāo)較大;此外,BB文件緩存的H5bench 最高寫(xiě)帶寬為圖9 中BB 峰值性能的一半,而讀性能達(dá)到圖9 中BB 所能實(shí)現(xiàn)的最高讀帶寬,原因在于H5bench 是多個(gè)進(jìn)程寫(xiě)同一個(gè)文件,在底層BB 端也面臨著多個(gè)進(jìn)程寫(xiě)同一個(gè)文件的場(chǎng)景,因此性能不如每個(gè)進(jìn)程寫(xiě)?yīng)毩⒌奈募?,由于多個(gè)進(jìn)程讀同一個(gè)文件時(shí)NVMe SSD 底層文件系統(tǒng)緩存作用明顯,因此能實(shí)現(xiàn)較高讀性能。
圖11 H5bench 的讀寫(xiě)性能Fig.11 Read/write performance of H5bench
E 級(jí)時(shí)代超算利用不同的存儲(chǔ)介質(zhì)構(gòu)建了大容量、高性能的多層存儲(chǔ)系統(tǒng),雖然一定程度上滿足了應(yīng)用對(duì)于存儲(chǔ)容量和性能的需求,但是由于多層存儲(chǔ)異構(gòu)軟件使用方式上的差異,難以實(shí)現(xiàn)統(tǒng)一名字空間管理和對(duì)應(yīng)用透明的緩存機(jī)制。本文針對(duì)這一問(wèn)題提出基于NVDIMM 的塊級(jí)緩存和基于Burst Buffer 的文件級(jí)緩存機(jī)制,并在神威E 級(jí)原型驗(yàn)證系統(tǒng)中進(jìn)行部署和測(cè)試。測(cè)試結(jié)果表明,本文提出的技術(shù)可以實(shí)現(xiàn)應(yīng)用透明的存儲(chǔ)加速。下一步將繼續(xù)研究多層存儲(chǔ)面向應(yīng)用的資源協(xié)調(diào)與分配機(jī)制,實(shí)現(xiàn)多應(yīng)用共享的存儲(chǔ)加速資源動(dòng)態(tài)管理。