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

?

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

2019-02-20 08:33陳游旻陸游游羅圣美舒繼武
關(guān)鍵詞:原語鍵值服務(wù)端

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

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

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

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

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

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

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

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

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),直接讀寫遠(yuǎn)端節(jié)點(diǎn)內(nèi)存,該過程無需遠(yuǎn)端CPU的參與.以遠(yuǎn)程寫操作為例(如圖1),本地CPU直接以MMIO(memory mapped IO)的方式向網(wǎng)卡發(fā)起遠(yuǎn)程寫命令,并傳遞相應(yīng)參數(shù),包括待寫入數(shù)據(jù)塊基地址、遠(yuǎn)端內(nèi)存地址、寫入數(shù)據(jù)塊大小、遠(yuǎn)端注冊(cè)內(nèi)存密鑰等信息;本地網(wǎng)卡收到命令之后,立即根據(jù)本地?cái)?shù)據(jù)塊基地址將數(shù)據(jù)塊從主存以DMA Read的方式讀取到網(wǎng)卡緩存,并發(fā)送到遠(yuǎn)端;遠(yuǎn)端網(wǎng)卡接收到數(shù)據(jù)塊之后,以DMA Write的方式直接將數(shù)據(jù)寫入內(nèi)存對(duì)應(yīng)地址.此過程中,RDMA無需像傳統(tǒng)以太網(wǎng)一樣穿越內(nèi)核中的多層網(wǎng)絡(luò)協(xié)議棧,因此實(shí)現(xiàn)了跨節(jié)點(diǎn)數(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ù)報(bào)(un-reliable datagram, UD).其中,UD采用面向無連接的數(shù)據(jù)報(bào)發(fā)送方式,支持點(diǎn)對(duì)點(diǎn)和點(diǎn)對(duì)多的數(shù)據(jù)傳輸,而RC和UC模式僅支持點(diǎn)對(duì)點(diǎn)的面向連接的數(shù)據(jù)傳輸.另外,UD模式支持的最大數(shù)據(jù)傳輸單元為4 KB,而RC和UD模式支持多達(dá)2 GB的單次數(shù)據(jù)傳輸.

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

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

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

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

2 RDMA與硬件管理

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

2.1 緩存管理

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

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

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

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

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

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

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

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

2.2 CPU調(diào)度

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

總體上,RDMA更多地被應(yīng)用到鍵值存儲(chǔ)和分布式事務(wù)系統(tǒng),而分布式文件系統(tǒng)由于結(jié)構(gòu)復(fù)雜,很難充分發(fā)揮出RDMA的硬件特性.目前,也有部分分布式文件系統(tǒng)開始嘗試支持RDMA網(wǎng)絡(luò),以提供更高的性能[6-7].但是,這些系統(tǒng)大多采用了模塊化的軟件設(shè)計(jì),將網(wǎng)絡(luò)傳輸、文件存儲(chǔ)和控制邏輯嚴(yán)格分離,而在引入RDMA網(wǎng)絡(luò)的時(shí)候,僅僅采用了簡單的網(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è)計(jì)了文件系統(tǒng)軟件邏輯.具體地,各個(gè)節(jié)點(diǎn)將數(shù)據(jù)存儲(chǔ)區(qū)注冊(cè)到內(nèi)存,并共享到集群使之可被遠(yuǎn)程直接訪問,進(jìn)而構(gòu)建持久性共享內(nèi)存,而元數(shù)據(jù)區(qū)域則由服務(wù)節(jié)點(diǎn)進(jìn)行本地管理(如圖9).Octopus通過引入持久性共享內(nèi)存以降低數(shù)據(jù)冗余拷貝,進(jìn)而提供接近硬件的讀寫帶寬;引入客戶端主動(dòng)式數(shù)據(jù)傳輸來重新均攤客戶端和服務(wù)端之間的網(wǎng)絡(luò)負(fù)載;引入自識(shí)別遠(yuǎn)程過程調(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)計(jì)到1次文件讀寫將引入7次數(shù)據(jù)拷貝,這種低效的系統(tǒng)設(shè)計(jì)模式嚴(yán)重限制了RDMA網(wǎng)絡(luò)的硬件特性.Octopus則提出了持久性共享內(nèi)存,用于直接管理文件系統(tǒng)數(shù)據(jù).這種設(shè)計(jì)移除了本地文件系統(tǒng)層,同時(shí)讓客戶端遠(yuǎn)程直接訪問,成功將數(shù)據(jù)拷貝次數(shù)降低到4次.

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

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

3) 自識(shí)別遠(yuǎn)程過程調(diào)用

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

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

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

RDMA具有cache強(qiáng)一致性,這意味著,RDMA網(wǎng)卡寫入的最新數(shù)據(jù)能及時(shí)被CPU讀取,同時(shí),網(wǎng)卡總是發(fā)送CPU最新更新的數(shù)據(jù); RDMA還具有原子性,它提供2種原子操作原語:CAS和FAA①COMP_AND_SWAP和FETCH_AND_ADD縮寫為CAS和FAA.,它們可以并發(fā)更新同一個(gè)內(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),利用它們之間的強(qiáng)一致性設(shè)計(jì)并實(shí)現(xiàn)了一套高效的分布式事務(wù)協(xié)議.事務(wù)內(nèi)存提供了XBEGIN,XEND和XABORT接口,能夠在硬件層面控制對(duì)內(nèi)存的沖突訪問,一旦沖突發(fā)生,只有1個(gè)線程成功修改,而其他線程均無條件終止.事實(shí)上,RDMA的遠(yuǎn)程沖突訪問也將導(dǎo)致本地的事務(wù)性內(nèi)存訪問終止,因此,DrTM利用這種強(qiáng)一致性重新設(shè)計(jì)了事務(wù)協(xié)議.

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

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

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

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

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

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

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

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

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

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

4 總結(jié)與展望

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

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

猜你喜歡
原語鍵值服務(wù)端
非請(qǐng)勿進(jìn) 為注冊(cè)表的重要鍵值上把“鎖”
新時(shí)期《移動(dòng)Web服務(wù)端開發(fā)》課程教學(xué)改革的研究
基于三層結(jié)構(gòu)下機(jī)房管理系統(tǒng)的實(shí)現(xiàn)分析
基于三層結(jié)構(gòu)下機(jī)房管理系統(tǒng)的實(shí)現(xiàn)分析
一鍵直達(dá) Windows 10注冊(cè)表編輯高招
淺談旅游翻譯中文化差異的處理
基于ZigBee協(xié)議棧的PHY服務(wù)研究
基于原語自動(dòng)生成的安全協(xié)議組合設(shè)計(jì)策略及應(yīng)用研究
注冊(cè)表值被刪除導(dǎo)致文件夾選項(xiàng)成空白
“掃除”技巧之清除惡意程序
阿拉善左旗| 长汀县| 呼玛县| 碌曲县| 铁岭县| 和平县| 马山县| 安化县| 长岛县| 依兰县| 瓮安县| 南漳县| 葵青区| 泸定县| 岑巩县| 元阳县| 平安县| 乌拉特后旗| 子长县| 娱乐| 政和县| 平南县| 铜川市| 平谷区| 南和县| 当雄县| 武穴市| 新晃| 伊宁县| 治多县| 陆良县| 霍林郭勒市| 中超| 英吉沙县| 金平| 新余市| 湟源县| 怀远县| 长泰县| 湘潭县| 罗定市|