国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

2021-02-07 02:51:34陳茂棠鄭圣安游理通王晶鈺屠要峰韓銀俊黃林鵬
關(guān)鍵詞:多播持久性網(wǎng)卡

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

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

新型的非易失性內(nèi)存(non-volatile memory, NVM)[1-5]技術(shù)的出現(xiàn)為傳統(tǒng)的計(jì)算機(jī)存儲(chǔ)結(jié)構(gòu)帶來(lái)變革,其中通過(guò)內(nèi)存總線連接CPU的NVM形態(tài)也被稱為持久性內(nèi)存(persistent memory, PM).與DRAM相比,持久性內(nèi)存擁有相接近的傳輸帶寬與訪問(wèn)延遲,但兼具了DRAM不具備的持久性.隨著持久性內(nèi)存的逐漸應(yīng)用,許多研究針對(duì)持久性內(nèi)存設(shè)計(jì)特異性的文件系統(tǒng),其中大多數(shù)文件系統(tǒng)基于單臺(tái)機(jī)器設(shè)計(jì)[6-10].但是目前大容量的持久性內(nèi)存價(jià)格昂貴,單機(jī)存儲(chǔ)容量難以提高.同時(shí),持久性內(nèi)存運(yùn)行帶來(lái)較高的CPU負(fù)載,單機(jī)大規(guī)模部署持久性內(nèi)存會(huì)使CPU成為存儲(chǔ)性能的瓶頸.這些原因使得單機(jī)持久性內(nèi)存文件系統(tǒng)難以滿足日益增長(zhǎng)的大規(guī)模數(shù)據(jù)存儲(chǔ)需求,必須開(kāi)發(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é)點(diǎn)到2個(gè)甚至多個(gè)目標(biāo)節(jié)點(diǎn),文件數(shù)據(jù)需要被復(fù)制到多個(gè)存儲(chǔ)服務(wù)器[15].這個(gè)過(guò)程造成的延遲往往占數(shù)據(jù)中心負(fù)載的主要部分,并最終決定了系統(tǒng)的總體IO性能[16].

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

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

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

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

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

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

1 背景介紹

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

1.1 持久性內(nèi)存

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

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

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

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

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

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

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

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

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

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

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

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

1.3 NOVA文件系統(tǒng)

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

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

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

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

2 MTFS設(shè)計(jì)

本節(jié)將詳細(xì)介紹MTFS的系統(tǒng)設(shè)計(jì).首先整體描述MTFS的系統(tǒng)架構(gòu),然后分別對(duì)MTFS中的低延遲多播通信機(jī)制、多模式多播RPC機(jī)制和輕量級(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個(gè)元數(shù)據(jù)節(jié)點(diǎn)和多個(gè)數(shù)據(jù)節(jié)點(diǎn)組成.其中元數(shù)據(jù)節(jié)點(diǎn)存儲(chǔ)系統(tǒng)的元數(shù)據(jù)信息,包括文件的元數(shù)據(jù)信息和系統(tǒng)的基本配置與空間管理信息,數(shù)據(jù)節(jié)點(diǎn)中僅存儲(chǔ)文件的數(shù)據(jù).元數(shù)據(jù)節(jié)點(diǎn)與數(shù)據(jù)節(jié)點(diǎn)之間通過(guò)RDMA網(wǎng)絡(luò)互連.MTFS采用主從式架構(gòu),將數(shù)據(jù)存儲(chǔ)在多個(gè)數(shù)據(jù)節(jié)點(diǎn)上,提升了數(shù)據(jù)訪問(wèn)的并行性.

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

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

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

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

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

Fig. 3 Multicast transmission execution圖3 多播通信運(yùn)行過(guò)程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.2 RDMA通信模塊

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

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

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

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

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

4 實(shí) 驗(yàn)

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

4.1 實(shí)驗(yàn)配置

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

Table 3 Platform Configuration表3 實(shí)驗(yàn)平臺(tái)配置

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

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

4.2 微觀測(cè)試

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

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

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

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

為了檢驗(yàn)MTFS在集群中的可擴(kuò)展性,實(shí)驗(yàn)測(cè)試了MTFS在不同規(guī)模集群中的性能表現(xiàn),結(jié)果如圖8所示.可以得知,隨著集群中節(jié)點(diǎn)數(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]測(cè)試評(píng)估真實(shí)負(fù)載下的表現(xiàn).實(shí)驗(yàn)選擇Filebench的工作負(fù)載Randomwrite來(lái)評(píng)估MTFS的性能.實(shí)驗(yàn)采用以下參數(shù)進(jìn)行測(cè)試:負(fù)載平均文件大小2 KB,數(shù)據(jù)操作的平均IO大小從64 B~2 KB不等.

圖9展示了各文件系統(tǒng)在Filebench的Random-write工作負(fù)載上的性能表現(xiàn).可以得知,MTFS與NOVA性能相接近,在IO大小為2 KB時(shí),MTFS相比NOVA性能有11%的提升.主要原因是當(dāng)IO大小增大時(shí),NOVA進(jìn)行持久化相關(guān)操作的延遲隨之增大,而MTFS將持久化相關(guān)操作放在遠(yuǎn)端數(shù)據(jù)節(jié)點(diǎn)進(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)一步測(cè)試MTFS在真實(shí)負(fù)載環(huán)境下的表現(xiàn),實(shí)驗(yàn)采用Redis[31]作為負(fù)載測(cè)試各文件系統(tǒng)的表現(xiàn).Redis 是一個(gè)高性能的key-value數(shù)據(jù)庫(kù),在企業(yè)級(jí)應(yīng)用中被廣泛使用.實(shí)驗(yàn)采用Redis的AOF機(jī)制實(shí)現(xiàn)數(shù)據(jù)持久化,持久化策略使用每修改同步策略,數(shù)據(jù)大小從默認(rèn)2 B~2 KB不等.實(shí)驗(yàn)比較Redis在不同文件系統(tǒng)下的每秒請(qǐng)求數(shù).

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

圖10展示了各文件系統(tǒng)運(yùn)行Redis時(shí)的性能表現(xiàn).與上述微觀測(cè)試和Filebench測(cè)試采用IO密集型負(fù)載不同,Redis包含大量的計(jì)算操作,這導(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ù)傳輸效率.

實(shí)驗(yàn)在Redis負(fù)載上對(duì)各文件系統(tǒng)進(jìn)行了線程擴(kuò)展能力測(cè)試,結(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)存訪問(wèn)與遠(yuǎn)程網(wǎng)絡(luò)通信訪問(wèn)提供了優(yōu)化的可能,現(xiàn)有的一些工作基于這2種技術(shù)提出了針對(duì)性設(shè)計(jì).

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

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

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

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

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

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

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

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

6 總 結(jié)

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

猜你喜歡
多播持久性網(wǎng)卡
在DDS 中間件上實(shí)現(xiàn)雙冗余網(wǎng)卡切換的方法
胖樹(shù)拓?fù)渲懈咝?shí)用的定制多播路由算法
用于超大Infiniband網(wǎng)絡(luò)的負(fù)載均衡多播路由
InfiniBand中面向有限多播表?xiàng)l目數(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競(jìng)爭(zhēng)模型的持久性
持久性發(fā)疹性斑狀毛細(xì)血管擴(kuò)張一例
吴旗县| 西乡县| 奉贤区| 嘉祥县| 江阴市| 巴彦淖尔市| 定陶县| 瑞安市| 喀什市| 贺州市| 昌平区| 鹤峰县| 林周县| 金秀| 甘南县| 安陆市| 泸溪县| 安多县| 富宁县| 富民县| 大名县| 仪陇县| 上饶市| 峨边| 浏阳市| 蓬莱市| 怀仁县| 贵州省| 漯河市| 顺义区| 南丹县| 通州市| 瓮安县| 左云县| 康马县| 磴口县| 阳春市| 简阳市| 仁化县| 佛冈县| 寿光市|