• 
    

    
    

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

      基于RDMA的分布式存儲系統(tǒng)研究綜述

      2019-02-20 08:33:22陳游旻陸游游羅圣美舒繼武
      計算機研究與發(fā)展 2019年2期
      關(guān)鍵詞:鍵值原語服務(wù)端

      陳游旻 陸游游 羅圣美 舒繼武

      1(清華大學(xué)計算機科學(xué)與技術(shù)系 北京 100084)2 (中興通訊股份有限公司 南京 210012)

      在后摩爾時代,多核CPU已經(jīng)成為發(fā)展趨勢,同時,內(nèi)存日益廉價,這使得構(gòu)建內(nèi)存存儲系統(tǒng)變?yōu)榭赡?;在大?shù)據(jù)計算領(lǐng)域,數(shù)據(jù)規(guī)模大,數(shù)據(jù)維度高,數(shù)據(jù)種類多是其典型特征,內(nèi)存計算技術(shù)逐漸開始發(fā)揮重要作用.加州大學(xué)伯克利分校開發(fā)的Apache Spark[1]以及SAP公司在2012年推出的HANA內(nèi)存計算[2]已經(jīng)得到工業(yè)界的廣泛關(guān)注.

      DRAM相比于磁盤在帶寬和延遲上均有幾個數(shù)量級的優(yōu)勢,能極大地提升本地數(shù)據(jù)存儲性能,然而,DRAM也面臨集成度低等問題,單節(jié)點內(nèi)存最大只能達到幾百GB,很難滿足大型應(yīng)用的存儲需求.構(gòu)建分布式大內(nèi)存系統(tǒng)是一種有效途徑,但傳統(tǒng)以太網(wǎng)帶寬和延遲與DRAM性能具有明顯差異,網(wǎng)絡(luò)性能將成為制約系統(tǒng)性能的最重要因素.近年來, 遠程內(nèi)存直接訪問(remote direct memory access, RDMA)[3]作為一種新興的跨網(wǎng)數(shù)據(jù)傳輸技術(shù)逐漸從高性能計算走進大數(shù)據(jù)領(lǐng)域,并開始受到廣泛關(guān)注.RDMA技術(shù)能夠在遠端CPU不參與的情況下,繞過內(nèi)核直接訪問遠端內(nèi)存,實現(xiàn)零拷貝的數(shù)據(jù)傳輸.近年來,200 Gbps的高速網(wǎng)卡已經(jīng)走向市場,這與DRAM的帶寬進一步靠近.

      然而,簡單地將現(xiàn)有的分布式存儲系統(tǒng)中的網(wǎng)絡(luò)模塊替換為RDMA通信模式,而不優(yōu)化上層軟件邏輯的策略,并不能充分發(fā)揮RDMA網(wǎng)絡(luò)的硬件優(yōu)勢,這主要由3個方面導(dǎo)致:

      1) 硬件管理缺失.一方面,RDMA網(wǎng)卡和處理器均具有獨立的緩存系統(tǒng),并且RDMA網(wǎng)卡的緩存空間尤為有限,因此緩存空間的管理高效與否將直接影響系統(tǒng)整體性能;另一方面,RDMA網(wǎng)卡具有良好的并行性,多核處理器環(huán)境下數(shù)據(jù)傳輸并行化具有較大空間.然而,簡單兼容RDMA的軟件系統(tǒng)很少從硬件角度考慮RDMA通信的效率問題,從而忽視了緩存管理、多核并行、資源共享等方面的重要性,導(dǎo)致系統(tǒng)性能低下.

      2) 軟件邏輯冗余.傳統(tǒng)軟件大多采用模塊化設(shè)計,軟件層次分工明確.在兼容新型硬件時,如果依舊沿用了傳統(tǒng)的軟件層次,將會導(dǎo)致軟件邏輯冗余,效率低下.例如,傳統(tǒng)的分布式文件系統(tǒng)需要部署在本地文件系統(tǒng)之上,通過本地文件系統(tǒng)管理本地數(shù)據(jù),并依靠分布式軟件層構(gòu)建跨節(jié)點統(tǒng)一視圖.基于上述軟件架構(gòu),客戶端通過RDMA網(wǎng)絡(luò)讀取數(shù)據(jù)時,數(shù)據(jù)塊分別經(jīng)過本地文件系統(tǒng)鏡像、頁緩存、用戶態(tài)緩沖區(qū)等位置,將出現(xiàn)多層冗余拷貝.在慢速磁盤和傳統(tǒng)以太網(wǎng)環(huán)境下,內(nèi)存級冗余拷貝對系統(tǒng)整體性能影響甚微,但是,在構(gòu)建基于RDMA的內(nèi)存級分布式文件系統(tǒng)時,多層數(shù)據(jù)拷貝將明顯降低系統(tǒng)整體性能,因此,軟件邏輯重構(gòu)將尤為重要.

      3) 分布式協(xié)議低效.在分布式系統(tǒng)中,多客戶端并發(fā)訪問數(shù)據(jù)時,往往依靠2階段鎖或樂觀并發(fā)處理進行并發(fā)控制,避免客戶端間的訪問干擾;而跨節(jié)點數(shù)據(jù)一致性、系統(tǒng)崩潰一致性則由分布式一致性提交協(xié)議(2階段提交)保證.上述協(xié)議往往牽涉多個節(jié)點協(xié)同工作,流程復(fù)雜,性能低下.為此,基于傳統(tǒng)以太網(wǎng)的分布式系統(tǒng)中,往往通過特定的數(shù)據(jù)放置策略和處理方式避免使用分布式事務(wù)[4].然而,RDMA工作模式具有強一致性,其單向原語和原子操作可以被利用起來,從而設(shè)計新型分布式協(xié)議,滿足系統(tǒng)高效可擴展的需求.

      RDMA技術(shù)在通信模式、網(wǎng)絡(luò)性能等方面呈現(xiàn)出與傳統(tǒng)以太網(wǎng)完全不同的特點.對現(xiàn)有模塊化的軟件架構(gòu)進行簡單的網(wǎng)絡(luò)替換將無法充分發(fā)揮RDMA網(wǎng)絡(luò)性能.為此,需要結(jié)合RDMA網(wǎng)絡(luò)的硬件特性,調(diào)整軟硬件結(jié)構(gòu),從原語使用、數(shù)據(jù)流優(yōu)化、協(xié)議設(shè)計等方面重新設(shè)計軟件邏輯,從而充分發(fā)揮RDMA網(wǎng)絡(luò)的硬件優(yōu)勢.

      1 背景介紹

      目前有3類網(wǎng)絡(luò)架構(gòu)支持RDMA技術(shù),分別是IB(InfiniBand),RoCE(RDMA over converged eth-ernet),iWARP(internet wide area RDMA protocol).其中RoCE和IB具有相同的上層協(xié)議棧,而前者在數(shù)據(jù)鏈路層則完全兼容以太網(wǎng),iWARP保留了TCPIP的完整協(xié)議棧.

      RDMA允許本地CPU繞過操作系統(tǒng),直接讀寫遠端節(jié)點內(nèi)存,該過程無需遠端CPU的參與.以遠程寫操作為例(如圖1),本地CPU直接以MMIO(memory mapped IO)的方式向網(wǎng)卡發(fā)起遠程寫命令,并傳遞相應(yīng)參數(shù),包括待寫入數(shù)據(jù)塊基地址、遠端內(nèi)存地址、寫入數(shù)據(jù)塊大小、遠端注冊內(nèi)存密鑰等信息;本地網(wǎng)卡收到命令之后,立即根據(jù)本地數(shù)據(jù)塊基地址將數(shù)據(jù)塊從主存以DMA Read的方式讀取到網(wǎng)卡緩存,并發(fā)送到遠端;遠端網(wǎng)卡接收到數(shù)據(jù)塊之后,以DMA Write的方式直接將數(shù)據(jù)寫入內(nèi)存對應(yīng)地址.此過程中,RDMA無需像傳統(tǒng)以太網(wǎng)一樣穿越內(nèi)核中的多層網(wǎng)絡(luò)協(xié)議棧,因此實現(xiàn)了跨節(jié)點數(shù)據(jù)傳輸過程中的數(shù)據(jù)零拷貝.

      Fig. 1 Dataflow in RDMA network圖1 RDMA網(wǎng)絡(luò)數(shù)據(jù)收發(fā)過程

      RDMA通信鏈路可以被配置為3種模式,分別是可靠連接(reliable connection, RC)、不可靠連接(unreliable connection, UC)和不可靠數(shù)據(jù)報(un-reliable datagram, UD).其中,UD采用面向無連接的數(shù)據(jù)報發(fā)送方式,支持點對點和點對多的數(shù)據(jù)傳輸,而RC和UC模式僅支持點對點的面向連接的數(shù)據(jù)傳輸.另外,UD模式支持的最大數(shù)據(jù)傳輸單元為4 KB,而RC和UD模式支持多達2 GB的單次數(shù)據(jù)傳輸.

      RDMA訪問遠端內(nèi)存依靠2類原語:1)消息語義,其中Send和Recv是其典型的1組原語,它們類似于套接字編程中的Send和Recv,在發(fā)送消息之前,接收方需提前調(diào)用Recv原語,用于指定接收消息的存放地址.這類原語也被稱作雙向原語.2)內(nèi)存語義,該類原語包含Read,Write以及相應(yīng)的變種(Write-with-imm和原子操作).這類原語能在遠端CPU不介入的情況下直接讀取或更新遠端內(nèi)存,它們亦被稱作單向原語.不同語義在不同的通信鏈路模式下具有不用的支持程度,如表1所示:

      Table 1 RDMA Verbs and MTU Sizes in Different Modes表1 不同模式下的RDMA原語和最大傳輸單元(MTU)

      在RDMA編程中,網(wǎng)卡驅(qū)動分別提供了內(nèi)核態(tài)和用戶態(tài)編程接口,它們被稱作Verbs.以RC模式下的點對點鏈路建立過程為例,應(yīng)用程序需分別經(jīng)歷打開設(shè)備、創(chuàng)建保護域(protection domain, PD)、申請并注冊內(nèi)存、創(chuàng)建完成隊列(completion queue, CQ)、創(chuàng)建收發(fā)隊列(queue pair, QP)、初始化QP等過程.其中,申請的內(nèi)存用于收發(fā)和存儲遠端消息或被遠端網(wǎng)卡直接訪問.內(nèi)存在被遠程訪問之前需注冊到網(wǎng)卡,注冊過程包含:1)建立內(nèi)存虛擬地址到物理地址的映射表,并存儲到網(wǎng)卡緩存;2)生成密鑰對,用于本地或遠端內(nèi)存訪問控制.收發(fā)隊列包含發(fā)送隊列(send queue)和接收隊列(receive queue),用于存放CPU發(fā)起的網(wǎng)絡(luò)請求,網(wǎng)卡從隊列中依次處理原語,當(dāng)原語處理完畢,將相應(yīng)的完成信息存放到綁定的完成隊列中.創(chuàng)建的QP、CQ和注冊內(nèi)存均需綁定到相同PD中才能正常通信.

      RDMA繞過內(nèi)核實現(xiàn)數(shù)據(jù)零拷貝,并借助硬件執(zhí)行數(shù)據(jù)包的派送和解析,從而提供了高帶寬、低延遲的通信特性.但是, 將RDMA技術(shù)應(yīng)用到分布式系統(tǒng)中時,也存在原語漏用、冗余拷貝、協(xié)議低效等問題急需解決.為此,本文將結(jié)合實際系統(tǒng),從以下2個方面分別進行闡述:1)硬件資源的高效管理,在大規(guī)模集群中,高并發(fā)的數(shù)據(jù)傳輸將導(dǎo)致CPU緩存、網(wǎng)卡緩存發(fā)生劇烈競爭,影響系統(tǒng)性能,另外,CPU的多核架構(gòu)為并行處理提供了機遇,如何高效調(diào)度CPU核、提升網(wǎng)絡(luò)數(shù)據(jù)并行處理性能同樣重要.2)RDMA提供了遠程直接讀寫的新型通信原語,這打破了傳統(tǒng)分布式系統(tǒng)中的跨節(jié)點數(shù)據(jù)傳輸模型,促使一些系統(tǒng),例如分布式文件系統(tǒng)[5-7]、分布式鍵值存儲系統(tǒng)[8-14]、分布式事務(wù)系統(tǒng)[15-18]等選擇通過軟件重構(gòu)來充分發(fā)揮RDMA的硬件特性.

      2 RDMA與硬件管理

      RDMA技術(shù)通過硬件解析并處理網(wǎng)絡(luò)數(shù)據(jù)包降低延遲的同時,能有效提升數(shù)據(jù)傳輸?shù)牟⑿心芰?另外,網(wǎng)卡將鏈路狀態(tài)信息等核心數(shù)據(jù)緩存到網(wǎng)卡的緩存空間,用戶程序繞過內(nèi)核直接與硬件交互.因此,構(gòu)建高效的基于RDMA的存儲系統(tǒng)的關(guān)鍵因素在于結(jié)合RDMA的硬件特性,與系統(tǒng)軟件層進行緊耦合設(shè)計.本節(jié)將主要從網(wǎng)卡緩存、CPU緩存以及多核調(diào)度等硬件層次闡述如何設(shè)計高效的系統(tǒng)軟件.

      2.1 緩存管理

      緩存系統(tǒng)是計算機體系結(jié)構(gòu)中的重要組成部分,它將訪問頻繁的數(shù)據(jù)暫存到高速緩存器以加速應(yīng)用,因此,緩存系統(tǒng)對局部性較好的應(yīng)用加速效果顯著.在RDMA網(wǎng)絡(luò)通信中,CPU和網(wǎng)卡均存在獨立的緩存系統(tǒng),緩存使用的好壞將直接影響著節(jié)點間數(shù)據(jù)通信性能.

      網(wǎng)卡緩存用于暫存CPU發(fā)起的網(wǎng)絡(luò)請求和相應(yīng)的網(wǎng)絡(luò)狀態(tài)信息,其主要緩存3類數(shù)據(jù):1)注冊內(nèi)存從邏輯地址到物理地址的映射表,當(dāng)網(wǎng)卡發(fā)送數(shù)據(jù)或接收到數(shù)據(jù)時,將依據(jù)映射表查詢相應(yīng)物理地址;2)QP狀態(tài),存放QP對應(yīng)的元數(shù)據(jù)信息;3)由CPU發(fā)起的網(wǎng)絡(luò)請求條目,網(wǎng)卡根據(jù)請求條目執(zhí)行相應(yīng)處理.在特定場景下,這3類數(shù)據(jù)都會增加網(wǎng)卡緩存缺失率,導(dǎo)致系統(tǒng)性能下降.

      第1方面,內(nèi)存注冊后以頁為單位生成映射表,默認(rèn)情況頁的大小為4 KB,假設(shè)每個映射條目為12 B,則注冊10 GB內(nèi)存需要的映射表大小為30 MB,這將很難全部存放到網(wǎng)卡緩存中.FaRM[13,15]引入內(nèi)核驅(qū)動PhyCo,它在系統(tǒng)啟動時分配2 GB對齊(網(wǎng)卡最大支持2 GB的頁大小)的物理連續(xù)的內(nèi)存區(qū)域,并將其映射到FaRM進程的邏輯地址空間.通過這種方式,映射表大小將縮小為60 B.

      第2方面,RDMA的擴展性問題還源于連接數(shù)量的增加.圖2展示了RDMA網(wǎng)絡(luò)在不同鏈路模式下的吞吐,我們選取1個節(jié)點作為Server,啟動多個線程并行地向多個節(jié)點發(fā)送(接收)32 B的消息.其中向外發(fā)送消息稱作Outbound-Message,反之則為Inbound-Message.如圖2所示,在RC模式下,總吞吐隨著連接數(shù)量的增大而減小,而Outbound相比于Inbound下降更為明顯.相反,UD模式下總吞吐不受到連接數(shù)量的影響.這主要是因為在RC模式下,Server端需要與每個客戶端創(chuàng)建QP并建立連接,當(dāng)連接數(shù)量過多后,QP狀態(tài)信息無法全部存放到網(wǎng)卡緩存,導(dǎo)致數(shù)據(jù)頻繁在網(wǎng)卡緩存和主存間換入換出,影響性能.而UD模式下,Server端只需創(chuàng)建固定數(shù)量的QP,便能與所有的客戶端進行通信,因此服務(wù)端總吞吐不受到客戶端數(shù)量的影響.FaSST RPC[16]是基于UD的RPC系統(tǒng),得益于UD的無連接通信模式,F(xiàn)aSST能夠線性擴展到數(shù)百個節(jié)點.然而,UD同樣也存在其他缺陷,例如不支持遠程直接讀寫,單次最大傳輸數(shù)據(jù)量不能超過4 KB,底層無擁塞控制邏輯,且有丟包或亂序風(fēng)險.因此需要額外的軟件控制來保障UD在真實應(yīng)用中的可靠數(shù)據(jù)傳輸,但軟件控制又將引入新的開銷[19].

      Fig. 2 Scalability issue in different transport modes of RDMA圖2 RDMA在不同鏈路模式下的擴展性問題

      第3方面,CPU發(fā)起網(wǎng)絡(luò)請求時,使用MMIO向網(wǎng)卡發(fā)送命令,這些命令將被臨時緩存到網(wǎng)卡緩存,并由網(wǎng)卡依次處理.然而,當(dāng)CPU發(fā)送命令過快時,網(wǎng)卡緩存不足以存放新的請求,因此之前發(fā)送的未處理的請求將被換出到主存,等到被處理時再換回到網(wǎng)卡緩存.頻繁的換入換出操作將引入大量的PCIe流量,這是制約網(wǎng)絡(luò)吞吐的關(guān)鍵因素.圖3源于文獻[20]中的圖13(b),展示了單節(jié)點向外發(fā)起寫請求時的緩存缺失情況.CPU以批量請求的方式向網(wǎng)卡發(fā)起RC Write請求,通過控制每次批量請求包含的請求數(shù)量來調(diào)節(jié)CPU發(fā)起請求的速度(橫坐標(biāo)).其中CX3和CIB為2類網(wǎng)卡型號,且CIB性能強于CX3.圖3中CX3 WR和CIB WR分別表示在CIB和CX3環(huán)境下RC Write請求的速率.而PCIeRd則表示網(wǎng)卡發(fā)起的PCIe Read的速率,PCIe Read速率越高,代表額外的PCIe流量越高,對性能影響越大.從圖3中我們可以發(fā)現(xiàn),CX3環(huán)境下,當(dāng)每次批量請求的數(shù)量達到16后,RC Write的吞吐有一定下降,而此時PCIeRd的速率明顯上升,表明此時CPU發(fā)送請求速度過快,已經(jīng)存在明顯的緩存缺失現(xiàn)象.CIB環(huán)境下PCIeRd速率一直保持較低水平,且RC Write吞吐幾乎線性提升,這說明CIB網(wǎng)卡能夠支撐CPU發(fā)起的最快請求速度,而不發(fā)生緩存缺失現(xiàn)象.因此,當(dāng)網(wǎng)卡處理能力不及CPU時,需控制CPU請求速率,避免網(wǎng)絡(luò)吞吐下降.

      Fig. 3 NIC cache misses for RC Write operations[20]圖3 RC Write操作對應(yīng)網(wǎng)卡緩存缺失率[20]

      Fig. 4 NIC writes with Intel data direct IO圖4 因特爾數(shù)據(jù)直訪IO技術(shù)下網(wǎng)卡寫操作流程

      CPU緩存在網(wǎng)絡(luò)數(shù)據(jù)收發(fā)過程中扮演重要角色.因特爾至強E5系列處理器提供了獨有的數(shù)據(jù)直訪IO(data direct IO,DDIO)技術(shù),它允許PCIe外設(shè)直接讀寫CPU的末級緩存(LLC,通常為第3級緩存)而繞過對主存的訪問,從而降低IO適配器到內(nèi)存以及內(nèi)存到CPU之間的延遲(如圖4).PCIe外設(shè)以Write Update或Write Allocate的方更新CPU的LLC.當(dāng)訪問數(shù)據(jù)已經(jīng)緩存到LLC時使用前者進行更新,而當(dāng)訪問數(shù)據(jù)不在緩存中時,則使用后者.Write Allocate操作需先分配緩存空間,然后寫入數(shù)據(jù),其開銷大于Write Update.通常情況下,用于DDIO的緩存區(qū)域占整個LLC的10%左右,以防止外設(shè)IO干擾CPU運行應(yīng)用程序的性能.因此,基于RDMA建立的通信模型下,構(gòu)建過大的通信消息池將不能被完全映射到LLC中,從而引入大量的Write Allocate操作,影響系統(tǒng)的整體性能.

      文獻[9]構(gòu)建的HERD RPC系統(tǒng)中,服務(wù)端靜態(tài)分配固定大小的消息池,并劃分為連續(xù)的內(nèi)存塊,用于存放遠端客戶端寫入的新消息.客戶端通過UC Write將請求遠程寫入到消息池中,服務(wù)端處理之后則使用UD Send返回響應(yīng)信息.為避免客戶端在寫入消息時互相干擾,不同客戶端被映射到消息池的不同區(qū)域.在HERD中,每個消息塊大小為1 KB,最大支持的客戶端數(shù)量為200,消息池的大小為6 MB,能完全存放到LLC.但這種靜態(tài)映射方式限制了最大支持的客戶端數(shù)量,同時每個請求的數(shù)據(jù)量也不能超過1 KB.FaSST[16]使用UD Send傳遞請求,數(shù)據(jù)存放地址由接收方?jīng)Q定,因此客戶端之間可共享同一個消息池,消息池大小不會因為客戶端總數(shù)量變化而發(fā)生改變.

      2.2 CPU調(diào)度

      基于RDMA設(shè)計高效的系統(tǒng)軟件,在CPU調(diào)度層面需要考慮以下3個方面的問題.

      1) 多核并發(fā).RDMA網(wǎng)絡(luò)具有良好的并行性,單條鏈路上的網(wǎng)絡(luò)負(fù)載很難達到網(wǎng)卡的峰值處理能力.另一方面,使用單個CPU核不足以處理多條鏈路上的網(wǎng)絡(luò)請求,CPU多核并行同樣重要.如圖5(a)所示,服務(wù)端與客戶端創(chuàng)建多個QP連接,通過變化QP數(shù)量,展現(xiàn)了RDMA不同原語的最大吞吐.我們發(fā)現(xiàn),在QP數(shù)量少于4時,所有原語均不能達到網(wǎng)卡處理峰值.同樣,圖5(b)展現(xiàn)了不同RPC系統(tǒng)的吞吐率,橫坐標(biāo)表示改變服務(wù)端CPU核的數(shù)量,并啟動40個客戶端發(fā)送RPC請求,縱坐標(biāo)表示不同RPC系統(tǒng)的吞吐率,發(fā)現(xiàn)CPU核的數(shù)量超過4時才能達到網(wǎng)卡處理峰值.由此可見,合理增加并發(fā)度,能較大提升RDMA的網(wǎng)絡(luò)性能.DaRPC[21]是一個基于RDMA的RPC系統(tǒng),它在服務(wù)端采用了精細化的并行架構(gòu):初始化階段,服務(wù)端啟動多個線程,并行處理遠端請求,每個客戶端均與服務(wù)端建立獨立的QP鏈路,這些鏈路被映射到不同的服務(wù)端線程,用于并行消息處理.另外,在NUMA架構(gòu)下,網(wǎng)卡、主存等相對于CPU具有非對稱訪問特性,近端CPU訪問網(wǎng)卡和主存能有效降低延遲、提升吞吐.文獻[21]表明,NUMA友好的近端綁定策略能有效提升系統(tǒng)性能達20%左右.

      2) 負(fù)載均衡.服務(wù)端線程靜態(tài)映射的方式能提升并行度,但每個客戶端負(fù)載具有差異性,且相應(yīng)的遠程調(diào)用開銷不盡相同,因此有可能導(dǎo)致個別CPU核處理繁忙,而其他CPU核空閑等待的現(xiàn)象.文獻[21]提出了一種“Work Stealing and Load Balancing”的管理方法,在服務(wù)端引入監(jiān)控器,用于實時統(tǒng)計各CPU核的工作負(fù)載狀態(tài),當(dāng)某CPU核的工作負(fù)載超過某閾值,則將新來的部分請求放入到1個全局隊列中,而其他CPU核在不繁忙時查看全局隊列,并及時處理相應(yīng)請求.這種方式有效解決了各CPU核負(fù)載不均衡的問題,但同時也引入了時序問題,導(dǎo)致早到達的RPC請求在晚到的請求之后被處理.這種亂序響應(yīng)需要在客戶端處理邏輯中被謹(jǐn)慎考慮.

      Fig. 5 Throughput with different QPs and CPU cores圖5 不同QP數(shù)量或CPU核對吞吐的影響

      Fig. 6 Per-thread Read throughput with QP sharing[16]圖6 QP共享模式下Read請求的單線程吞吐率[16]

      3 RDMA與軟件重構(gòu)

      RDMA提供了不同于套接字編程的通訊接口,它允許在遠端CPU不參與的情況下直接訪問遠端內(nèi)存,實現(xiàn)數(shù)據(jù)的零拷貝傳輸,這在一定程度上顛覆了傳統(tǒng)的系統(tǒng)架構(gòu)思想,從而促使了分布式鍵值存儲系統(tǒng)、文件系統(tǒng)以及事務(wù)系統(tǒng)等在軟件層的變革.軟件層次的變化可基本總結(jié)為以下3類:分布式協(xié)議的重構(gòu)、網(wǎng)絡(luò)負(fù)載的分派均衡和數(shù)據(jù)的遠程索引等方面.本節(jié)將從多類分布式存儲系統(tǒng)展開,并闡述軟件層如何從以上3個方面使用和優(yōu)化RDMA網(wǎng)絡(luò).

      3.1 RDMA在Key-Value系統(tǒng)中的應(yīng)用

      在傳統(tǒng)存儲系統(tǒng)中,數(shù)據(jù)的組織和索引由服務(wù)端本地執(zhí)行.一般地,客戶端讀取或更新服務(wù)端數(shù)據(jù)時,首先向服務(wù)端發(fā)送RPC(remote procedure call)請求,服務(wù)端接收到請求后,迭代式地查詢以樹狀或散列組織的數(shù)據(jù),然后將查詢或更新結(jié)果返回給客戶端.Key-Value系統(tǒng)采用平鋪式的數(shù)據(jù)存儲管理模式,僅提供類似Get,Put等接口,系統(tǒng)結(jié)構(gòu)簡單.同時,RDMA可以直接訪問遠端內(nèi)存數(shù)據(jù),這使得分布式鍵值存儲系統(tǒng)中的數(shù)據(jù)索引模式發(fā)生改變.近年,結(jié)合RDMA和Key-Value存儲的分布式鍵值存儲系統(tǒng)[8-14]被廣泛研究,本節(jié)將著重介紹Pilaf[5].

      Pilaf是紐約大學(xué)于2013年提出的一個內(nèi)存級分布式鍵值存儲系統(tǒng),借助RDMA原語實現(xiàn)了極高的系統(tǒng)性能,同時有效降低了服務(wù)端CPU開銷.Pilaf在處理GET請求時,利用RDMA內(nèi)存語義低延遲的特性,通過客戶端發(fā)起多次Read請求完成鍵值查詢,將數(shù)據(jù)索引任務(wù)由服務(wù)端轉(zhuǎn)移到客戶端(見圖7).

      Fig. 7 Overall architecture of Pilaf[8]圖7 Pilaf的總體架構(gòu)[8]

      如圖7所示,Pilaf的鍵值對通過散列表索引,散列表和鍵值對統(tǒng)一存放在內(nèi)存區(qū)域中,散列表中的各表項存放鍵值對的內(nèi)存地址,用于索引真實的鍵值對.存放上述內(nèi)容的內(nèi)存空間在系統(tǒng)初始化時分配,并注冊到網(wǎng)卡,使得客戶端可遠程直接訪問,客戶端在接入時獲取服務(wù)端注冊內(nèi)存的虛擬地址.客戶端在執(zhí)行Get操作時,首先計算出Key相應(yīng)散列值,并根據(jù)散列值確定對應(yīng)表項在散列表中的偏移;然后執(zhí)行RDMA Read讀取散列表在該偏移下的內(nèi)容,如果表項包含1個有效地址,則根據(jù)該地址執(zhí)行第2次Read操作獲取鍵值內(nèi)容.如果獲取的鍵值對匹配,則成功返回;如果散列表項為空,或者鍵值對不匹配,則線性查找下1個表項,直到查詢成功.

      Put操作需要更新散列表和鍵值對,在多客戶端并行訪問場景下,會出現(xiàn)數(shù)據(jù)沖突訪問,因此將Put操作的邏輯完全交由客戶端并不現(xiàn)實.在Pilaf中,所有的更新操作(包括Put,Del等)將按照傳統(tǒng)方式轉(zhuǎn)交給服務(wù)端執(zhí)行.具體方式為:客戶端向服務(wù)端發(fā)起相應(yīng)更新操作的RPC請求,服務(wù)端收到請求之后,在本地執(zhí)行查詢更新,然后返回更新結(jié)果.在讀寫并發(fā)場景下,以上工作流程會引入臟讀.例如,在服務(wù)端更新某一鍵值對的時候,客戶端同時使用Read讀取正在更新的鍵值對,則有可能讀取到1個中間狀態(tài)的值.Pilaf引入自校驗方法來解決臟讀問題.如圖8所示.

      Fig. 8 Self-verifying Hash table structure[8]圖8 自校驗散列表數(shù)據(jù)結(jié)構(gòu)[8]

      在散列表的每一個表項中,添加2層校驗碼,服務(wù)端在處理更新請求時,首先更新鍵值對內(nèi)容,然后根據(jù)鍵值對內(nèi)容計算校驗碼,并更新散列表對應(yīng)表項的第1個校驗值,然后根據(jù)表項更新第2個校驗值.當(dāng)客戶端執(zhí)行Get操作時,通過2次匹配校驗碼來判斷是否發(fā)生臟讀.如果匹配失敗,則等待隨機時間,再次獲取鍵值內(nèi)容,直至匹配成功.Pilaf借助多次Read請求將Get處理邏輯轉(zhuǎn)移到客戶端,這種遠端索引方式一定程度降低了服務(wù)端的處理開銷.同時,依靠RDMA的硬件優(yōu)勢,系統(tǒng)處理請求的能力相比于傳統(tǒng)方式提升顯著.

      表2詳細描述了多種KV存儲系統(tǒng)的實現(xiàn)差異.HERD[9]廣泛地測試了RDMA各類原語的性能差異,總結(jié)出Pilaf在讀取操作中將引入多次RDMA Read操作,效率低下.為此,HERD設(shè)計基于RDMA的高性能RPC系統(tǒng),所有的操作依舊通過服務(wù)端處理,從而每次遠程請求將只引入1次往返網(wǎng)絡(luò)交互.HERD同時還考慮到RDMA網(wǎng)絡(luò)的擴展性問題,采用 UC Write和UD Send分別作為客戶端發(fā)送請求和服務(wù)端發(fā)送反饋信息的原語.HERD能同時保證GetPut請求的高性能,且客戶端數(shù)量能輕松擴展到數(shù)百個.HydraDB[10]則面向通用性中間件,可作為系統(tǒng)緩存層或獨立的存儲層,并提供數(shù)據(jù)復(fù)制功能,保障數(shù)據(jù)容錯,同時結(jié)合NUMA架構(gòu)進行性能優(yōu)化.HydraDB也使用RDMA Read執(zhí)行Get請求,并增加客戶端緩存提升性能.在KV緩存系統(tǒng)中,引入RDMA單向原語將導(dǎo)致服務(wù)端對客戶端訪問特性無法感知,為解決上述問題,C-Hint[12]通過客戶端與服務(wù)端的協(xié)同設(shè)計,以提升KV緩存系統(tǒng)的命中率.RFP[11]針對RDMA的InBound和OutBound原語性能不對稱問題,提出客戶端主動執(zhí)行發(fā)送和接收的新型IO機制.Nessie[14]則配合使用Read、Write以及原子操作(CAS)原語,將KV訪問邏輯完全轉(zhuǎn)交到客戶端,從而避免服務(wù)端CPU參與存儲服務(wù).FaRM[13]將KV存儲系統(tǒng)構(gòu)建在具有事務(wù)接口的分布式共享內(nèi)存處理平臺上,該系統(tǒng)將會在后文進行進一步介紹.目前國內(nèi)針對KV存儲系統(tǒng)的研究也已經(jīng)相應(yīng)展開,但大多基于現(xiàn)有系統(tǒng)進行改造,性能方面局限性較大[22].

      Table 2 Comparison of Implementation Details Between Different KVStores表2 不同鍵值存儲系統(tǒng)實現(xiàn)細節(jié)對比

      3.2 RDMA在文件系統(tǒng)中的應(yīng)用

      總體上,RDMA更多地被應(yīng)用到鍵值存儲和分布式事務(wù)系統(tǒng),而分布式文件系統(tǒng)由于結(jié)構(gòu)復(fù)雜,很難充分發(fā)揮出RDMA的硬件特性.目前,也有部分分布式文件系統(tǒng)開始嘗試支持RDMA網(wǎng)絡(luò),以提供更高的性能[6-7].但是,這些系統(tǒng)大多采用了模塊化的軟件設(shè)計,將網(wǎng)絡(luò)傳輸、文件存儲和控制邏輯嚴(yán)格分離,而在引入RDMA網(wǎng)絡(luò)的時候,僅僅采用了簡單的網(wǎng)絡(luò)通訊模塊替換,而不是選擇重構(gòu)文件系統(tǒng)的內(nèi)部邏輯,因此取得的效果甚微.

      Fig. 9 The overall architecture of Octopus[23]圖9 Octopus整體架構(gòu)[23]

      清華大學(xué)于2017年提出的分布式持久性內(nèi)存文件系統(tǒng)Octopus[23],通過緊密結(jié)合RDMA特性,重新設(shè)計了文件系統(tǒng)軟件邏輯.具體地,各個節(jié)點將數(shù)據(jù)存儲區(qū)注冊到內(nèi)存,并共享到集群使之可被遠程直接訪問,進而構(gòu)建持久性共享內(nèi)存,而元數(shù)據(jù)區(qū)域則由服務(wù)節(jié)點進行本地管理(如圖9).Octopus通過引入持久性共享內(nèi)存以降低數(shù)據(jù)冗余拷貝,進而提供接近硬件的讀寫帶寬;引入客戶端主動式數(shù)據(jù)傳輸來重新均攤客戶端和服務(wù)端之間的網(wǎng)絡(luò)負(fù)載;引入自識別遠程過程調(diào)用協(xié)議以提供低延遲元數(shù)據(jù)訪問性能.

      1) 持久性共享內(nèi)存

      現(xiàn)有的分布式文件系統(tǒng)構(gòu)建在本地文件系統(tǒng)之上,因而存在大量的數(shù)據(jù)冗余拷貝.以文件讀寫為例,數(shù)據(jù)塊需要逐層拷貝到TCPIP協(xié)議棧中的mbuf、用戶態(tài)緩沖區(qū)、內(nèi)核態(tài)頁緩存、文件系統(tǒng)鏡像等位置,最終統(tǒng)計到1次文件讀寫將引入7次數(shù)據(jù)拷貝,這種低效的系統(tǒng)設(shè)計模式嚴(yán)重限制了RDMA網(wǎng)絡(luò)的硬件特性.Octopus則提出了持久性共享內(nèi)存,用于直接管理文件系統(tǒng)數(shù)據(jù).這種設(shè)計移除了本地文件系統(tǒng)層,同時讓客戶端遠程直接訪問,成功將數(shù)據(jù)拷貝次數(shù)降低到4次.

      2) 客戶端主動式數(shù)據(jù)傳輸

      通常情況下,文件讀寫將引入1次網(wǎng)絡(luò)往返請求,以文件讀取為例,客戶端主動發(fā)起文件讀請求,服務(wù)端收到請求之后,查詢并裝填數(shù)據(jù),然后將數(shù)據(jù)返回給客戶端.我們稱這種傳輸模式為服務(wù)端主動式數(shù)據(jù)傳輸,這種工作模式在傳統(tǒng)以太網(wǎng)下工作高效,但是當(dāng)轉(zhuǎn)移到RDMA網(wǎng)絡(luò)上后CPU占用率極高,成為了系統(tǒng)瓶頸.為此提出一種客戶端主動式數(shù)據(jù)傳輸機制,它具有以下3個步驟: ①客戶端向服務(wù)端發(fā)起文件讀寫請求;②服務(wù)端查詢文件元數(shù)據(jù)信息,并將元數(shù)據(jù)直接返回給客戶端;③客戶端根據(jù)元數(shù)據(jù)信息提供的遠程地址,直接執(zhí)行RDMA ReadWrite.其中步驟①②通過發(fā)起RPC請求完成,而步驟③由客戶端主動執(zhí)行,服務(wù)端CPU不參與文件數(shù)據(jù)的傳輸,這種設(shè)計引入了更多的網(wǎng)絡(luò)往返次數(shù),但是將服務(wù)端CPU負(fù)載轉(zhuǎn)移到客戶端,從而提升了并發(fā)文件讀寫性能.

      3) 自識別遠程過程調(diào)用

      RDMA提供了微秒級別的網(wǎng)絡(luò)延遲,為充分利用RDMA低延遲的特性,Octopus設(shè)計并實現(xiàn)了高效的RPC系統(tǒng).RPC主要用于文件元數(shù)據(jù)訪問和分布式事務(wù)的協(xié)調(diào)提交.RDMA的2類原語均可用于設(shè)計RPC系統(tǒng),基于SendRecv的RPC實現(xiàn)簡單,但其性能不如內(nèi)存語義,UD模式具有良好的擴展性和高性能,但其諸多缺陷導(dǎo)致并不適合應(yīng)用到基于可靠傳輸?shù)奈募到y(tǒng)場景.內(nèi)存語義具有極低延遲,在構(gòu)建RPC系統(tǒng)時,由于其單向性,服務(wù)端必須開啟線程輪詢掃描內(nèi)存來檢測新消息,這會導(dǎo)致較高的CPU開銷,且客戶端數(shù)量上升后,CPU需掃描更大范圍的內(nèi)存空間,這也會影響RPC延遲.Octopus選擇了Write-with-imm作為遠程請求的原語,它可在報頭攜帶32 b立即數(shù),用于存放客戶端元數(shù)據(jù)信息,指導(dǎo)服務(wù)端快速定位新消息;同時,該原語將消耗服務(wù)端提前發(fā)起的Recv請求,因此是雙向原語;基于Write-with-imm的RPC系統(tǒng)能幫助服務(wù)端快速檢測到完成信息,根據(jù)立即數(shù)快速定位到新消息,保證RPC性能的同時提供穩(wěn)定的傳輸延遲.

      俄亥俄州立大學(xué)提出的NVFS[7]將非易失內(nèi)存和RDMA結(jié)合起來,用于加速HDFS.但由于HDFS本身軟件設(shè)計厚重,NVFS很難充分發(fā)揮NVM和RDMA的硬件特性.IBM最近提出的Crail[5],其元數(shù)據(jù)跨節(jié)點訪問基于DaRPC[21],其中,DaRPC是一個基于RDMA的RPC系統(tǒng),它將消息處理和網(wǎng)絡(luò)傳輸緊密結(jié)合,并提供高吞吐、低延遲的跨網(wǎng)傳輸性能.Crail相比于Octopus多1次冗余拷貝,因此其帶寬不如Octopus;Crail同時也無法保證數(shù)據(jù)的一致性和持久性,為此,Crail引入多級存儲架構(gòu),并通過后端存儲進行數(shù)據(jù)持久化.

      3.3 RDMA在分布式事務(wù)中的應(yīng)用

      RDMA具有cache強一致性,這意味著,RDMA網(wǎng)卡寫入的最新數(shù)據(jù)能及時被CPU讀取,同時,網(wǎng)卡總是發(fā)送CPU最新更新的數(shù)據(jù); RDMA還具有原子性,它提供2種原子操作原語:CAS和FAA①COMP_AND_SWAP和FETCH_AND_ADD縮寫為CAS和FAA.,它們可以并發(fā)更新同一個內(nèi)存地址上的64 b值而保證1次操作的原子性.RDMA的上述特性將促使分布式協(xié)議的重構(gòu).

      DrTM[17-18]是上海交通大學(xué)2015年提出的一種分布式事務(wù)系統(tǒng),它巧妙地結(jié)合了RDMA和硬件事務(wù)內(nèi)存(hardware transactional memory, HTM),利用它們之間的強一致性設(shè)計并實現(xiàn)了一套高效的分布式事務(wù)協(xié)議.事務(wù)內(nèi)存提供了XBEGIN,XEND和XABORT接口,能夠在硬件層面控制對內(nèi)存的沖突訪問,一旦沖突發(fā)生,只有1個線程成功修改,而其他線程均無條件終止.事實上,RDMA的遠程沖突訪問也將導(dǎo)致本地的事務(wù)性內(nèi)存訪問終止,因此,DrTM利用這種強一致性重新設(shè)計了事務(wù)協(xié)議.

      DrTM在執(zhí)行事務(wù)邏輯時,首先通過RDMA Read將存儲在遠端的讀集和寫集搜集到本地,然后依靠HTM在本地執(zhí)行數(shù)據(jù)更新,最后使用RDMA Write將更新過的數(shù)據(jù)寫回到遠端(如圖10中Case1).其中,圖10中Case2~Case5展示了本地和分布式事務(wù)執(zhí)行沖突的不同場景:圖10中Case2場景中,M1搜集遠端數(shù)據(jù)時,M2正在執(zhí)行本地更新,HTM將強制終止執(zhí)行,2個沖突事務(wù)之間實現(xiàn)了序列化.而圖10中Case2和Case3場景下,M1開始搜集遠端數(shù)據(jù)時,M2還未開始本地執(zhí)行,因此M2事務(wù)不會終止,之后M2也訪問并修改了相同的數(shù)據(jù)項,沖突事務(wù)之間沒實現(xiàn)嚴(yán)格的序列化.為解決上述問題,DrTM借助RDMA原子操作實現(xiàn)了一套分布式鎖,并強制在搜集遠端數(shù)據(jù)之前首先進行數(shù)據(jù)項加鎖.這樣在圖10中Case3~Case5場景中,M2的本地遠程讀寫階段將被阻塞,從而實現(xiàn)事務(wù)間的序列化.DrTM借助RDMA的強一致性和HTM的原子性,重新構(gòu)造了分布式事務(wù)協(xié)議,同時基于RDMA提供的原子操作原語設(shè)計了高效的獨占鎖和共享鎖,用于細粒度的事務(wù)并發(fā)控制.因此,RDMA提供的一致性以及原子性的特點將促使相應(yīng)的分布式協(xié)議發(fā)生重大變化.

      FaRM[13,15]是Microsoft Research在2014年提出的一個基于RDMA的分布式內(nèi)存計算平臺.FaRM提供基于分布式事務(wù)的共享內(nèi)存讀寫接口,通過樂觀鎖和2階段提交協(xié)議來保證事務(wù)執(zhí)行的原子性和可序列化.如圖11是FaRM的事務(wù)執(zhí)行邏輯,其中包含1個協(xié)調(diào)者(C)和3個參與者(P1,P2,P3)以及他們的備份節(jié)點(B1,B2,B3).事務(wù)分為執(zhí)行階段和提交階段,圖11中虛線箭頭代表Read,實線箭頭代表Write.在執(zhí)行階段,協(xié)調(diào)者首先查詢內(nèi)存區(qū)標(biāo)識符,通過散列函數(shù)計算相應(yīng)遠端地址,發(fā)起Read請求,遠程讀取事務(wù)涉及的讀集和寫集,然后根據(jù)讀取的數(shù)據(jù)在本地執(zhí)行事務(wù)邏輯.在提交階段,首先要對寫集對應(yīng)數(shù)據(jù)項加鎖,協(xié)調(diào)者以RPC的方式將加鎖請求寫到參與者的消息區(qū),參與者接收到消息后,對數(shù)據(jù)項加鎖,如果加鎖失敗或數(shù)據(jù)項版本發(fā)生變化,則返回失敗,事務(wù)終止.加鎖階段完成后,需再次核對讀集對應(yīng)版本.若以上2步均成功執(zhí)行,則先后對備份節(jié)點和參與者執(zhí)行數(shù)據(jù)提交.為提高事務(wù)讀寫的并發(fā)性能,F(xiàn)aRM通過增加cache line粒度的版本控制實現(xiàn)無鎖讀,在不加鎖的情況下執(zhí)行事務(wù)讀取,并感知事務(wù)的一致性,判斷是否發(fā)生臟讀.不同于DrTM的是,F(xiàn)aRM無需CPU支持HTM功能,而是通過樂觀鎖進行并發(fā)控制,僅在事務(wù)提交時進行沖突檢查;另一方面,F(xiàn)aRM在事務(wù)執(zhí)行過程中進行數(shù)據(jù)備份,從而提高了數(shù)據(jù)可用性.

      Fig. 10 The cases of conflicts between local and remote txs[17]圖10 本地和分布式事務(wù)之間的沖突情形[14]

      Fig. 11 FaRM commit protocol[15]圖11 FaRM的事務(wù)提交協(xié)議[15]

      CMU于2016年提出的分布式事務(wù)協(xié)議FaSST[16],則側(cè)重于考慮RDMA網(wǎng)絡(luò)的高性能和可擴展,他們發(fā)現(xiàn)UD Send在實際通信場景中根本不出現(xiàn)丟包情況,且表現(xiàn)出極高的性能和擴展性,為此,他們借用FaRM的分布式事務(wù)協(xié)議模型,設(shè)計并實現(xiàn)了新型分布式事務(wù),其性能遠高于DrTM和FaRM.

      3.4 RDMA的通用性優(yōu)化

      RDMA在上述3類系統(tǒng)中得到了廣泛的研究與應(yīng)用.此外,RDMA還在IO負(fù)載分派、數(shù)據(jù)遠程備份等方面提供了新的方式,本節(jié)將著重介紹與RDMA相關(guān)的通用性優(yōu)化技術(shù).

      1) 網(wǎng)絡(luò)負(fù)載重分派

      RDMA單向原語在執(zhí)行過程中僅需發(fā)送方CPU參與,這區(qū)別于傳統(tǒng)套接字的收發(fā)模式.因此從CPU執(zhí)行IO負(fù)載角度來看,RDMA單向原語為網(wǎng)絡(luò)負(fù)載的重分派提供了機遇.從3.3節(jié)事務(wù)提交協(xié)議中可以看到,F(xiàn)aRM在事務(wù)執(zhí)行階段、版本核對階段、備份節(jié)點參與者提交階段以及無鎖讀階段均使用了單向原語,參與者或備份節(jié)點CPU完全不參與事務(wù)執(zhí)行邏輯.通過網(wǎng)絡(luò)負(fù)載的重新分派,協(xié)調(diào)者組織執(zhí)行事務(wù)的大部分邏輯,而參與者較少參與事務(wù)提交,將CPU資源更多的應(yīng)用在本地執(zhí)行邏輯上.實驗表明,90節(jié)點的FaRM系統(tǒng)運行TATP測試集,可提供140 MTPS的事務(wù)執(zhí)行速度.另外,3.1節(jié)提到的Pilaf,HydraDB等鍵值存儲系統(tǒng)將Get請求的網(wǎng)絡(luò)負(fù)載從服務(wù)端重新分派到客戶端,一定程度上減輕了服務(wù)端CPU開銷,同時提升了系統(tǒng)吞吐.而Octopus則進一步改變數(shù)據(jù)IO通路,將傳統(tǒng)的服務(wù)端主動返回文件數(shù)據(jù)的設(shè)計模式改為“服務(wù)端僅返回文件數(shù)據(jù)地址,客戶端主動通過RDMA Read或Write執(zhí)行文件IO”的新型IO機制,從而大幅降低文件服務(wù)器CPU開銷,并提升了數(shù)據(jù)并發(fā)存取吞吐.

      2) 數(shù)據(jù)備份與持久化

      新型非易失存儲器[24-26]提供接近內(nèi)存的訪問速度以及字節(jié)尋址的訪問方式,同時還能像磁盤一樣提供持久性存儲.持久性內(nèi)存的出現(xiàn)改變了計算機體系結(jié)構(gòu)中存儲金字塔的持久性和易失性邊界,數(shù)據(jù)持久化由傳統(tǒng)的軟件控制方式變?yōu)閳?zhí)行CPU刷寫指令的硬件控制方式[27].因此,存儲系統(tǒng)在組織數(shù)據(jù)時需要精細化執(zhí)行數(shù)據(jù)持久化操作或異地備份,以保障數(shù)據(jù)存儲可靠性和故障可恢復(fù).然而,CPU持久化刷寫指令代價高,異地備份則引入額外的網(wǎng)絡(luò)開銷,上述原因都將成為制約非易失內(nèi)存性能的重要因素.RDMA提供極低的網(wǎng)絡(luò)延遲(~1 μs),這與非易失內(nèi)存的訪問延遲幾乎在同一個數(shù)量級,因此,Mojim[28]提出一種基于RDMA的新型數(shù)據(jù)布局和備份方案,并提供了高可靠、高性能的存儲服務(wù).

      Fig. 12 Mojim architecture[28]圖12 Mojim的系統(tǒng)架構(gòu)[28]

      Mojim是一個構(gòu)建在NVMM上的內(nèi)核態(tài)系統(tǒng),圖12描述了Mojim的系統(tǒng)架構(gòu).它可以向上層提供基礎(chǔ)的數(shù)據(jù)讀寫接口和不同級別的持久化接口.Mojim采用了包含主層和輔層的雙層架構(gòu),其中主層包括1個主節(jié)點和1個鏡像節(jié)點,輔層包含一到多個備份節(jié)點.根據(jù)不同的持久化級別,寫入Mojim的數(shù)據(jù)同步或異步地流入到主節(jié)點、鏡像節(jié)點和備份節(jié)點.Mojim包含的持久化級別主要包括M-sync,M-async和M-syncsec.其中,以M-sync模式寫入時,Mojim將數(shù)據(jù)首先寫入到本地(不執(zhí)行CPU緩存數(shù)據(jù)刷寫),然后將數(shù)據(jù)傳輸?shù)界R像節(jié)點,等待對方網(wǎng)卡反饋確認(rèn)信息后成功返回.而鏡像節(jié)點異步將數(shù)據(jù)傳遞到備份節(jié)點.以M-async模式寫入時,主節(jié)點首先刷寫緩存數(shù)據(jù),然后將數(shù)據(jù)傳輸?shù)界R像節(jié)點,在不等待確認(rèn)信息時直接成功返回.M-syncsec則同步等待數(shù)據(jù)寫入到備份節(jié)點之后才成功返回.以上3類持久寫方式具有不同級別的可靠性、可用性和一致性.

      實驗顯示,基于RDMA的異地備份方案性能強于基于本地緩存刷寫的持久化方案,這主要是因為CPU刷寫緩存數(shù)據(jù)以cache line為粒度,且并發(fā)的數(shù)據(jù)持久寫被CPU強制順序性執(zhí)行,并行度嚴(yán)重受到限制.因此,RDMA網(wǎng)絡(luò)為分布式持久性內(nèi)存系統(tǒng)中的數(shù)據(jù)持久化和遠程備份提供了新的機遇.另一方面,基于遠程刷寫的原語[29]也有望出現(xiàn).

      RDMA區(qū)別于傳統(tǒng)的以太網(wǎng)通信方式,它能提供Read,Write等遠程直接訪問的單向原語,在數(shù)據(jù)傳輸過程中無需遠端CPU的參與,這促使系統(tǒng)設(shè)計時重新考慮數(shù)據(jù)的組織和索引方式,以及網(wǎng)絡(luò)負(fù)載的均衡分派;RDMA的低延遲訪問特性徹底改變了傳統(tǒng)分布式系統(tǒng)設(shè)計中對“本地”和“異地”的性能權(quán)衡,為數(shù)據(jù)的多機備份和持久化提供了新的思路;RDMA還能保證緩存數(shù)據(jù)的強一致性,處理器總能夠讀取最新數(shù)據(jù),同時還提供2種原子操作,用于數(shù)據(jù)項的原子性更新,這為設(shè)計新型分布式協(xié)議提供了新的機遇.

      4 總結(jié)與展望

      本文分別從硬件管理和軟件重構(gòu)2個方面闡述了對RDMA的相關(guān)研究,詳細分析了RDMA的內(nèi)在硬件特性、系統(tǒng)軟件設(shè)計的變革以及當(dāng)前RDMA的典型應(yīng)用場景.從硬件角度來看,RDMA網(wǎng)絡(luò)并行數(shù)據(jù)傳輸會受到多處硬件資源的制約,例如網(wǎng)卡緩存、CPU緩存等,因此在系統(tǒng)架構(gòu)上要同時要兼顧其硬件特性,在系統(tǒng)擴展性、可靠性和高性能中權(quán)衡,在CPU資源開銷與網(wǎng)絡(luò)資源共享之間合理取舍.從軟件重塑角度看,RDMA區(qū)別于傳統(tǒng)網(wǎng)絡(luò)的數(shù)據(jù)傳輸接口和其極低的網(wǎng)絡(luò)延遲改變了現(xiàn)有的軟件設(shè)計方式,為數(shù)據(jù)組織與索引、網(wǎng)絡(luò)傳輸重分派和分布式協(xié)議的重構(gòu)等方面提供了新的方法,合理的軟件重構(gòu)更能充分發(fā)揮RDMA網(wǎng)絡(luò)的優(yōu)勢,提升系統(tǒng)的整體性能.

      邁洛斯公司目前已經(jīng)提供超過200 Gbps的傳輸速率的RDMA網(wǎng)卡,傳輸延遲早已突破1μs,其迅速提升的網(wǎng)絡(luò)傳輸性能,正促使RDMA技術(shù)被逐漸應(yīng)用到數(shù)據(jù)中心.針對其擴展性問題,邁洛斯引入動態(tài)鏈接傳輸機制(dynamically connected trans-port, DCT)實現(xiàn)動態(tài)創(chuàng)建銷毀QP鏈接,以保證QP數(shù)量維持穩(wěn)定;Oracle提出的Sonoma處理器則將網(wǎng)卡和FPGA集成到片上,能輕松支持?jǐn)?shù)千個QP鏈路.為增強RDMA網(wǎng)卡設(shè)備的靈活性,邁洛斯還提供了可編程式RDMA網(wǎng)卡,用于協(xié)助用戶進行應(yīng)用數(shù)據(jù)傳輸加速、數(shù)據(jù)壓縮解壓縮和其他功能性優(yōu)化,為上層系統(tǒng)設(shè)計提供了更強的靈活性.RDMA具有獨特的數(shù)據(jù)傳輸模式和極高的數(shù)據(jù)傳輸性能,與此同時,其引入的擴展性等問題正在逐步解決.與RDMA緊耦合的分布式系統(tǒng)軟件設(shè)計將為大數(shù)據(jù)處理和存儲帶來新的機遇.

      猜你喜歡
      鍵值原語服務(wù)端
      測試原語:存儲器故障最小檢測序列的統(tǒng)一特征
      非請勿進 為注冊表的重要鍵值上把“鎖”
      云存儲中基于相似性的客戶-服務(wù)端雙端數(shù)據(jù)去重方法
      新時期《移動Web服務(wù)端開發(fā)》課程教學(xué)改革的研究
      密碼消息原語通信協(xié)議介紹及安全分析
      在Windows Server 2008上創(chuàng)建應(yīng)用
      一鍵直達 Windows 10注冊表編輯高招
      電腦愛好者(2017年9期)2017-06-01 21:38:08
      基于原語自動生成的安全協(xié)議組合設(shè)計策略及應(yīng)用研究
      “鴿子”玩升級 黑你沒商量
      “原語效應(yīng)”在漢英口譯中的運用及局限性研究
      淄博市| 浑源县| 同仁县| 桦甸市| 六枝特区| 焉耆| 琼中| 扶余县| 兴化市| 定兴县| 资源县| 霍山县| 西安市| 天长市| 大理市| 潞城市| 抚宁县| 虹口区| 砚山县| 哈巴河县| 尉犁县| 托克逊县| 新河县| 阿拉善左旗| 仪征市| 太湖县| 错那县| 司法| 安顺市| 台湾省| 仲巴县| 合江县| 万州区| 名山县| 中牟县| 靖江市| 延安市| 阳春市| 湖州市| 民和| 县级市|