• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種基于RDMA多播機(jī)制的分布式持久性內(nèi)存文件系統(tǒng)

      2021-02-07 02:51:34陳茂棠鄭圣安游理通王晶鈺屠要峰韓銀俊黃林鵬
      計算機(jī)研究與發(fā)展 2021年2期
      關(guān)鍵詞:多播持久性網(wǎng)卡

      陳茂棠 鄭圣安 游理通 王晶鈺 閆 田 屠要峰 韓銀俊 黃林鵬

      1(上海交通大學(xué)計算機(jī)科學(xué)與工程系 上海 200240)2(清華大學(xué)計算機(jī)科學(xué)與技術(shù)系 北京 100084)3(中興通訊股份有限公司 南京 210012)(chenmaotang@sjtu.edu.cn)

      新型的非易失性內(nèi)存(non-volatile memory, NVM)[1-5]技術(shù)的出現(xiàn)為傳統(tǒng)的計算機(jī)存儲結(jié)構(gòu)帶來變革,其中通過內(nèi)存總線連接CPU的NVM形態(tài)也被稱為持久性內(nèi)存(persistent memory, PM).與DRAM相比,持久性內(nèi)存擁有相接近的傳輸帶寬與訪問延遲,但兼具了DRAM不具備的持久性.隨著持久性內(nèi)存的逐漸應(yīng)用,許多研究針對持久性內(nèi)存設(shè)計特異性的文件系統(tǒng),其中大多數(shù)文件系統(tǒng)基于單臺機(jī)器設(shè)計[6-10].但是目前大容量的持久性內(nèi)存價格昂貴,單機(jī)存儲容量難以提高.同時,持久性內(nèi)存運行帶來較高的CPU負(fù)載,單機(jī)大規(guī)模部署持久性內(nèi)存會使CPU成為存儲性能的瓶頸.這些原因使得單機(jī)持久性內(nèi)存文件系統(tǒng)難以滿足日益增長的大規(guī)模數(shù)據(jù)存儲需求,必須開發(fā)基于持久性內(nèi)存的分布式文件系統(tǒng).

      多播技術(shù)同樣在分布式系統(tǒng)中發(fā)揮著重要的作用.多播技術(shù)的應(yīng)用范圍很廣,從多媒體數(shù)據(jù)的直播分發(fā),到數(shù)據(jù)中心的分布式文件系統(tǒng),均需要多播技術(shù)的支持.尤其是在數(shù)據(jù)中心中,數(shù)據(jù)傳輸通常是從源節(jié)點到2個甚至多個目標(biāo)節(jié)點,文件數(shù)據(jù)需要被復(fù)制到多個存儲服務(wù)器[15].這個過程造成的延遲往往占數(shù)據(jù)中心負(fù)載的主要部分,并最終決定了系統(tǒng)的總體IO性能[16].

      盡管多播技術(shù)在系統(tǒng)中起到重要的作用,但是在現(xiàn)有的基于RDMA的分布式文件系統(tǒng)中,往往沒有提供多播傳輸?shù)闹С諿13-14].在需要1對多傳輸?shù)膱鼍跋?,這些系統(tǒng)通常使用每次傳輸?shù)?個節(jié)點的方法,將數(shù)據(jù)依次推送到所有的目標(biāo)節(jié)點[17].為了解決該問題,康奈爾大學(xué)的RDMC基于RDMA的1對1傳輸開發(fā)了多播通信框架[18].但是,由于這種框架的底層依然是基于1對1的連接進(jìn)行通信,當(dāng)多播操作的目標(biāo)節(jié)點較多時,需要占用大量的網(wǎng)卡資源,導(dǎo)致系統(tǒng)難以基于框架進(jìn)行有效的擴(kuò)展.另外,基于框架的編程較為復(fù)雜,不利于分布式系統(tǒng)的應(yīng)用與維護(hù).其他解決方案在獲得可擴(kuò)展性的同時,往往為傳輸過程引入了額外的復(fù)制與延遲,同樣沒有辦法很好地解決分布式系統(tǒng)中的多拷貝文件數(shù)據(jù)傳輸問題[19].

      本文提出了一種基于RDMA多播傳輸機(jī)制的分布式持久性內(nèi)存文件系統(tǒng)(RDMA multicast trans-mission based distributed persistent memory file system, MTFS).通過使用RDMA多播通信語句,實現(xiàn)元數(shù)據(jù)節(jié)點與數(shù)據(jù)節(jié)點之間的1對多通信,提升數(shù)據(jù)傳輸效率.具體地,MTFS實現(xiàn)了低延遲多播通信機(jī)制,基于RDMA多播通信語句搭建內(nèi)核態(tài)RDMA通信模塊,將文件系統(tǒng)中1對多的傳輸請求使用多播通信機(jī)制發(fā)送,并添加無通知機(jī)制與擁塞控制來優(yōu)化RDMA傳輸,從而避免了傳統(tǒng)1對1傳輸機(jī)制帶來的冗余傳輸開銷.為提升傳輸?shù)撵`活性,對分布式文件系統(tǒng)各項功能提供支持,MTFS基于多播通信機(jī)制設(shè)計多模式遠(yuǎn)程過程調(diào)用(remote procedure call, RPC)框架,發(fā)送端將請求相關(guān)信息寫入RPC頭部,接收端通過接收處理程序解析相關(guān)信息,從而定位要執(zhí)行的操作地址與操作類型,保證相應(yīng)文件系統(tǒng)功能得到執(zhí)行.為保證多播傳輸機(jī)制的一致性,MTFS引入輕量級一致性保障機(jī)制,利用持久性內(nèi)存字節(jié)尋址的特性實現(xiàn)錯位的快速糾正,并支持在數(shù)據(jù)無法恢復(fù)時請求重傳.節(jié)點發(fā)生故障時,MTFS為元數(shù)據(jù)節(jié)點與數(shù)據(jù)節(jié)點均提供了故障恢復(fù)機(jī)制,保證文件數(shù)據(jù)的一致性與可靠性.

      本文的主要貢獻(xiàn)有3個方面:

      1) 提出基于RDMA多播機(jī)制的分布式持久性內(nèi)存文件系統(tǒng)MTFS,實現(xiàn)了內(nèi)核態(tài)RDMA通信模塊,通過將文件系統(tǒng)中1對多請求使用RDMA多播語句發(fā)送,避免了額外的開銷.

      2) 提出基于多播傳輸機(jī)制的多模式RPC設(shè)計,提升數(shù)據(jù)傳輸?shù)撵`活性,為分布式文件系統(tǒng)各項功能提供支持.

      3) 引入輕量級一致性保障機(jī)制,使用冗余校驗機(jī)制保證數(shù)據(jù)傳輸過程的可靠性,利用持久性內(nèi)存字節(jié)尋址的特性實現(xiàn)錯位的快速糾正,并為系統(tǒng)中的各個節(jié)點提供故障恢復(fù)功能,從而保證數(shù)據(jù)的可靠性與一致性.

      1 背景介紹

      本節(jié)主要介紹了持久性內(nèi)存技術(shù)與遠(yuǎn)程內(nèi)存直接訪問技術(shù)的基本特征,同時簡要介紹與MTFS相關(guān)的NOVA文件系統(tǒng)實現(xiàn)細(xì)節(jié).

      1.1 持久性內(nèi)存

      持久性內(nèi)存是一種新興的硬件技術(shù),主要包括相變存儲器(phase-change memory, PCM)、憶阻器、自旋矩存儲器(spin-torque transfer ram, STT-RAM)和3D XPoint等技術(shù)[1-4],其中基于3D XPoint的英特爾傲騰持久內(nèi)存目前已經(jīng)投入市場使用[5].

      持久性內(nèi)存的出現(xiàn)打破了內(nèi)外存之間的界限,顛覆了傳統(tǒng)的存儲體系結(jié)構(gòu).一方面,持久性內(nèi)存作為一種內(nèi)存,擁有內(nèi)存的種種特性.持久性內(nèi)存可直接連接于高帶寬的內(nèi)存總線上,傳輸帶寬和訪問延遲均與DRAM相接近,并支持字節(jié)尋址訪問.同時,與DRAM相比,持久性內(nèi)存具有更高的存儲密度和更低的能耗,這為搭建大規(guī)模內(nèi)存文件系統(tǒng)提供了基礎(chǔ).另一方面,持久性內(nèi)存作為一種持久性存儲介質(zhì),與傳統(tǒng)的硬盤和SSD相比,具有更高的帶寬和更低的訪問延遲.同時,由于CPU可以直接對持久性內(nèi)存上的數(shù)據(jù)進(jìn)行訪問,數(shù)據(jù)可以繞過DRAM,無需在內(nèi)存和存儲之間進(jìn)行遷移,數(shù)據(jù)訪問的整體性能得到了大幅的提升.

      持久性內(nèi)存為文件系統(tǒng)的設(shè)計提出了新的要求.基于持久性內(nèi)存的文件系統(tǒng)可以直接通過loadstore指令讀寫持久性內(nèi)存.一些文件系統(tǒng)專為持久性內(nèi)存進(jìn)行特異性設(shè)計[6-9,20],另一些文件系統(tǒng)則基于現(xiàn)有文件系統(tǒng)進(jìn)行改動[10,21],通過添加直接訪問能力,允許應(yīng)用程序繞過頁緩存直接訪問持久性內(nèi)存,從而實現(xiàn)了文件系統(tǒng)對持久性內(nèi)存的適配.

      1.2 遠(yuǎn)程直接內(nèi)存訪問

      近年來,RDMA技術(shù)在業(yè)界受到越來越廣泛的關(guān)注[11,22-24].RDMA技術(shù)允許應(yīng)用程序在不告知遠(yuǎn)端CPU情況下,繞過內(nèi)核直接訪問遠(yuǎn)端內(nèi)存,實現(xiàn)零拷貝的數(shù)據(jù)傳輸,從而實現(xiàn)高帶寬且低延遲的遠(yuǎn)端內(nèi)存訪問[25].目前,RDMA傳輸性能已遠(yuǎn)優(yōu)于現(xiàn)有的固態(tài)硬盤和機(jī)械硬盤的讀寫性能,如果仍使用固態(tài)硬盤或者機(jī)械硬盤搭配RDMA網(wǎng)絡(luò)實現(xiàn)分布式文件系統(tǒng),存儲介質(zhì)的高延遲將使系統(tǒng)無法充分發(fā)揮RDMA網(wǎng)絡(luò)的性能優(yōu)勢,同時文件系統(tǒng)也無法繞過DRAM直接寫入存儲介質(zhì).而持久性內(nèi)存低延遲內(nèi)存訪問的特性,使其能有效適配RDMA技術(shù),實現(xiàn)高效的遠(yuǎn)程存儲訪問.

      RDMA主要提供單邊語句和雙邊語句2種傳輸語句支持.表1展示了每種傳輸語句對應(yīng)的類型.單邊語句主要包括READ和WRITE語句,這些語句可以繞過遠(yuǎn)端節(jié)點的CPU,直接對遠(yuǎn)端內(nèi)存進(jìn)行讀寫操作.此外,RDMA單邊語句還包括compare_and_swap 和fetch_and_add等原子性語句,使RDMA能夠?qū)h(yuǎn)端內(nèi)存進(jìn)行原子性訪問.雙邊語句主要包括SEND和RECV語句,采用類似于socket編程的方式,發(fā)送端和接收端均需要CPU參與.在發(fā)送端進(jìn)行SEND操作之前,接收端需要提前準(zhǔn)備1個RECV請求并放入網(wǎng)卡,該請求中包含待接收數(shù)據(jù)的地址.

      Table 1 Verbs Type of Each Transport Verb表1 每種傳輸語句對應(yīng)的語句類型

      RDMA通過隊列對(queue pair, QP)進(jìn)行傳輸操作.每個隊列對包括1個發(fā)送隊列(send queue, SQ)和1個接收隊列(receive queue, RQ).當(dāng)進(jìn)行傳輸時,使用RDMA的程序首先根據(jù)其傳輸?shù)膬?nèi)容填充1個工作請求(work request, WR),并將其發(fā)布到發(fā)送隊列上.RDMA網(wǎng)卡會依次處理隊列上的WR,執(zhí)行對應(yīng)的傳輸操作.當(dāng)傳輸完成時,網(wǎng)卡會在完成隊列(completed queue, CQ)上發(fā)布1個工作完成(work completion, WC)信息,通知CPU進(jìn)行相應(yīng)處理.如果是雙邊操作,接收端在傳輸進(jìn)行之前還需要提交1個RECV WR并放入其接收隊列.

      RDMA包括有連接和無連接2種形式.有連接的傳輸提供2個QP之間的1對1通信,若需要與多個節(jié)點進(jìn)行通信,則需要創(chuàng)建多個QP分別與多個節(jié)點進(jìn)行1對1通信.而無連接的傳輸基于數(shù)據(jù)報實現(xiàn),通信節(jié)點之間不需要創(chuàng)建連接,每個QP可以和多個QP進(jìn)行通信.用戶可以選擇可靠或不可靠的RDMA傳輸類型.可靠的傳輸可以按照順序交付信息,并在傳輸失敗時返回錯誤信息.不可靠的傳輸則無法提供可靠性保證,但是其通過避免發(fā)送確認(rèn)信息獲取更高的性能.使用不可靠傳輸,RDMA通過數(shù)據(jù)鏈路層提供的一致性保障機(jī)制仍可以在很大程度上保證數(shù)據(jù)傳輸?shù)目煽啃訹22].

      基于傳輸是否有連接與是否可靠,RDMA提供了3種主要的傳輸方式:可靠連接(reliable connec-tion, RC),不可靠連接(unreliable connection, UC)和不可靠數(shù)據(jù)報(unreliable datagram, UD).表2展示了每種傳輸方式可以支持的傳輸語句.可以看到,不同的傳輸方式所支持的傳輸語句不同,RDMA單邊操作只在有連接的傳輸方式下支持,而RDMA多播傳輸只在UD模式下支持,因此用戶需要根據(jù)傳輸需求選擇對應(yīng)的傳輸方式.

      Table 2 Verbs Supported by Each Transport Type表2 每種傳輸方式支持的傳輸語句

      RDMA提供了多播語句支持[26].多播語句是UD模式下雙邊語句的一種特殊形式.用戶使用多播語句進(jìn)行RDMA通信時,首先將所有需要通信的節(jié)點加入同一個多播組.發(fā)送信息時,目標(biāo)地址設(shè)定為多播組的地址,發(fā)送端僅需要1次發(fā)送操作,發(fā)送成功后,所發(fā)送的信息通過交換機(jī)被分發(fā)到多播組中的各個節(jié)點.多播語句為1對多的傳輸場景提供了合適的解決方案,降低了多節(jié)點數(shù)據(jù)傳輸?shù)拈_銷,為解決基于RDMA的分布式系統(tǒng)中的多拷貝文件數(shù)據(jù)傳輸問題提供了有效的支持.

      1.3 NOVA文件系統(tǒng)

      MTFS是基于NOVA實現(xiàn)的.NOVA是加州大學(xué)圣地亞哥分校開發(fā)的一種持久性內(nèi)存文件系統(tǒng)[6].為更好地利用持久性內(nèi)存的諸多優(yōu)秀特性,NOVA做了許多特異性的設(shè)計,使其在保證一致性的基礎(chǔ)上提升文件系統(tǒng)的性能.本節(jié)討論與MTFS相關(guān)的一些NOVA設(shè)計.

      NOVA為每個索引節(jié)點維護(hù)1個單獨的日志鏈表,每塊日志中存儲1次寫入的基本信息與指向?qū)懭霐?shù)據(jù)頁的指針,同時在DRAM中維護(hù)基數(shù)樹索引以加速對文件數(shù)據(jù)的查找.寫入操作使用寫時復(fù)制機(jī)制實現(xiàn),每次寫入時會申請新的日志塊與數(shù)據(jù)頁,在日志中記錄操作相關(guān)信息與指向新寫入數(shù)據(jù)的指針.當(dāng)數(shù)據(jù)成功寫入持久性存儲介質(zhì)后,NOVA更新文件日志的尾指針以及其對應(yīng)的基數(shù)樹索引.當(dāng)讀取數(shù)據(jù)時,NOVA通過基數(shù)樹索引找到對應(yīng)的日志塊,從日志中讀取數(shù)據(jù)地址,并通過地址找到數(shù)據(jù)頁并讀取數(shù)據(jù).

      NOVA使用可利用空間表管理持久性內(nèi)存空間.NOVA將可用的數(shù)據(jù)空間均分給每個CPU進(jìn)行管理以提升并發(fā)文件訪問的性能,每個CPU使用紅黑樹結(jié)構(gòu)管理數(shù)據(jù)空間中的空閑塊,以提升連續(xù)數(shù)據(jù)塊查找的性能.通過這種方式,NOVA提升了持久性內(nèi)存空間分配操作的并行性,減少了空間分配的爭用.

      NOVA提供了故障恢復(fù)機(jī)制.當(dāng)系統(tǒng)從故障中恢復(fù)時,首先,NOVA需要檢查崩潰前寫入的日志,通過日志將未提交的事務(wù)回滾.然后,NOVA并行掃描每個索引節(jié)點,通過日志鏈表恢復(fù)數(shù)據(jù)組織結(jié)構(gòu).通過日志設(shè)計,NOVA保證系統(tǒng)可以從故障中恢復(fù)數(shù)據(jù).

      2 MTFS設(shè)計

      本節(jié)將詳細(xì)介紹MTFS的系統(tǒng)設(shè)計.首先整體描述MTFS的系統(tǒng)架構(gòu),然后分別對MTFS中的低延遲多播通信機(jī)制、多模式多播RPC機(jī)制和輕量級一致性保障機(jī)制進(jìn)行介紹.

      2.1 系統(tǒng)架構(gòu)

      Fig. 1 Overall architecture of MTFS圖1 MTFS系統(tǒng)整體架構(gòu)

      圖1展示了MTFS的系統(tǒng)整體架構(gòu).系統(tǒng)由1個元數(shù)據(jù)節(jié)點和多個數(shù)據(jù)節(jié)點組成.其中元數(shù)據(jù)節(jié)點存儲系統(tǒng)的元數(shù)據(jù)信息,包括文件的元數(shù)據(jù)信息和系統(tǒng)的基本配置與空間管理信息,數(shù)據(jù)節(jié)點中僅存儲文件的數(shù)據(jù).元數(shù)據(jù)節(jié)點與數(shù)據(jù)節(jié)點之間通過RDMA網(wǎng)絡(luò)互連.MTFS采用主從式架構(gòu),將數(shù)據(jù)存儲在多個數(shù)據(jù)節(jié)點上,提升了數(shù)據(jù)訪問的并行性.

      應(yīng)用程序通過可移植操作系統(tǒng)接口(portable operating system interface of UNIX, POSIX)對文件系統(tǒng)進(jìn)行訪問.以數(shù)據(jù)寫入為例,當(dāng)應(yīng)用程序發(fā)起數(shù)據(jù)寫入請求時,MTFS通過訪問元數(shù)據(jù)節(jié)點在各目標(biāo)數(shù)據(jù)節(jié)點分配持久性內(nèi)存空間,然后將數(shù)據(jù)寫入到各數(shù)據(jù)節(jié)點中.待寫入的數(shù)據(jù)通過多播通信模塊(2.2節(jié))以RDMA數(shù)據(jù)報的形式由網(wǎng)卡發(fā)出.網(wǎng)絡(luò)交換機(jī)收到多播數(shù)據(jù)報時,會進(jìn)行分發(fā)操作,將數(shù)據(jù)報發(fā)送到多播組中的每個數(shù)據(jù)節(jié)點.數(shù)據(jù)節(jié)點通過RPC處理模塊(2.3節(jié))識別數(shù)據(jù)報請求體,并通過數(shù)據(jù)一致性保障模塊(2.4節(jié))將數(shù)據(jù)持久化到持久性內(nèi)存.與此同時,元數(shù)據(jù)節(jié)點會提交該次數(shù)據(jù)寫入操作并返回用戶.文件系統(tǒng)的元數(shù)據(jù)訪問則僅通過元數(shù)據(jù)節(jié)點進(jìn)行,無需對數(shù)據(jù)節(jié)點進(jìn)行遠(yuǎn)程訪問.

      2.2 低延遲多播通信機(jī)制

      在分布式文件系統(tǒng)中,節(jié)點間的網(wǎng)絡(luò)傳輸?shù)拈_銷非常高昂.數(shù)據(jù)節(jié)點間等待傳輸完成與確認(rèn)需要耗費大量的時間,從而產(chǎn)生較高的延遲.而在1對多的分發(fā)場景下,傳統(tǒng)的文件系統(tǒng)會發(fā)起多次網(wǎng)絡(luò)傳輸請求,將相同的數(shù)據(jù)逐一發(fā)送到各個節(jié)點,增加了網(wǎng)卡的負(fù)載(圖2(a)).多播通信機(jī)制旨在將多個傳輸相同數(shù)據(jù)的請求合并為多播請求,避免網(wǎng)卡數(shù)據(jù)重復(fù)發(fā)送的冗余開銷,從而大幅提升發(fā)送數(shù)據(jù)的效率.

      Fig. 2 Comparison of traditional and multicast schemes圖2 傳統(tǒng)模式與多播通信機(jī)制對比

      當(dāng)MTFS的元數(shù)據(jù)節(jié)點發(fā)起寫請求時,數(shù)據(jù)將被同時寫入所有的目標(biāo)數(shù)據(jù)節(jié)點:首先多播傳輸模塊會申請1塊發(fā)送結(jié)構(gòu)體,并根據(jù)寫請求對應(yīng)的數(shù)據(jù)地址、數(shù)據(jù)大小等元數(shù)據(jù)信息填寫結(jié)構(gòu)體的頭部字段,同時將數(shù)據(jù)放入發(fā)送結(jié)構(gòu)體的數(shù)據(jù)字段.然后多播傳輸模塊會將RDMA傳輸信息添加到填寫完畢的發(fā)送結(jié)構(gòu)體中,并將其打包成工作請求放入發(fā)送隊列進(jìn)行傳輸;網(wǎng)卡依次對工作請求進(jìn)行處理,將數(shù)據(jù)以RDMA數(shù)據(jù)報的形式發(fā)送到各個目標(biāo)數(shù)據(jù)節(jié)點,由數(shù)據(jù)節(jié)點中的接收處理程序進(jìn)行處理并寫入持久內(nèi)存.當(dāng)發(fā)送操作完成之后,元數(shù)據(jù)節(jié)點會觸發(fā)中斷通知發(fā)送完成處理程序,將工作完成從完成隊列中移出,從中獲取已完成的發(fā)送結(jié)構(gòu)體地址并將對應(yīng)空間釋放回收.執(zhí)行過程如圖3所示.

      Fig. 3 Multicast transmission execution圖3 多播通信運行過程

      為提升系統(tǒng)可擴(kuò)展性,MTFS將數(shù)據(jù)節(jié)點劃分為存儲單元進(jìn)行管理.MTFS將數(shù)據(jù)節(jié)點每2~3個一組劃分為存儲單元,單元內(nèi)的數(shù)據(jù)節(jié)點存儲相同的數(shù)據(jù),并和MTFS的元數(shù)據(jù)節(jié)點加入同一個多播組.多播信息僅在組內(nèi)傳遞,由于不同存儲單元間存儲的數(shù)據(jù)互不相同,存儲單元之間不需要進(jìn)行多播通信.當(dāng)元數(shù)據(jù)節(jié)點發(fā)起寫入請求時,MTFS會選擇剩余空間最多的存儲單元,并將單元內(nèi)的數(shù)據(jù)節(jié)點作為存儲的目標(biāo)數(shù)據(jù)節(jié)點;當(dāng)元數(shù)據(jù)節(jié)點發(fā)起讀取請求時,MTFS會根據(jù)對應(yīng)存儲單元內(nèi)各數(shù)據(jù)節(jié)點正在請求的線程數(shù)量,從中選擇負(fù)載最低的數(shù)據(jù)節(jié)點讀取數(shù)據(jù).通過存儲單元管理,MTFS避免了數(shù)據(jù)冗余存儲,提升了系統(tǒng)的可擴(kuò)展性.

      為減少元數(shù)據(jù)節(jié)點CPU的開銷,MTFS通過RDMA無通知機(jī)制優(yōu)化多播發(fā)送流程.由于RDMA的多播能力由UD模式提供,而UD模式基于無連接數(shù)據(jù)報實現(xiàn),不需要處理接收端的確認(rèn)信息.因此,當(dāng)多播請求發(fā)送完畢后,多播傳輸模塊不會立即通知CPU進(jìn)行處理,而是將工作完成暫存在完成隊列上.當(dāng)完成一定數(shù)量的工作請求之后,為了防止工作完成的堆積,下一次發(fā)送的工作請求會被設(shè)置為完成后通知.當(dāng)該工作請求發(fā)送完成后,網(wǎng)卡會觸發(fā)CPU中斷并轉(zhuǎn)入發(fā)送完成處理程序,對先前放入的工作完成進(jìn)行批量處理.通過無通知發(fā)送的優(yōu)化,MTFS減少了CPU中斷處理的次數(shù),極大地降低了CPU的負(fù)擔(dān).

      為了避免網(wǎng)絡(luò)堵塞引起的發(fā)送隊列擁擠,MTFS實現(xiàn)了擁塞控制系統(tǒng).RDMA的發(fā)送隊列長度固定,當(dāng)網(wǎng)卡處理速率小于工作請求的增加速率時,發(fā)送隊列會被填滿,導(dǎo)致之后的工作請求無法放入發(fā)送隊列.MTFS多播傳輸模塊會對發(fā)送隊列中待發(fā)送的多播請求數(shù)目進(jìn)行實時統(tǒng)計,并據(jù)此控制RDMA多播請求的發(fā)送速率.當(dāng)網(wǎng)絡(luò)擁塞時,發(fā)送隊列中待發(fā)送的請求數(shù)目超過了預(yù)先設(shè)定的閾值.此時發(fā)送隊列將暫緩接受工作請求直到待發(fā)送的請求數(shù)量低于閾值,從而避免了發(fā)送隊列溢出造成的傳輸問題.

      通過上述多播通信機(jī)制,MTFS減少了文件操作過程中RDMA的通信次數(shù),并充分利用UD模式數(shù)據(jù)報通信的優(yōu)勢降低了數(shù)據(jù)的傳輸延遲(圖2(b)).盡管RDMA的UD模式具有一定的可靠性[22],MTFS依然通過發(fā)送端的擁塞控制機(jī)制與接收端的一致性保障機(jī)制(2.4節(jié)),在不顯著增加延遲的情況下盡可能地保證數(shù)據(jù)的可靠性與一致性.

      2.3 多模式多播RPC機(jī)制

      MTFS使用RPC實現(xiàn)元數(shù)據(jù)節(jié)點與數(shù)據(jù)節(jié)點間通信.如圖4所示,RPC采用服務(wù)端主動的方式,元數(shù)據(jù)節(jié)點通過多播通信機(jī)制將RPC請求分發(fā)到數(shù)據(jù)節(jié)點的網(wǎng)卡上,并由網(wǎng)卡放入接收隊列等待處理.接收端處理程序按到達(dá)順序依次處理接收隊列中的RPC請求,對參數(shù)進(jìn)行解析并執(zhí)行相應(yīng)的操作.

      Fig. 4 RPC module design圖4 RPC模塊設(shè)計

      RPC通過源節(jié)點字段和目標(biāo)節(jié)點字段進(jìn)行請求識別,從而判斷該節(jié)點是否需要進(jìn)行處理.由于RPC采用多播通信機(jī)制實現(xiàn),多播組中的所有數(shù)據(jù)節(jié)點均可以接收到元數(shù)據(jù)節(jié)點的請求.為增強RPC的靈活性,請求頭部標(biāo)識了源節(jié)點與目標(biāo)節(jié)點,數(shù)據(jù)節(jié)點收到請求后首先判斷該節(jié)點是否需要執(zhí)行操作,從而避免冗余的請求對數(shù)據(jù)節(jié)點資源的占用.

      RPC通過優(yōu)化返回機(jī)制降低執(zhí)行延遲.接收端根據(jù)其接收到的操作碼對請求進(jìn)行分類:對于不需要返回信息的請求如數(shù)據(jù)寫,數(shù)據(jù)節(jié)點會直接執(zhí)行相應(yīng)操作,不發(fā)送返回信息;對于時效性要求較高的請求如數(shù)據(jù)讀,數(shù)據(jù)節(jié)點會立即進(jìn)行處理并返回完成信息;對于時效性要求較低的請求如數(shù)據(jù)遷移,元數(shù)據(jù)節(jié)點采用異步處理機(jī)制,發(fā)送RPC請求之后繼續(xù)執(zhí)行其他操作,不阻塞等待結(jié)果,當(dāng)收到返回信息后再進(jìn)行結(jié)果處理操作.而數(shù)據(jù)節(jié)點收到請求之后,會在優(yōu)先處理其他請求之后進(jìn)行處理并返回完成信息.通過RPC多模式分類,MTFS減少了部分操作的傳輸次數(shù),并將部分傳輸操作從關(guān)鍵路徑移除,有效提升了文件操作的整體效率.

      考慮到RPC基于多播通信機(jī)制,MTFS的寫請求使用RPC實現(xiàn),保證寫請求通過多播語句1對多地發(fā)送到所有的數(shù)據(jù)節(jié)點.但鑒于讀請求針對單一客戶端的特性,MTFS在實現(xiàn)了基于RPC的讀方法的同時,采用基于RC模式的RDMA讀操作實現(xiàn)了對文件數(shù)據(jù)的讀取操作,避免了集群規(guī)模過大時使用多播通信機(jī)制讀數(shù)據(jù)造成的額外開銷.用戶掛載文件系統(tǒng)時,可以根據(jù)集群配置選擇合適的讀方法.

      2.4 輕量級一致性保障機(jī)制

      MTFS開發(fā)了故障恢復(fù)機(jī)制以有效應(yīng)對各節(jié)點上可能發(fā)生的系統(tǒng)崩潰.MTFS檢測到數(shù)據(jù)節(jié)點崩潰后,會將該數(shù)據(jù)節(jié)點標(biāo)記成為故障節(jié)點,讀請求將被分流到其他數(shù)據(jù)節(jié)點執(zhí)行,不會影響系統(tǒng)正常運行.該數(shù)據(jù)節(jié)點中的數(shù)據(jù)可以通過元數(shù)據(jù)節(jié)點與其他數(shù)據(jù)節(jié)點進(jìn)行恢復(fù).當(dāng)元數(shù)據(jù)節(jié)點崩潰時,系統(tǒng)停止提供服務(wù),等待元數(shù)據(jù)節(jié)點重啟,并通過文件的元數(shù)據(jù)與數(shù)據(jù)日志,將系統(tǒng)恢復(fù)到崩潰前的狀態(tài).通過故障恢復(fù)機(jī)制,MTFS保障了數(shù)據(jù)的高可靠性.

      MTFS使用冗余校驗機(jī)制保證了數(shù)據(jù)傳輸?shù)娜蒎e性(圖5).發(fā)送端打包傳輸數(shù)據(jù)時,會將數(shù)據(jù)分為2部分并分別計算循環(huán)冗余校驗(cyclic redun-dancy check 32, CRC32),校驗結(jié)果存入發(fā)送請求的固定區(qū)域.同時,MTFS對2部分?jǐn)?shù)據(jù)計算奇偶校驗結(jié)果并放入發(fā)送結(jié)構(gòu)體.接收處理程序收到數(shù)據(jù)后會首先計算2部分?jǐn)?shù)據(jù)的CRC32校驗和,與收到數(shù)據(jù)中存儲的校驗和進(jìn)行比對.若2份數(shù)據(jù)校驗和與存儲的校驗和均相同,則說明本次數(shù)據(jù)傳輸沒有發(fā)生錯誤;若僅有1份數(shù)據(jù)校驗和與存儲的校驗和相同,說明另1份數(shù)據(jù)發(fā)生了傳輸錯誤.接收處理程序會通過奇偶校驗結(jié)果查找錯誤發(fā)生的位置,計算出正確的結(jié)果并寫入;若2份數(shù)據(jù)校驗和與存儲的校驗和均不相同,則該次傳輸可能出現(xiàn)了大面積無法恢復(fù)的錯誤,接收處理程序會激活重傳機(jī)制,發(fā)送1個重傳請求到發(fā)送端,請求重新發(fā)送該數(shù)據(jù).通過冗余校驗機(jī)制,MTFS在不顯著影響性能的情況下保證了數(shù)據(jù)傳輸?shù)恼_性.

      Fig. 5 Data verification mechanism圖5 數(shù)據(jù)冗余校驗機(jī)制

      MTFS使用重傳機(jī)制保證文件數(shù)據(jù)的持久性.發(fā)送端申請工作請求時會指定全局唯一的WR_ID,并附在RDMA發(fā)送的立即數(shù)字段一同發(fā)送.接收處理程序會記錄來自同一個節(jié)點的最近1個請求的WR_ID,并在新的請求到達(dá)時讀取立即數(shù)字段進(jìn)行比較.若新接收的請求出現(xiàn)亂序,接收處理程序會發(fā)送重傳請求到發(fā)送端,要求重傳缺失的工作請求.對于傳輸數(shù)據(jù)出現(xiàn)大面積錯誤的情況,接收處理程序會通過最新記錄的WR_ID計算出錯誤的WR_ID并發(fā)送重傳請求到發(fā)送端.發(fā)送端收到重傳請求時,會通過WR_ID查找相應(yīng)的發(fā)送數(shù)據(jù)進(jìn)行重新打包發(fā)送.

      MTFS通過窗口確認(rèn)機(jī)制保證了數(shù)據(jù)一致性.元數(shù)據(jù)節(jié)點記錄了每個索引節(jié)點最后1次寫入操作的WR_ID.各數(shù)據(jù)節(jié)點每隔一段時間會向元數(shù)據(jù)節(jié)點報告TAIL_WR_ID(即節(jié)點已成功接收在該WR_ID之前的所有請求).當(dāng)元數(shù)據(jù)節(jié)點發(fā)起讀請求時,會檢查索引節(jié)點最后1次寫入的WR_ID和目標(biāo)節(jié)點報告的TAIL_WR_ID,確認(rèn)目標(biāo)節(jié)點是否已經(jīng)收到該索引節(jié)點的所有寫請求.若未收到,則說明還有寫請求正處于傳輸?shù)倪^程中,系統(tǒng)會對讀請求進(jìn)行阻塞,直到數(shù)據(jù)節(jié)點確認(rèn)已收到所有的寫請求;若已收到,則元數(shù)據(jù)節(jié)點可以執(zhí)行讀操作.通過窗口確認(rèn)機(jī)制,MTFS避免了文件讀寫出現(xiàn)不一致,保證了數(shù)據(jù)一致性.

      MTFS避免了RDMA網(wǎng)卡的數(shù)據(jù)一致性問題.當(dāng)使用RDMA網(wǎng)卡對遠(yuǎn)端地址進(jìn)行數(shù)據(jù)寫入時,數(shù)據(jù)可能會暫時駐留在RDMA網(wǎng)卡的易失緩存中,由網(wǎng)卡決定寫入內(nèi)存地址的時機(jī),這可能導(dǎo)致數(shù)據(jù)不一致的問題[27].MTFS采用多播發(fā)送語句,遠(yuǎn)端網(wǎng)卡接收到數(shù)據(jù)之后,會通知接收處理程序?qū)?shù)據(jù)寫入持久性介質(zhì),避免數(shù)據(jù)在RDMA網(wǎng)卡緩存中駐留,保證數(shù)據(jù)的一致性.

      3 系統(tǒng)實現(xiàn)

      本節(jié)主要講述了MTFS各項設(shè)計的實現(xiàn)方式與細(xì)節(jié).雖然本文在NOVA的基礎(chǔ)上實現(xiàn)MTFS的各項功能設(shè)計,但MTFS的設(shè)計可以基于現(xiàn)有的單機(jī)持久性內(nèi)存文件系統(tǒng)實現(xiàn),不局限于某個系統(tǒng)的設(shè)計.

      3.1 文件系統(tǒng)相關(guān)實現(xiàn)

      MTFS基于NOVA的元數(shù)據(jù)組織實現(xiàn)元數(shù)據(jù)節(jié)點組織,并沿用了NOVA的元數(shù)據(jù)相關(guān)設(shè)計.由于MTFS元數(shù)據(jù)節(jié)點與數(shù)據(jù)節(jié)點分離的架構(gòu),MTFS優(yōu)化了數(shù)據(jù)日志的格式,將各目標(biāo)數(shù)據(jù)節(jié)點中對應(yīng)的數(shù)據(jù)地址存入日志之中.同時,MTFS對所有的數(shù)據(jù)節(jié)點進(jìn)行統(tǒng)一編址,使用NOVA的可利用空間表數(shù)據(jù)結(jié)構(gòu)進(jìn)行管理.每個CPU在每個數(shù)據(jù)節(jié)點上對應(yīng)1個可利用空間表,并通過可利用空間表管理1塊持久性內(nèi)存空間.當(dāng)執(zhí)行數(shù)據(jù)寫入操作時,元數(shù)據(jù)節(jié)點會從每個目標(biāo)數(shù)據(jù)節(jié)點對應(yīng)的區(qū)域中各分配1段空間,并通過RPC將數(shù)據(jù)遠(yuǎn)程寫入.當(dāng)執(zhí)行數(shù)據(jù)讀取操作時,系統(tǒng)會按照日志塊中記錄的遠(yuǎn)端數(shù)據(jù)的地址從遠(yuǎn)端數(shù)據(jù)節(jié)點讀出數(shù)據(jù).

      3.2 RDMA通信模塊

      MTFS實現(xiàn)了高效的內(nèi)核態(tài)RDMA通信模塊.為了提升通用性,更好地與主流的基于POSIX接口的內(nèi)核態(tài)文件系統(tǒng)適配,MTFS在內(nèi)核態(tài)實現(xiàn)了RDMA通信.同時MTFS將RDMA服務(wù)以模塊的形式呈現(xiàn),封裝RDMA的相關(guān)操作,將復(fù)雜的RDMA操作抽象為通信建立、通信關(guān)閉和操作執(zhí)行等若干類函數(shù),對文件系統(tǒng)屏蔽了RDMA通信的相關(guān)細(xì)節(jié),方便相關(guān)代碼的移植與維護(hù).

      為了方便管理RDMA,MTFS使用RDMA_CM庫管理通信.RDMA_CM可以在RDMA傳輸建立之前,使用基于RDMA網(wǎng)絡(luò)的TCP傳輸在各節(jié)點間傳遞RDMA網(wǎng)絡(luò)參數(shù),并據(jù)此建立RDMA傳輸.RDMA_CM將RDMA通信建立流程封裝成為類似于socket的接口,并在整個通信階段對通信進(jìn)行管理.建立多播通信時,需首先對約定好的多播地址進(jìn)行解析,當(dāng)確認(rèn)解析無誤后將解析到的設(shè)備綁定到CM_ID,然后各節(jié)點加入該多播組并注冊到子網(wǎng)管理器,從而完成多播通信的建立.對于多播傳輸請求,所有加入該多播組的節(jié)點均可以接收.通過使用RDMA_CM庫,MTFS簡化了RDMA編程操作.

      MTFS實現(xiàn)了RDMA發(fā)送與接收請求的統(tǒng)一管理,從而支持了RDMA多播傳輸?shù)母黜梼?yōu)化.為了方便對網(wǎng)絡(luò)請求進(jìn)行統(tǒng)一管理,MTFS在各節(jié)點上分別為RDMA發(fā)送與接收請求維護(hù)全局的工作請求鏈表.正常情況下,當(dāng)有新的請求需要發(fā)送時,MTFS申請1個新的工作請求,相關(guān)信息填寫完畢后,會將工作請求放入鏈表,并生成全局唯一的WR_ID,WR_ID在發(fā)送時被放入數(shù)據(jù)報一起發(fā)送.當(dāng)發(fā)送完成時,發(fā)送完成處理程序通過工作完成找到WR_ID,進(jìn)而找到該次工作請求并回收相關(guān)數(shù)據(jù)結(jié)構(gòu).接收請求的情況與之類似.當(dāng)無通知優(yōu)化功能被啟用時,MTFS會記錄發(fā)送請求的數(shù)量,工作請求通知標(biāo)志的默認(rèn)值為0,當(dāng)一定數(shù)量的數(shù)據(jù)發(fā)送完成后,下一個工作請求的通知標(biāo)志會被置為signaled,發(fā)送完成之后通知處理程序?qū)λ性缦犬a(chǎn)生的工作完成統(tǒng)一進(jìn)行處理.啟用擁塞控制時,MTFS使用原子變量記錄發(fā)送隊列上的待發(fā)送工作請求數(shù)量,通過該原子變量判斷是否暫緩接受發(fā)送請求.通過對RDMA請求的統(tǒng)一管理,MTFS實現(xiàn)了請求的添加、存儲、刪除與查找,為RDMA多播傳輸?shù)母黜梼?yōu)化提供了有效的支持.

      3.3 RPC與一致性保障實現(xiàn)

      MTFS為RPC傳輸設(shè)計了發(fā)送結(jié)構(gòu)體.結(jié)構(gòu)體中包含了該次操作的詳細(xì)信息,包括操作碼、源節(jié)點與目標(biāo)節(jié)點、數(shù)據(jù)長度、數(shù)據(jù)地址和數(shù)據(jù)內(nèi)容等,整個結(jié)構(gòu)體經(jīng)過冗余和校驗處理之后,會統(tǒng)一作為RDMA傳輸?shù)臄?shù)據(jù)進(jìn)行發(fā)送.而工作請求的控制信息會根據(jù)請求類型和待發(fā)送數(shù)據(jù)進(jìn)行填寫,其中立即數(shù)字段填寫全局唯一的WR_ID,填寫完畢之后放入發(fā)送隊列進(jìn)行發(fā)送.接收端收到RPC請求之后,會讀取數(shù)據(jù)并對各字段進(jìn)行解析,執(zhí)行相應(yīng)操作.

      4 實 驗

      本節(jié)將MTFS與其他文件系統(tǒng)對比,對各項性能進(jìn)行評估.首先介紹實驗環(huán)境配置,然后從微觀測試、Filebench測試、Redis測試3個方面對比MTFS與現(xiàn)有的分布式和單機(jī)持久性內(nèi)存文件系統(tǒng),詳細(xì)比較并分析相關(guān)性能差異.

      4.1 實驗配置

      實驗所使用的實驗平臺環(huán)境配置信息如表3所示.各節(jié)點均部署4塊Intel Optane DC 128 GB持久性內(nèi)存,并采用APP-Direct模式.各節(jié)點通過一塊Mellanox ConnectX-5 RDMA網(wǎng)卡與其他節(jié)點通信,網(wǎng)卡配置為Infiniband模式運行,并連接到Infiniband交換機(jī).

      Table 3 Platform Configuration表3 實驗平臺配置

      MTFS使用NOVA的代碼作為基礎(chǔ),在Linux 4.13內(nèi)核上實現(xiàn).MTFS基于Mellanox OFED實現(xiàn)了內(nèi)核態(tài)RDMA通信模塊,并整合入文件系統(tǒng).MTFS最大可支持同一廣播域內(nèi)的所有節(jié)點組成的集群,本實驗中MTFS默認(rèn)在3個節(jié)點組成的集群上部署,包括1個元數(shù)據(jù)節(jié)點與2個數(shù)據(jù)節(jié)點,其中2個數(shù)據(jù)節(jié)點屬于同一個存儲單元.各節(jié)點采用128 GB持久性內(nèi)存作為存儲介質(zhì).

      本實驗主要將MTFS與同樣運行在持久性內(nèi)存與RDMA上的分布式文件系統(tǒng)GlusterFS進(jìn)行比較[28],對各項性能進(jìn)行評估.鑒于MTFS基于單機(jī)文件系統(tǒng)NOVA實現(xiàn),本實驗同樣將與NOVA進(jìn)行性能比較.由于NOVA部署在單臺機(jī)器上,公平起見,MTFS在實驗中數(shù)據(jù)吞吐量均表示集群中單個節(jié)點的吞吐量.

      4.2 微觀測試

      實驗使用Fio進(jìn)行微觀測試,展示MTFS在1對多的場景下進(jìn)行寫操作的吞吐量[29].在測試過程中采用隨機(jī)讀寫,分別通過IO大小變化和文件大小變化,測試Fio的總體吞吐量.

      Fig. 6 Throughput of write syscall with varying I/O sizes圖6 寫系統(tǒng)調(diào)用在不同I/O大小下的吞吐量

      圖7展示了MTFS與其他對比系統(tǒng)在不同的文件大小下的寫系統(tǒng)調(diào)用吞吐量,其中IO大小為2 KB.從圖7中可以看到,與GlusterFS相比,在文件大小為2 KB時,MTFS性能相比GlusterFS提升了145倍,而在文件大小為2 GB時,MTFS對比GlusterFS仍然有10.2倍的提升.同時,隨著文件大小增長,MTFS和NOVA性能均未出現(xiàn)明顯下降.這是因為MTFS與NOVA雖然采用日志結(jié)構(gòu),但相應(yīng)的在DRAM中維護(hù)了作為數(shù)據(jù)索引的基數(shù)樹,當(dāng)文件大小增長時,文件數(shù)據(jù)訪問延遲并不會出現(xiàn)明顯增大.

      Fig. 7 Throughput of write syscall with varying file sizes圖7 寫系統(tǒng)調(diào)用在不同文件大小下的吞吐量

      為了檢驗MTFS在集群中的可擴(kuò)展性,實驗測試了MTFS在不同規(guī)模集群中的性能表現(xiàn),結(jié)果如圖8所示.可以得知,隨著集群中節(jié)點數(shù)量增加,在不同的IO大小下,MTFS吞吐量都能夠基本保持不變,展現(xiàn)出良好的可擴(kuò)展性.

      Fig. 8 Throughput of write syscall in clusters with varying sizes圖8 寫系統(tǒng)調(diào)用在不同規(guī)模集群中的吞吐量

      4.3 Filebench

      MTFS使用Filebench[30]測試評估真實負(fù)載下的表現(xiàn).實驗選擇Filebench的工作負(fù)載Randomwrite來評估MTFS的性能.實驗采用以下參數(shù)進(jìn)行測試:負(fù)載平均文件大小2 KB,數(shù)據(jù)操作的平均IO大小從64 B~2 KB不等.

      圖9展示了各文件系統(tǒng)在Filebench的Random-write工作負(fù)載上的性能表現(xiàn).可以得知,MTFS與NOVA性能相接近,在IO大小為2 KB時,MTFS相比NOVA性能有11%的提升.主要原因是當(dāng)IO大小增大時,NOVA進(jìn)行持久化相關(guān)操作的延遲隨之增大,而MTFS將持久化相關(guān)操作放在遠(yuǎn)端數(shù)據(jù)節(jié)點進(jìn)行處理,從關(guān)鍵路徑移除,減小了數(shù)據(jù)操作的延遲.與GlusterFS相比,MTFS性能仍然有13.7~219倍的提升.

      Fig. 9 Throughput of Randomwrite with varying I/O sizes圖9 Randomwrite在不同I/O大小下的吞吐量

      4.4 Redis

      為進(jìn)一步測試MTFS在真實負(fù)載環(huán)境下的表現(xiàn),實驗采用Redis[31]作為負(fù)載測試各文件系統(tǒng)的表現(xiàn).Redis 是一個高性能的key-value數(shù)據(jù)庫,在企業(yè)級應(yīng)用中被廣泛使用.實驗采用Redis的AOF機(jī)制實現(xiàn)數(shù)據(jù)持久化,持久化策略使用每修改同步策略,數(shù)據(jù)大小從默認(rèn)2 B~2 KB不等.實驗比較Redis在不同文件系統(tǒng)下的每秒請求數(shù).

      Fig. 10 Performance of Redis with varying data sizes圖10 Redis在不同數(shù)據(jù)大小下的性能

      圖10展示了各文件系統(tǒng)運行Redis時的性能表現(xiàn).與上述微觀測試和Filebench測試采用IO密集型負(fù)載不同,Redis包含大量的計算操作,這導(dǎo)致GlusterFS數(shù)據(jù)操作上的性能缺陷在一定程度上被掩蓋,但MTFS與GlusterFS相比仍取得了25.5~42.1倍的性能提升.與NOVA相比,MTFS在Redis負(fù)載上取得了更優(yōu)異的性能表現(xiàn),主要原因是Redis操作中IO密集度下降減輕了網(wǎng)卡的負(fù)載,使得RDMA多播操作發(fā)送延遲下降,進(jìn)而提升了數(shù)據(jù)傳輸效率.

      實驗在Redis負(fù)載上對各文件系統(tǒng)進(jìn)行了線程擴(kuò)展能力測試,結(jié)果如圖11所示.可以看到,MTFS隨線程數(shù)量增加,表現(xiàn)出良好的線程可擴(kuò)展性.

      Fig. 11 Performance of Redis with varying thread numbers圖11 Redis在不同線程數(shù)下的性能

      5 相關(guān)工作

      新興的持久性內(nèi)存技術(shù)與RDMA技術(shù)分別為本地內(nèi)存訪問與遠(yuǎn)程網(wǎng)絡(luò)通信訪問提供了優(yōu)化的可能,現(xiàn)有的一些工作基于這2種技術(shù)提出了針對性設(shè)計.

      5.1 RDMA相關(guān)優(yōu)化

      文獻(xiàn)[11]提出了一個基于RDMA的分布式共享內(nèi)存系統(tǒng)FaRM.FaRM使用單邊RDMA語句實現(xiàn)了無鎖讀取和RPC操作,避免了雙邊RDMA操作帶來的通信延遲與CPU開銷.與基于TCP的系統(tǒng)相比,它的設(shè)計使其在RDMA網(wǎng)絡(luò)上獲得了巨大的性能提升.但是,F(xiàn)aRM使用了RC模式的單邊RDMA操作,對于每組連接都需要創(chuàng)建至少1對QP,而過多的QP會帶來RDMA網(wǎng)卡緩存不足和處理器爭用的問題,這限制了系統(tǒng)在大規(guī)模集群中的表現(xiàn).MTFS基于多播語句實現(xiàn),每對QP都可以發(fā)送信息到所有的節(jié)點,從而大幅減少了對RDMA網(wǎng)卡相關(guān)資源的需求.

      文獻(xiàn)[22]通過實驗證明了在UD模式中,RDMA傳輸依然具有非常高的可靠性,并基于該結(jié)論提出了FaSST.FaSST使用UD模式的雙邊RDMA操作開發(fā)了RPC系統(tǒng),利用UD模式數(shù)據(jù)報傳輸?shù)膬?yōu)勢,通過降低發(fā)送端延遲提高系統(tǒng)性能,并取得了良好的可擴(kuò)展性.然而FaSST只能通過QP進(jìn)行1對1數(shù)據(jù)發(fā)送,當(dāng)需要將相同的數(shù)據(jù)傳輸?shù)讲煌哪康牡貢r,需要進(jìn)行多次發(fā)送操作.盡管MTFS同樣基于UD模式的雙邊RDMA操作,但是在上述情況下,MTFS使用多播語句可以將發(fā)送操作降低到1次,從而有效降低了發(fā)送端的延遲與資源占用.

      文獻(xiàn)[23]提出了一種基于混合RDMA語句的分布式事務(wù)系統(tǒng)DrTM+H.該系統(tǒng)使用了樂觀并發(fā)控制實現(xiàn)事務(wù),按照樂觀并發(fā)控制中的特性比較不同RDMA語句的表現(xiàn),并在事務(wù)執(zhí)行的每個階段選擇最適合的語句進(jìn)行操作,取得了良好的性能表現(xiàn).MTFS也使用了混合RDMA語句,選擇了多種RDMA語句分別進(jìn)行讀取和寫入操作,但是與DrTM+H相比,MTFS將元數(shù)據(jù)操作放在本地執(zhí)行,僅將數(shù)據(jù)放在遠(yuǎn)端存儲,通過減少RDMA操作次數(shù)降低了事務(wù)執(zhí)行延遲.

      5.2 基于持久性內(nèi)存的分布式文件系統(tǒng)

      文獻(xiàn)[17]提出一個分布式文件系統(tǒng)NVFS,在現(xiàn)有的HDFS基礎(chǔ)上進(jìn)行了改進(jìn),使系統(tǒng)可以更好地利用持久性內(nèi)存技術(shù)和RDMA技術(shù)的特性.盡管HDFS表現(xiàn)良好,但HDFS設(shè)計的復(fù)雜性增大了改進(jìn)的難度,導(dǎo)致NVFS無法充分利用硬件的性能.而其他類似的工作只是簡單地用RDMA替換了現(xiàn)有系統(tǒng)中的網(wǎng)絡(luò),同樣無法充分地利用新技術(shù)的特性[28].

      文獻(xiàn)[13]同樣將持久性內(nèi)存與RDMA功能進(jìn)行了緊密結(jié)合,開發(fā)出分布式文件系統(tǒng)Octopus.Octopus基于RDMA的write_with_imm語句構(gòu)建RPC,該語句可以在進(jìn)行單邊寫操作的同時攜帶32 b立即數(shù)字段,通過在該字段中編碼RPC相關(guān)信息,為接收端的相關(guān)處理提供了一定的靈活性與便利.但是在該語句中,當(dāng)遠(yuǎn)端節(jié)點的網(wǎng)卡接收到立即數(shù)字段時,需要觸發(fā)中斷來通知CPU處理立即字段,從而失去了RDMA單邊寫操作無需CPU處理的優(yōu)勢,而僅32 b的字段大小也無法充分實現(xiàn)靈活性.為了滿足靈活性的需求,MTFS采用了UD模式的雙邊操作語句,并設(shè)計了大小可調(diào)整的頭部字段來實現(xiàn)RPC操作.

      上述系統(tǒng)雖然均表現(xiàn)良好,但由于缺少對RDMA多播通信支持,導(dǎo)致難以解決分布式系統(tǒng)中的多拷貝數(shù)據(jù)傳輸問題,造成一定的性能損失.MTFS充分利用RDMA多播通信能力,通過多播傳輸解決了多拷貝數(shù)據(jù)傳輸問題,有效提升了系統(tǒng)數(shù)據(jù)傳輸效率.

      6 總 結(jié)

      持久性內(nèi)存與RDMA技術(shù)的出現(xiàn),為分布式系統(tǒng)的設(shè)計提供了新的思路.現(xiàn)有的基于RDMA的分布式系統(tǒng)未能充分利用RDMA的多播能力,難以解決多拷貝文件數(shù)據(jù)的傳輸問題.本文提出一種基于RDMA多播機(jī)制的分布式持久性內(nèi)存文件系統(tǒng)MTFS,通過低延遲多播通信機(jī)制將數(shù)據(jù)高效傳輸?shù)蕉鄠€數(shù)據(jù)節(jié)點,從而避免了多拷貝傳輸操作.為提升傳輸操作的靈活性,MTFS設(shè)計了多模式多播RPC機(jī)制,并通過優(yōu)化返回機(jī)制將部分操作移出關(guān)鍵路徑,進(jìn)一步降低傳輸延遲.同時MTFS提供了輕量級一致性保障機(jī)制,保證了數(shù)據(jù)的可靠性和一致性.實驗結(jié)果表明,MTFS在各測試集上性能比GlusterFS高10.2~219倍,并在Redis負(fù)載上相比于NOVA取得了最高10.7%的性能提升.MTFS在大規(guī)模數(shù)據(jù)存儲場景中有著廣闊的應(yīng)用前景.

      猜你喜歡
      多播持久性網(wǎng)卡
      在DDS 中間件上實現(xiàn)雙冗余網(wǎng)卡切換的方法
      計算機(jī)研究與發(fā)展(2022年12期)2022-12-15 13:18:44
      用于超大Infiniband網(wǎng)絡(luò)的負(fù)載均衡多播路由
      InfiniBand中面向有限多播表條目數(shù)的多播路由算法
      湖北省持久性有機(jī)物(POPs)產(chǎn)排特性分析
      化工管理(2021年7期)2021-05-13 00:44:56
      具有授粉互惠關(guān)系的非自治周期植物傳粉系統(tǒng)的持久性
      Server 2016網(wǎng)卡組合模式
      挑戰(zhàn)Killer網(wǎng)卡Realtek網(wǎng)游專用Dragon網(wǎng)卡
      一類離散Schoner競爭模型的持久性
      持久性發(fā)疹性斑狀毛細(xì)血管擴(kuò)張一例
      丰顺县| 锦州市| 砚山县| 新郑市| 浦城县| 麦盖提县| 西吉县| 鹤壁市| 新晃| 海南省| 滁州市| 高雄县| 来凤县| 五常市| 且末县| 龙南县| 通州市| 荣昌县| 泰兴市| 衡山县| 丽江市| 山丹县| 樟树市| 靖边县| 凤山县| 平顺县| 墨江| 遂溪县| 郴州市| 阿勒泰市| 南乐县| 沁源县| 南平市| 邹城市| 横山县| 甘肃省| 康定县| 胶南市| 鸡东县| 永嘉县| 兴隆县|