段卓輝 劉海坤 趙金瑋 劉一航 廖小飛 金 海
(大數(shù)據(jù)技術(shù)與系統(tǒng)國家地方聯(lián)合工程研究中心(華中科技大學(xué)) 武漢 430074)
(服務(wù)計算技術(shù)與系統(tǒng)教育部重點實驗室(華中科技大學(xué)) 武漢 430074)
(集群與網(wǎng)格計算湖北省重點實驗室(華中科技大學(xué))武漢 430074)
(華中科技大學(xué)計算機科學(xué)與技術(shù)學(xué)院 武漢 430074)
(zhduan@hust.edu.cn)
隨著大數(shù)據(jù)、云計算、人工智能等技術(shù)的不斷發(fā)展,計算機需要存儲和處理的數(shù)據(jù)呈指數(shù)級增長.傳統(tǒng)的單機節(jié)點已經(jīng)無法滿足這些應(yīng)用對計算資源和存儲資源的需求,分布式內(nèi)存系統(tǒng)成為解決擴展性問題的一個有效途徑[1].隨著新型非易失性存儲器(non-volatile memory,NVM)[2-3]和遠程直接內(nèi)存訪問(remote direct memory access,RDMA)技術(shù)在數(shù)據(jù)中心的廣泛應(yīng)用,為分布式內(nèi)存系統(tǒng)的設(shè)計帶來了新的契機.基于NVM/DRAM(dynamic random access memory)異構(gòu)內(nèi)存和RDMA 技術(shù)的分布式內(nèi)存系統(tǒng)已成為國際研究的熱點[4-6].
為了提高分布式內(nèi)存系統(tǒng)的性能,數(shù)據(jù)往往會被客戶端緩存以加速遠程讀寫操作,從而減輕服務(wù)器端的訪存壓力[7].然而,緩存機制的引入也會帶來分布式系統(tǒng)中緩存不一致的問題[8].當(dāng)一個客戶端緩存了共享的存儲對象后,另一個客戶端執(zhí)行對該共享存儲對象的更新操作就會導(dǎo)致緩存不一致的問題.因此,在分布式環(huán)境中,當(dāng)存儲對象的源節(jié)點更新時,需要確保緩存的副本也被更新.然而,保證緩存一致性往往帶來較大的性能開銷.分布式系統(tǒng)不僅需要同步節(jié)點之間的緩存副本[9],還需要降低確保緩存一致性所帶來的開銷,否則使用緩存帶來的性能提升將會被抵消.
新興的RDMA 技術(shù)使得遠端內(nèi)存的高速訪問成為可能.在高速Infiniband(IB)網(wǎng)絡(luò)下,遠端節(jié)點的讀寫延遲能接近本地讀寫延遲[10].直接通過網(wǎng)絡(luò)進行遠程讀寫操作是解決緩存一致性開銷問題的一種直接方法[7].
表1 展示了本地DRAM 和RDMA 訪問遠端的性能對比.QDR,FDR,EDR 和HDR 是不同規(guī)格的IB 網(wǎng)絡(luò).即使使用了RDMA 技術(shù),通常情況下遠程讀寫的延遲仍然比直接讀寫本地DRAM 要高[8].因此,分布式系統(tǒng)不能簡單地舍棄客戶端緩存,設(shè)計和實現(xiàn)緩存一致性機制在分布式異構(gòu)內(nèi)存系統(tǒng)中仍然至關(guān)重要.由于確保緩存一致性必然會帶來一定的開銷,因此高效的分布式緩存一致性算法必須權(quán)衡緩存帶來的性能提升和確保緩存一致性所帶來的開銷,以達到系統(tǒng)在保證緩存一致性的前提下,依然能夠比無客戶端緩存的情況下獲得更高的性能.
Table 1 Performance Comparison of Local DRAM and RDMA表1 本地DRAM 和RDMA 性能對比
傳統(tǒng)的緩存一致性解決方案有3 種不同的方法.首先,基于時間戳的租約機制[11]是一種常用的保證共享對象并發(fā)訪問一致性的方法.該機制在租約期內(nèi)授予緩存數(shù)據(jù)的客戶端對相應(yīng)數(shù)據(jù)的讀寫權(quán)力.基于租約的緩存一致性機制需要考慮許多使用問題,例如時間參數(shù)的平衡問題[12].分布式系統(tǒng)應(yīng)該慎重考慮頒發(fā)的租約時間長短.如果租約時間過長,會影響系統(tǒng)同步的效率,使其他節(jié)點等待時間過長;相反,如果租約時間過短,往往需要頻繁進行續(xù)約,增加續(xù)約的通信開銷,導(dǎo)致整體分布式系統(tǒng)效率降低.此外,時鐘同步也是需要考慮的因素[13].由于,不同節(jié)點的時間可能存在誤差,基于租約的一致性機制就會出現(xiàn)問題.另外,還需要考慮單節(jié)點故障問題.租約機制依賴于某個服務(wù)器節(jié)點頒發(fā)的租約時間戳,如果該節(jié)點出現(xiàn)故障,將會影響整個系統(tǒng)的使用,導(dǎo)致系統(tǒng)故障.
其次,基于目錄的緩存一致性保證機制多用于數(shù)據(jù)更新比較頻繁的場景[14].該機制需要維護一個全局公共目錄,目錄中保存了緩存的元數(shù)據(jù)信息,包括緩存是否為臟數(shù)據(jù)等.當(dāng)客戶端讀取數(shù)據(jù)時,需要查詢相應(yīng)節(jié)點的目錄以確定緩存的狀態(tài),從而獲取緩存是否可用的信息.當(dāng)某個客戶端節(jié)點更新數(shù)據(jù)時,需要更新緩存的目錄狀態(tài),以供其他節(jié)點查詢.基于目錄的緩存一致性保證機制也存在一些問題.一方面,目錄的維護需要額外的存儲空間,增加了存儲開銷;另一方面,對于讀取數(shù)據(jù)的節(jié)點來說,每次操作都需要查詢遠端目錄來確定緩存狀態(tài),增加了時間開銷,降低了系統(tǒng)效率[15].
最后,基于廣播方式實現(xiàn)的緩存一致性保證機制多用于數(shù)據(jù)讀操作多、更新不頻繁的場景[16].在RDMA 通信環(huán)境下,這種機制面臨著新的挑戰(zhàn).當(dāng)一個客戶端節(jié)點需要更新數(shù)據(jù)時,需要向其他共享節(jié)點廣播相應(yīng)的信息.當(dāng)其他節(jié)點監(jiān)聽到更新信息后,將當(dāng)前緩存數(shù)據(jù)標(biāo)記為不可用,并在后續(xù)階段進行刷新.基于廣播方式的一致性保證機制具有較高的效率.當(dāng)某個客戶端需要讀取數(shù)據(jù)時,在緩存中存在此數(shù)據(jù)的情況下,只需要進行本地緩存讀取即可.然而,在RDMA 網(wǎng)絡(luò)中,廣播通信是不可靠的,而在RDMA網(wǎng)絡(luò)中建立可靠的廣播機制成本較高,而且該廣播機制可能會造成比較嚴(yán)重的網(wǎng)絡(luò)擁塞問題[8].
綜上所述,傳統(tǒng)的緩存一致性保證機制各有利弊.在實際應(yīng)用中,需要對這些方法進行改進和完善,并根據(jù)不同情況決定使用哪些緩存一致性保證機制.本文基于NVM 和RDMA 技術(shù),試圖在分布式異構(gòu)內(nèi)存池中實現(xiàn)一種全新的緩存一致性保證機制,為大數(shù)據(jù)時代的分布式應(yīng)用提供更高效的分布式內(nèi)存系統(tǒng).
本文面向分布式異構(gòu)內(nèi)存池系統(tǒng),提出了一種目錄和廣播相結(jié)合的緩存一致性保證機制,并且可在運行時動態(tài)切換緩存一致性保證機制,以有效提升緩存一致性保證的效率.我們通過四象限矩陣分析方法對每個數(shù)據(jù)塊進行訪問模式的判定分析,并將其轉(zhuǎn)換為適合的緩存一致性保證策略,從而提高了數(shù)據(jù)同步效率和性能優(yōu)勢.實驗結(jié)果表明,相對于使用單一基于目錄或基于廣播的緩存一致性保證機制,采用可動態(tài)轉(zhuǎn)換的緩存一致性保證機制的分布式異構(gòu)內(nèi)存池系統(tǒng)平均讀寫性能分別提升了32.31%和31.20%.此外,在客戶端數(shù)量不斷增加的情況下,可動態(tài)轉(zhuǎn)換的緩存一致性保證機制表現(xiàn)出良好的擴展性能.
在分布式環(huán)境中,當(dāng)多個客戶端共享同一存儲對象時,分布式系統(tǒng)往往采用租約、目錄或廣播等緩存一致性保證機制來確保客戶端的緩存副本與服務(wù)器的存儲數(shù)據(jù)版本保持一致.近年來,國內(nèi)外對于緩存一致性保證機制的研究主要集中在對傳統(tǒng)機制的實現(xiàn)和改進上,同時也涌現(xiàn)出一些利用新型硬件或軟件加速緩存一致性機制的研究成果.
1)多核處理器的緩存一致性協(xié)議.在多核系統(tǒng)中,緩存一致性問題是普遍存在的.當(dāng)多個緩存同時訪問同一塊數(shù)據(jù)時,讀寫操作可能導(dǎo)致緩存的不一致性,這個問題在現(xiàn)代多核處理器中尤為突出.為了提高CPU 對內(nèi)存的訪問速度,多級緩存被引入到CPU 和內(nèi)存之間.每個多核處理器的核心都有自己的緩存,當(dāng)進行讀寫操作時就會引發(fā)緩存不一致性的問題.MESI(modified exclusive shared invalid)協(xié)議是一種廣泛使用的緩存一致性協(xié)議[17-19],它將緩存狀態(tài)劃分為4 種,并通過讀寫事件相互轉(zhuǎn)換.在進行寫操作之前,必須獲得獨占權(quán)限,在進行讀操作之前至少要保證是共享狀態(tài).MESI 協(xié)議本身是基于MSI 協(xié)議的發(fā)展而來,MSI 協(xié)議只有3 種狀態(tài),缺少了獨占狀態(tài)E.此外,還有許多擴展的協(xié)議基于MESI,例如加入了O 狀態(tài)的MOESI 協(xié)議[20-21],其中O 狀態(tài)表示所屬狀態(tài),類似于E 狀態(tài),但該狀態(tài)允許共享狀態(tài)為臟的緩存行而無需寫回內(nèi)存.
多核系統(tǒng)中的緩存一致性協(xié)議MESI 本質(zhì)上是一種基于監(jiān)聽的協(xié)議,各個處理器除了要處理自己的緩存,還要監(jiān)聽其它處理器的活動,這與分布式下基于廣播的協(xié)議的原理類似.在分布式異構(gòu)內(nèi)存池系統(tǒng)中,服務(wù)器在基于廣播的機制下也要監(jiān)聽客戶端的緩存狀態(tài).此外,MESI 協(xié)議對緩存的4 種狀態(tài)設(shè)計和觸發(fā)事件導(dǎo)致的狀態(tài)轉(zhuǎn)換對于分布式內(nèi)存池中緩存狀態(tài)的設(shè)計也有一定的借鑒意義.
2)分布式系統(tǒng)的緩存一致性保證機制.在分布式存儲系統(tǒng)中,確保緩存一致性的機制旨在保持緩存副本與服務(wù)器中存儲的數(shù)據(jù)一致.因此,當(dāng)對緩存數(shù)據(jù)或存儲數(shù)據(jù)進行更新時,必須確保這些修改被同步到緩存的共享節(jié)點.
基于時間的租賃機制通過服務(wù)器向客戶端頒發(fā)鎖來實現(xiàn)數(shù)據(jù)一致性保證,但面臨單節(jié)點故障和控制租約時間的參數(shù)問題.以色列研究人員提出了自適應(yīng)租約[22],采用優(yōu)化的租約機制,對不同類型的數(shù)據(jù)對象采用不同的租約,從而減少了網(wǎng)絡(luò)延遲.為了解決單節(jié)點故障問題,來自加州大學(xué)洛杉磯分校的研究人員提出了Paxos 協(xié)議[23],通過多輪投票確定數(shù)據(jù)的一致性節(jié)點.在此基礎(chǔ)上,微軟研究人員對Paxos進一步優(yōu)化[24-25].來自國防科技大學(xué)的研究人員提出了DCC 協(xié)議[26],結(jié)合了優(yōu)化的Lease 和Fast-Paxos機制,通過Paxos 算法選舉主節(jié)點,解決了單節(jié)點故障問題,并引入同步組的概念,使組內(nèi)節(jié)點可以直接訪問數(shù)據(jù),并定義了確保數(shù)據(jù)最終一致性的數(shù)據(jù)寫回過程.麻省理工大學(xué)的研究人員提出了邏輯租約技術(shù)[19],通過動態(tài)調(diào)整操作順序以減少沖突的發(fā)生,從而提升分布式共享并行系統(tǒng)的擴展性和性能.邏輯租約技術(shù)結(jié)合了物理上和邏輯上的時間,形成了一種新的時間方式,更加靈活高效.
對于基于目錄的機制來實現(xiàn)緩存一致性保證方案,系統(tǒng)需要維護一個全局目錄,并通常需要一個元數(shù)據(jù)服務(wù)器節(jié)點.來自新加坡國立大學(xué)的研究人員提出的GAM 系統(tǒng)采用目錄方式保持緩存一致性[6],將數(shù)據(jù)節(jié)點分為home 節(jié)點、remote 節(jié)點、request 節(jié)點和sharing 節(jié)點、owner 節(jié)點5 種類型,緩存節(jié)點分為Shared、Unshared 和Dirty 這3 種類型.不同的讀寫操作會導(dǎo)致狀態(tài)之間的轉(zhuǎn)換,最終實現(xiàn)了系統(tǒng)的緩存一致性保證機制,并對該機制下的系統(tǒng)進行了擴展性、局部性和延遲等方面的測試.新加坡國立大學(xué)和微軟的研究人員合作提出的Pegasus 系統(tǒng)通過目錄方式保證緩存一致性[27],利用可編程交換機來平衡存儲服務(wù)器之間的負載,改進了基于目錄的緩存一致性協(xié)議,僅在交換機數(shù)據(jù)平面中存儲和轉(zhuǎn)發(fā)元數(shù)據(jù).以色列研究人員提出了COMBINE[28],這是一種基于目錄的共享對象一致性協(xié)議,利用覆蓋樹數(shù)據(jù)結(jié)構(gòu),將系統(tǒng)節(jié)點作為覆蓋樹的葉子節(jié)點,將通過同一節(jié)點的請求合并在一起.COMBINE 利用覆蓋樹提高了最近鄰搜索的效率,并減少了競爭,將服務(wù)請求的成本與覆蓋樹中請求節(jié)點和服務(wù)節(jié)點之間的最短路徑成本關(guān)聯(lián)起來.
基于監(jiān)聽廣播的緩存一致性保證機制是一種高效的機制.在這種機制下,某個節(jié)點的讀寫操作會被廣播給其他節(jié)點,不同節(jié)點中的緩存控制器會進行相同的處理操作,以確保在接收到相同廣播后不同節(jié)點處于相同的狀態(tài),最終實現(xiàn)一致性[29].相比基于目錄的緩存一致性保證機制,基于廣播的機制不需要引入和維護目錄,更加簡單.此外,基于廣播的機制不需要像基于目錄的一致性保證機制那樣傳遞大量的控制消息.然而,在大規(guī)模系統(tǒng)中,基于廣播的機制在帶寬和延遲等性能方面通常較差,因此只適用于小規(guī)模的分布式系統(tǒng).來自上海交通大學(xué)的研究人員在RDMA 網(wǎng)絡(luò)下實現(xiàn)了基于廣播的分布式共享內(nèi)存[30],對讀請求處理和寫請求處理進行了適應(yīng)性設(shè)計和實現(xiàn),并確保不同緩存控制器對讀寫請求的順序相對一致性,最終測試表明,與傳統(tǒng)分布式系統(tǒng)相比,其性能有顯著提升.
3)混合的緩存一致性保證機制.為了提高一致性保證機制的效率,現(xiàn)有研究采用了混合緩存一致性機制,該機制能夠進一步減小網(wǎng)絡(luò)開銷.克萊門森大學(xué)研究人員在其研究中提出了一種混合的緩存一致性保證機制[31],其結(jié)合了更新傳播和失效策略.當(dāng)對目標(biāo)存儲資源進行讀寫訪問時,根據(jù)系統(tǒng)設(shè)計的策略,決定采用更新傳播或失效策略.類似地,印度學(xué)者[19]也提出了類似的算法,該策略結(jié)合了傳播和失效2 種策略以實現(xiàn)強一致性.對于寫更新操作,該算法首先執(zhí)行寫的無效操作,然后在節(jié)點訪問該存儲資源之前更新緩存副本.這種策略顯著減少了存儲資源的訪問延遲.這些緩存一致性保證機制都是結(jié)合了更新傳播和失效策略,類似于直接廣播模式和緩存副本失效模式,以實現(xiàn)一致性.
上述機制都是在元數(shù)據(jù)服務(wù)器節(jié)點上進行的,當(dāng)多個節(jié)點進行寫入時,會增加元數(shù)據(jù)服務(wù)器的負擔(dān).因此,一些研究提出同時利用客戶端來確保存儲系統(tǒng)的數(shù)據(jù)一致性.例如,來自西南大學(xué)的研究人員提出了一種自適應(yīng)的細粒度緩存更新策略[5],將緩存一致性的更新操作移至客戶端節(jié)點,針對不同的存儲資源,該自適應(yīng)策略結(jié)合應(yīng)用的訪問行為,采用不同的緩存一致性更新策略.這種自適應(yīng)的混合緩存一致性保證機制顯著降低了系統(tǒng)的存儲資源訪問延遲.另外,印度學(xué)者提出了一種基于自適應(yīng)目錄的緩存一致性模型[32],該模型能夠顯著優(yōu)化分布式應(yīng)用中的網(wǎng)絡(luò)帶寬.該工作在分層設(shè)計的分布式系統(tǒng)中實現(xiàn)了基于目錄的緩存一致性模型,并添加了自適應(yīng)特性以優(yōu)化該模型,實驗證明相比非自適應(yīng)策略,自適應(yīng)策略在性能上有很大改善和提升.
除了對傳統(tǒng)機制的實現(xiàn)和改進,還有研究利用新的硬件加速緩存一致性.例如,清華大學(xué)的研究人員提出的Concordia 系統(tǒng)利用可編程交換機加速緩存一致性協(xié)議[33].該系統(tǒng)的核心是FLOWCC,一種寫無效協(xié)議,該協(xié)議在交換機和服務(wù)器之間劃分一致性責(zé)任,通過序列化沖突請求并通過鎖定檢查轉(zhuǎn)發(fā)管道,并將它們多播到正確的緩存代理.
綜上所述,緩存一致性的保證機制本質(zhì)上是通過各種方式通知緩存了相同數(shù)據(jù)副本的節(jié)點,以實現(xiàn)各節(jié)點的緩存數(shù)據(jù)一致性.目前對緩存一致性保證機制的研究主要集中在對傳統(tǒng)機制的適應(yīng)性實現(xiàn)和改進,或者將多種機制混合以實現(xiàn)更好的緩存一致性保證機制,以降低系統(tǒng)的遠程訪問延遲.然而,緩存一致性協(xié)議的性能很大程度取決于協(xié)議與當(dāng)前訪問模式和行為的匹配程度.對于整體系統(tǒng)的訪存行為的預(yù)測往往存在很大的不確定性,這就要求緩存一致性協(xié)議能夠靈活地根據(jù)當(dāng)前系統(tǒng)狀態(tài)進行切換.傳統(tǒng)的緩存一致性協(xié)議不能很好地適配動態(tài)變化的應(yīng)用需求,因此亟需一種可動態(tài)配置的緩存一致性保證機制來適配不同應(yīng)用動態(tài)變化的訪存特征.
本文面向分布式異構(gòu)內(nèi)存池系統(tǒng),設(shè)計并實現(xiàn)了可動態(tài)轉(zhuǎn)換的混合緩存一致性保證機制.首先,我們實現(xiàn)了分布式異構(gòu)內(nèi)存池的多客戶端共享機制和客戶端緩存機制.然后,設(shè)計并實現(xiàn)了可動態(tài)轉(zhuǎn)換的混合緩存一致性保證機制.該機制根據(jù)應(yīng)用的不同讀寫訪問特征,提供相應(yīng)的緩存一致性保證策略,以降低緩存一致性保證機制的開銷,提高使用客戶端緩存時的系統(tǒng)性能.分布式異構(gòu)內(nèi)存池系統(tǒng)的整體架構(gòu)如圖1 所示,采用客戶端/服務(wù)器模型,為客戶端提供遠程內(nèi)存資源.客戶端節(jié)點通過DRAM 實現(xiàn)了緩存模塊.客戶端維護緩存目錄條目,其中保存了每個緩存使用的緩存策略.服務(wù)器端同樣維護存儲對象的目錄條目,其中將每個客戶端的緩存信息作為一個節(jié)點串成鏈表.該系統(tǒng)架構(gòu)為實現(xiàn)我們提出的混合緩存一致性保證機制奠定了基礎(chǔ).系統(tǒng)主要分為3 個功能模塊,即分布式異構(gòu)內(nèi)存池中多客戶端共享讀寫機制、混合的緩存一致性保證機制以及緩存一致性保證策略的動態(tài)轉(zhuǎn)換機制,下面分別進行詳細介紹.
Fig.1 The system architecture of distributed heterogeneous memory pool圖1 分布式異構(gòu)內(nèi)存池系統(tǒng)架構(gòu)
分布式異構(gòu)內(nèi)存池中多客戶端共享讀寫機制的實現(xiàn)原理如圖2 所示.我們在服務(wù)器端維護一個哈希表,其中鍵為唯一值ID,值為內(nèi)存資源的全局地址和內(nèi)存注冊信息.為了實現(xiàn)多客戶端共享讀寫,我們?yōu)榭蛻舳藨?yīng)用提供了函數(shù)接口.當(dāng)客戶端調(diào)用接口申請遠端內(nèi)存資源時,需要提供一個唯一的ID 值.服務(wù)器收到請求后,首先在哈希表中根據(jù)ID 值進行查找.如果沒有查找結(jié)果,則說明該請求是非共享的,即簡單的申請遠程內(nèi)存資源.服務(wù)器會檢查自身的NVM 資源是否足夠分配,并將分配的內(nèi)存注冊信息和生成的全局地址返回給客戶端.同時,服務(wù)器需要將該ID 作為鍵,將該內(nèi)存資源的全局地址和內(nèi)存注冊信息作為值插入到服務(wù)器端的哈希表中.如果根據(jù)ID 值查找到了結(jié)果,說明該請求是對已共享的遠程內(nèi)存資源的訪問,此時無需進行新的NVM 內(nèi)存資源分配,直接將查找到的內(nèi)存資源的全局地址和內(nèi)存注冊信息返回給客戶端即可.
Fig.2 The implementation principle of object sharing mechanism圖2 對象共享機制實現(xiàn)原理
當(dāng)使用RDMA 單邊原語Read/Write 進行操作時,需要使用相應(yīng)的內(nèi)存注冊信息.當(dāng)申請內(nèi)存的時候,由于客戶端在初始節(jié)點就已經(jīng)進行了內(nèi)存的預(yù)申請和分配,客戶端的共享內(nèi)存管理程序直接返回一個地址映射信息,并向在服務(wù)器節(jié)點端標(biāo)記當(dāng)前內(nèi)存已被共享.因此,客戶端節(jié)點獲得同一個NVM 內(nèi)存資源的內(nèi)存注冊信息,從而實現(xiàn)多客戶端共享該遠程內(nèi)存資源.由于共享接口的請求需要由客戶端發(fā)起,并需要服務(wù)器進行處理,因此設(shè)計中采用了RDMA雙邊原語Send/Recv 來進行通信.當(dāng)內(nèi)存資源不夠的時候,客戶端共享內(nèi)存管理程序無法找到空余的地址映射表,直接返回OOM 錯誤,該內(nèi)存申請請求由于超過系統(tǒng)內(nèi)存容量而失敗.
此外,當(dāng)多個客戶端對共享內(nèi)存進行同時寫入操作時可能會出現(xiàn)并發(fā)問題.為了避免這種情況,服務(wù)器的目錄中增加了寫標(biāo)志位.當(dāng)有一個客戶端對共享內(nèi)存進行寫入訪問時,將寫標(biāo)志位置為真,從而阻止其他客戶端同時進行寫入操作,避免系統(tǒng)出現(xiàn)問題.
為了滿足不同應(yīng)用的訪問模式需求,我們采用了一種混合的緩存一致性保證機制.該機制依賴于服務(wù)器和客戶端中目錄信息的設(shè)計,并根據(jù)不同策略采取相應(yīng)的讀寫處理方式.
當(dāng)使用基于目錄實現(xiàn)的緩存一致性保證機制時,在讀取遠程客戶端數(shù)據(jù)時,首先要查詢目錄,并根據(jù)緩存是否臟決定是進行遠程讀取還是讀取緩存.在進行寫操作時,在數(shù)據(jù)寫入服務(wù)器后,需要更新服務(wù)器上相應(yīng)緩存的臟標(biāo)志位.當(dāng)采用基于廣播實現(xiàn)的緩存一致性機制時,可以直接從客戶端的緩存讀取數(shù)據(jù),而在進行寫操作時,寫入服務(wù)器后需要廣播通知其他客戶端更新緩存.我們實現(xiàn)了這2 種機制的混合應(yīng)用,并且客戶端和服務(wù)器共同維護緩存一致性.
混合緩存一致性保證機制的實現(xiàn)依賴于分布式內(nèi)存共享系統(tǒng)中服務(wù)器的目錄和客戶端的緩存設(shè)計.服務(wù)器端的目錄結(jié)構(gòu),其中每個目錄項包括唯一ID、NVM 內(nèi)存注冊信息以及特殊的鏈表節(jié)點.鏈表節(jié)點記錄了緩存該內(nèi)存對象的每個客戶端的信息,包括采用的緩存一致性保證機制、緩存臟位和緩存的DRAM 內(nèi)存注冊信息.客戶端的緩存采用LRU 緩存策略實現(xiàn),并使用雙向哈希鏈表進行管理.哈希表的鍵是全局唯一地址,其值包含緩存的DRAM 信息、緩存采用的一致性保證機制以及讀寫次數(shù)計數(shù)等信息.如果緩存被淘汰,客戶端需要向服務(wù)器發(fā)起請求以更新相應(yīng)的目錄,因此我們采用RDMA Send/Recv進行設(shè)計.
我們實現(xiàn)了客戶端可調(diào)用的上層應(yīng)用讀寫接口,通過這些接口實現(xiàn)了緩存一致性保證機制.首先,客戶端發(fā)起讀請求,該請求被封裝為讀工作請求并交由工作處理器處理.在識別為讀請求后,工作處理器將其交給專門的處理器處理.然后,客戶端根據(jù)LRU緩存策略判斷是否命中緩存.如果未命中,則進行普通的RDMA 讀操作,并將緩存目錄中的臟位設(shè)置為非臟.最后,增加讀計數(shù)并按照LRU 策略更新緩存.如果命中緩存,則判斷目錄中緩存采用的一致性保證策略.如果是廣播機制,則無需進行遠程讀取,直接讀取客戶端緩存即可;如果是目錄機制,則使用RDMA 雙邊原語發(fā)送查詢臟位的請求,并由服務(wù)器進行回應(yīng).當(dāng)緩存非臟時,可以直接在本地客戶端緩存中讀取數(shù)據(jù);當(dāng)緩存為臟時,需要進行遠程RDMA讀取,并進行相應(yīng)的后續(xù)處理.
對于需要修改共享內(nèi)存的客戶端應(yīng)用,可以調(diào)用寫接口.首先,客戶端發(fā)起寫請求,該請求被封裝為寫工作請求并交由工作處理器處理.在識別為寫請求后,工作處理器將其交給專門的處理器處理.然后,調(diào)用RDMA 寫操作進行遠程存儲資源的更新,客戶端發(fā)送請求刷新其他客戶端的緩存.當(dāng)服務(wù)器收到刷新緩存的請求后,根據(jù)ID 找到相應(yīng)的內(nèi)存對象,根據(jù)不同的鏈表節(jié)點采取不同的措施,根據(jù)其緩存一致性保證策略進行處理.如果是廣播策略,服務(wù)器需要調(diào)用RDMA 寫操作更新緩存;如果是目錄策略,只需修改鏈表節(jié)點中的臟位.最后,客戶端在完成寫操作后,增加寫計數(shù)并利用LRU 策略更新緩存.
LRU 緩存更新算法是一種簡單且高效的緩存更新算法,每次將最新訪問的對象放在緩存雙鏈表的頭部,確保對象不被淘汰.在我們的系統(tǒng)中,由各個客戶端進行LRU 緩存更新.由于寫接口設(shè)計中,采用廣播實現(xiàn)的緩存一致性保證機制需要服務(wù)器對遠程緩存進行RDMA 寫操作,因此服務(wù)器端需要記錄客戶端DRAM 緩存的內(nèi)存注冊信息.每次進行緩存更新時,需要通知服務(wù)器有關(guān)新加入緩存和刪除失效緩存的信息.對于新加入的緩存,需要向服務(wù)器發(fā)送緩存的內(nèi)存注冊信息,以在服務(wù)器目錄中添加相應(yīng)的鏈表節(jié)點.對于刪除失效的緩存,需要通知服務(wù)器從鏈表中刪除相應(yīng)的客戶端緩存信息.因此,系統(tǒng)設(shè)計了相應(yīng)的消息類型,并使用RDMA Send/Recv 進行與服務(wù)器的目錄保持一致的更新通信.
經(jīng)過2.1~2.2 節(jié)的設(shè)計,分布式異構(gòu)內(nèi)存池系統(tǒng)已經(jīng)具備了緩存一致性保證機制.但我們需要考慮如何進行緩存一致性保證策略之間的轉(zhuǎn)換.首先,系統(tǒng)需要分析應(yīng)用何時需要何種緩存一致性保證機制.不同應(yīng)用或同一應(yīng)用在不同運行節(jié)點的主要訪問模式是不同的,有的應(yīng)用主要是讀,而有的應(yīng)用主要是寫.
對于目錄實現(xiàn)的緩存一致性保證機制,每次在客戶端進行讀時需要到服務(wù)器查詢目錄的臟位置,而在寫時不需要逐個更新客戶端緩存,只需要修改服務(wù)器目錄的臟位置,因此較為適合寫比較多的訪問模式.對于廣播實現(xiàn)的緩存一致性保證機制,每次在客戶端進行寫時,在進行寫之后需要逐個更新相應(yīng)客戶端的緩存,而在讀時可以直接進行客戶端緩存讀,不需要去遠程查詢服務(wù)器目錄,因此適合讀比較多的訪問模式.綜上所述,系統(tǒng)需要統(tǒng)計每個共享內(nèi)存對象的讀寫次數(shù),從而分析該應(yīng)用的訪問模式是寫主要還是讀主要的.
在客戶端共享對象的緩存目錄中,可以通過讀寫計數(shù)得到一個向量(Wi,Ri),其中i表示某個共享對象,Wi表示該共享對象的寫次數(shù),Ri表示該共享對象的讀次數(shù).通過計算客戶端全部共享對象的平均值同樣可以得到另外一組向量(W*,R*),其中W*表示該客戶端的所有共享對象的寫次數(shù)平均值,R*表示該客戶端的所有共享對象的讀次數(shù)平均值.為了減小個別值的影響,采取縮尾均值法去計算平均值.寫次數(shù)縮尾均值的計算方式如式(1)所示,讀次數(shù)的縮尾均值與寫次數(shù)類似.式(1)中Wnα+1~Wn-nα表示將寫次數(shù)進行從小到大排序后的結(jié)果,α表示縮尾系數(shù),n表示寫次數(shù),其計算方法即去掉的數(shù)據(jù)個數(shù)除以數(shù)據(jù)總個數(shù),縮尾均值即在計算平均值時去掉若干個最大的值和若干個最小的值,最后得到的平均值結(jié)果會減小個別極端數(shù)據(jù)的影響.
根據(jù)讀次數(shù)和寫次數(shù)的向量(Wi,Ri)和(W*,R*)組成的2×2 矩陣,我們采用矩陣分析法來進行應(yīng)用訪問模式的判斷和分類.根據(jù)讀次數(shù)和寫次數(shù)的多少,可以將應(yīng)用的訪問模式分為4 類:
1)當(dāng)Wi 2)當(dāng)Wi 3)當(dāng)Wi>W*但Ri 4)當(dāng)Wi>W*且Ri>R*時,說明應(yīng)用此時處于I/O 密集的階段,應(yīng)用對數(shù)據(jù)對象的讀寫訪問都比較多,此時服務(wù)器的負擔(dān)較重,因此默認(rèn)采取基于目錄的緩存一致性保證機制.該機制下對于過多的讀請求可以由客戶端查詢目錄后進行本地的緩存讀;而對于過多的寫請求,服務(wù)器不用進行過多的廣播刷新,只需要修改服務(wù)器上的目錄信息,從而減輕服務(wù)器的負擔(dān). 綜上所述,利用2×2 矩陣可進行應(yīng)用訪問模式的分析判定,并為不同的數(shù)據(jù)采用不同的緩存一致性保證機制.1)和4)兩種情況,分別代表低訪問和密集訪問的模式,系統(tǒng)在判定后,默認(rèn)保持之前的緩存一致性保證策略.這2 種情況下,2 種緩存一致性保證策略對性能影響不大.對于基于目錄的緩存一致性保證機制和基于廣播的緩存一致性保證機制,其分別適用于寫操作較多和讀操作較多的模式.在低訪問和密集訪問的模式下,這2 種機制各有利弊,因此性能改變不大,默認(rèn)保持之前的緩存一致性保證機制. 緩存一致性保證機制的轉(zhuǎn)換應(yīng)在客戶端進行,但是當(dāng)策略進行轉(zhuǎn)變時需要通知相應(yīng)服務(wù)器,因此需要使用RDMA Send/Recv 來設(shè)計實現(xiàn)相關(guān)功能.利用客戶端的緩存目錄中的讀寫次數(shù)構(gòu)建矩陣,并利用以上分析方法進行計算決策,得到需要轉(zhuǎn)換的緩存一致性策略.如果需要發(fā)送改變,則還需要通知服務(wù)器進行相應(yīng)修改,以保證目錄的一致性.為了保證各個機制的正確性,還需要重新刷新緩存.具體來說,如果從廣播策略變?yōu)槟夸洸呗?,由于廣播策略可保證當(dāng)前客戶端緩存是最新的,因此只需要將服務(wù)器端臟位置更新為非臟即可.如果從目錄策略變?yōu)閺V播策略,由于目錄策略下不能保證客戶端緩存是最新的,因此需要在數(shù)據(jù)寫狀態(tài)為臟的情況下重新刷新其緩存,以確保在廣播策略下的正確性. 本文的所有實驗都在真實的硬件環(huán)境中進行.客戶端緩存模塊使用DRAM 內(nèi)存,而服務(wù)器采用DRAM 和NVM 混合內(nèi)存.在每個服務(wù)器節(jié)點上,NVM和DRAM 都被配置為NUMA 架構(gòu)進行分配.我們在4 臺服務(wù)器上進行性能測試,這些服務(wù)器均配置了NVM 和Infiniband RDMA 網(wǎng)卡.每臺機器的具體硬件配置如表2 所示.NVM 是Intel 公司推出的Optane DCPMM,該存儲器與傳統(tǒng)DRAM 的通道接口一致,可以直接插入主板的內(nèi)存插槽.實驗中的NVM 和DRAM 均被配置為NUMA 架構(gòu),即每個存儲資源和CPU 核心都被分配給不同的節(jié)點.用于測試的服務(wù)器都通過IB 網(wǎng)絡(luò)進行RDMA 通信. Table 2 Server Hardware Configuration表2 服務(wù)器硬件配置 為了測試系統(tǒng)在加入客戶端緩存機制和緩存一致性保證機制后的讀寫性能是否提升,本文設(shè)計了多種微基準(zhǔn)測試來評估系統(tǒng)的性能.微基準(zhǔn)測試包括申請內(nèi)存對象、讀操作、寫操作和釋放內(nèi)存對象等基本操作.我們針對不同的應(yīng)用訪問模式,設(shè)計了9 種包含不同基本操作的微基準(zhǔn)測試,并根據(jù)不同應(yīng)用的訪問程度設(shè)置了不同的對象大小和讀寫比例,如表3 所示. Table 3 Operating Ratios of Nine MicroBenchmarks Test表3 9 種微基準(zhǔn)測試的操作比例 % 首先,我們對實現(xiàn)了緩存一致性保證機制的分布式異構(gòu)內(nèi)存池系統(tǒng)進行了詳盡的性能測試.這些測試包括對比不同緩存一致性保證機制的測試、不同粒度對象的測試、不同讀寫比例負載的測試以及應(yīng)用測試. 1)不同緩存一致性保證機制的性能測試.我們在分布式異構(gòu)內(nèi)存池中實現(xiàn)了客戶端緩存機制和可動態(tài)轉(zhuǎn)換的緩存一致性保證機制.引入緩存機制后,系統(tǒng)的性能理論上會有顯著提升.我們通過對系統(tǒng)性能進行測試來驗證這一點.首先,測試了基于目錄和基于廣播的單一緩存一致性保證機制在系統(tǒng)性能上的差異.接下來,進行了動態(tài)轉(zhuǎn)換的緩存一致性保證機制與現(xiàn)有單一機制的性能對比實驗.在表3 中,對9 種不同讀寫比例的微基準(zhǔn)測試集進行了測試.分別測試了存儲對象大小分別為128 KB,256 KB 和512 KB 的粒度.關(guān)于對象的訪問模型,采用了均勻分布和Zipfian 分布2 種訪問模型進行測試,每組測試都進行了3 次重復(fù)實驗,并取平均值來計算延遲性能的提升百分比. 為了測試不同緩存一致性保證機制對系統(tǒng)性能的影響,我們分別測試了系統(tǒng)在使用基于目錄的緩存一致性保證機制和基于廣播的緩存一致性保證機制時的性能提升效率,本文中分別用DIC 和SNOOP代表2 種機制.圖3 展示了在均勻訪問模式下,系統(tǒng)使用單一緩存一致性保證機制時的性能提升情況,其中包括3 種大小不同的對象.圖3 中縱坐標(biāo)表示使用一致性協(xié)議的系統(tǒng)相對于不使用一致性協(xié)議系統(tǒng)的性能提升比例.所有工作負載都取得了正向性能提升,平均性能提升比例達到了2.087.其中,對于讀操作多于寫操作的負載A,D和E,性能提升比例最大.由于系統(tǒng)在讀取時可以直接從緩存中讀取,而不必去遠程讀取,因此這些讀多寫少的負載可以獲得較大的性能提升.然而,在寫操作時,系統(tǒng)不僅需要寫入遠程節(jié)點,還需要發(fā)送請求來刷新緩存. Fig.3 System performance for workloads under uniform accesses using a single cache consistency mechanism圖3 均勻訪問模式下使用單一緩存一致性保證機制的負載的系統(tǒng)性能 因此,對于寫操作較多的負載如負載B和負載G,由于寫操作較多,讀緩存帶來的性能提升被過多的寫操作削弱,系統(tǒng)性能提升較小.這些寫操作較多的負載在2 種機制下的性能提升比例相差不大,這是因為這2 種機制下都需要進行遠程寫入并返回,并由客戶端發(fā)起緩存刷新請求,因此客戶端的負載運行時間差別不大.此外,對于讀操作多于寫操作的負載如負載A,D和F,使用基于廣播的緩存一致性保證機制帶來的性能提升大于使用基于目錄的緩存一致性保證機制帶來的提升,這與本文設(shè)計部分中所述的機制設(shè)置特點是一致的,即廣播機制更適用于讀操作多于寫操作的負載,而目錄機制更適用于寫操作多于讀操作的負載. 圖4 展示了在Zipfian 訪問模式下,系統(tǒng)使用基于目錄的緩存一致性保證機制和基于廣播的緩存一致性保證機制時的性能提升情況.在Zipfian 訪問模式下,訪問更加集中于某幾個熱點數(shù)據(jù),因此相比于均勻訪問模式,大多數(shù)負載的性能提升比例更大,平均性能提升比例達到了2.395.在均勻訪問模式下,大多數(shù)工作負載會進行一半的遠程讀取和一半的本地緩存讀取,而在Zipfian 訪問模式下,這些負載會進行更多的本地緩存讀取,而其需要更新的緩存數(shù)據(jù)較少,因此性能提升較為顯著.此外,由于系統(tǒng)的客戶端緩存采用了簡單的LRU 緩存而不是熱點緩存,因此在Zipfian 訪問模式下,個別負載如負載B和G的性能提升效果并不理想.這2 個負載都涉及較多的寫操作,它們對于熱數(shù)據(jù)并不敏感;無論是否緩存,對于寫操作都需要進行遠程寫入,導(dǎo)致它們的系統(tǒng)性能提升相對較小,相比均勻訪問模式?jīng)]有顯著差異. Fig.4 System performance of workloads under Zipfian accesses using a single cache consistency mechanism圖4 Zipfian 訪問模式下使用單一緩存一致性保證機制的負載的系統(tǒng)性能 為了測試混合緩存一致性保證機制與不可轉(zhuǎn)換的單一緩存一致性保證機制的性能差異,我們在可動態(tài)轉(zhuǎn)換的緩存一致性保證機制下進行了相關(guān)測試,并將其與使用基于目錄的緩存一致性保證機制的系統(tǒng)以及使用基于廣播的緩存一致性保證機制的系統(tǒng)進行了性能對比,計算了性能提升率.系統(tǒng)中動態(tài)切換時機會影響系統(tǒng)性能.若轉(zhuǎn)換周期較短,會對系統(tǒng)增加更多的判斷和轉(zhuǎn)換的開銷,會降低動態(tài)轉(zhuǎn)換帶來的性能優(yōu)勢;若轉(zhuǎn)換周期較長,則會降低用于轉(zhuǎn)換決策的統(tǒng)計數(shù)據(jù)的時效性,降低轉(zhuǎn)換策略本身性能提升幅度.因此,通過對數(shù)據(jù)集的先驗測試,本文將默認(rèn)的調(diào)整周期設(shè)置為1 000 次共享數(shù)據(jù)的訪存操作.系統(tǒng)每隔1 000 次操作進行1 次緩存一致性保證機制的轉(zhuǎn)換判定.我們用“MIXED”代表可動態(tài)轉(zhuǎn)換的緩存一致性保證策略下的實驗結(jié)果. 與基于目錄機制的系統(tǒng)對比的實驗結(jié)果如圖5所示,可動態(tài)轉(zhuǎn)換的緩存一致性保證機制在所有負載下都取得了更好的性能提升.所有實驗結(jié)果的讀寫性能平均提升了32.3%.在基于目錄機制的緩存一致性保證機制下,系統(tǒng)每次讀取操作都需要進行遠程查詢臟位置或遠程讀取,而在進行機制轉(zhuǎn)換后,系統(tǒng)可以在讀取較多的負載中采用基于廣播的緩存一致性保證機制,從而避免了大量的遠程臟目錄查詢,直接進行本地緩存讀取并返回結(jié)果,因此對于讀取較多、寫入較少的負載,如負載A和負載D,系統(tǒng)的性能提升比例較大.此外,由于我們采用的微基準(zhǔn)測試負載都是連續(xù)地讀取和連續(xù)地寫入操作,因此系統(tǒng)進行緩存一致性保證機制轉(zhuǎn)換的次數(shù)相對較少,僅在調(diào)用接口后進行了幾次機制的轉(zhuǎn)換.因此,對于均勻讀寫的負載,其性能提升程度一般.可以預(yù)測,在真實應(yīng)用中,系統(tǒng)根據(jù)不同的運行時間段選擇更合適的緩存一致性保證機制,將能夠獲得更優(yōu)秀的系統(tǒng)性能. Fig.5 System performance under dynamic conversion mechanism compared with the directory mechanism圖5 相比于目錄機制的動態(tài)轉(zhuǎn)換機制下的系統(tǒng)性能 圖6 展示了可動態(tài)轉(zhuǎn)換的緩存一致性保證機制與基于廣播的緩存一致性保證機制的系統(tǒng)性能對比結(jié)果.我們可以觀察到,在所有負載類型下,可動態(tài)轉(zhuǎn)換機制的系統(tǒng)都表現(xiàn)出比基于廣播機制的系統(tǒng)更好的性能.具體而言,所有結(jié)果的讀寫性能平均提升了31.2%.在基于廣播的緩存一致性保證機制下,寫操作需要刷新所有客戶端的緩存,因此對于寫操作較多的負載,如負載B和負載G,采用可動態(tài)轉(zhuǎn)換的緩存一致性保證機制的系統(tǒng)獲得了更好的性能.此外,對于讀寫均勻的負載,由于這些負載是連續(xù)的讀寫操作,因此系統(tǒng)進行緩存一致性保證機制轉(zhuǎn)換的次數(shù)較少,導(dǎo)致性能提升較小. 綜上所述,相較于未實現(xiàn)客戶端緩存機制和緩存一致性保證機制的系統(tǒng),動態(tài)轉(zhuǎn)換的緩存一致性機制可大幅度提升緩存的性能,尤其對于讀操作較多的負載,系統(tǒng)性能提升更為顯著.與基于目錄的和基于廣播的緩存一致性機制相比,本文實現(xiàn)的可動態(tài)轉(zhuǎn)換的混合緩存一致性保證機制進一步提升了系統(tǒng)性能. 2)對象粒度對性能的影響.為了進一步研究對象粒度對性能的影響,我們進行了基于目錄、基于廣播和可動態(tài)轉(zhuǎn)換的緩存一致性保證機制下不同對象粒度的實驗.本文設(shè)置了從8 KB 到1 MB 共8 個梯度的對象,并對負載A,B和C進行性能測試.實驗結(jié)果如圖7 所示,最上面的3 條結(jié)果是負載A的性能提升比例,中間3 條結(jié)果是負載C的性能提升比例,最下面的3 條結(jié)果是負載B的性能提升比例.負載A是讀操作較多、寫操作較少的負載,負載B是讀操作較少、寫操作較多的負載,負載C是讀操作、寫操作各占一半的負載.可以觀察到,無論采用哪種策略,由于本地緩存讀取速度更快,都帶來了顯著的性能提升.負載A具有最多的讀操作,因此性能提升最為顯著;負載B具有最多的寫操作,因此性能提升較??;對于負載C,其讀寫操作均衡,因此性能提升介于A和B之間. Fig.7 System performance at different object sizes圖7 不同對象粒度下系統(tǒng)性能 對于不同的緩存一致性保證機制,基于廣播的機制提升效果大于基于目錄的機制,這是因為基于目錄的緩存一致性保證機制在讀取時需要進行遠端臟目錄查詢,導(dǎo)致讀操作較慢.然而,對于寫操作,基于目錄的緩存一致性保證機制無需更新大量客戶端緩存,只需修改目錄,從而減輕了服務(wù)器負載.此外,隨著對象粒度逐漸增大,系統(tǒng)的性能提升逐漸減小.這是因為當(dāng)系統(tǒng)對象變大后,本地緩存容量不足,導(dǎo)致本地客戶端緩存失效,從而增加了遠程讀操作的次數(shù),降低了系統(tǒng)的性能提升率. 3)負載的讀寫比例對性能的影響.根據(jù)以上結(jié)果我們初步得出結(jié)論,負載的讀寫比例對系統(tǒng)性能有較大的影響.為了具體研究負載的讀寫比例對系統(tǒng)性能的影響,我們在不同讀寫比例的負載下進行了均勻訪問模式的系統(tǒng)測試.每個實驗負載的讀寫操作總數(shù)為10 萬次,根據(jù)讀寫比例的不同進行了分梯度的測試,涵蓋了從全讀到全寫的情況.同時,對使用基于目錄、基于廣播和可動態(tài)轉(zhuǎn)換的緩存一致性保證機制的系統(tǒng)進行了3 種對象大小的測試. 根據(jù)圖8 可知,隨著讀寫比例中讀的比例下降、寫的比例上升,系統(tǒng)的運行延遲逐漸增大.由于讀操作可以利用本地客戶端緩存,對于讀操作較多的負載,其運行時間較短.然而,本文系統(tǒng)中的寫操作仍需進行遠程寫,因此對于寫操作較多的負載,其運行時間較長.此外,相較于使用基于目錄的緩存一致性保證機制的系統(tǒng),使用基于廣播的緩存一致性保證機制的系統(tǒng)具有較小的運行延遲.這是由于基于廣播的系統(tǒng)在讀操作時減少了1 次遠程目錄查詢操作,因此性能更佳.與單一的緩存一致性保證機制相比,可動態(tài)轉(zhuǎn)換的緩存一致性保證機制取得了更好的性能.通過對比9 組結(jié)果,可以觀察到對象大小越大,系統(tǒng)的運行延遲也越大.這不僅因為大對象的讀寫操作更耗時,還因為大對象可能更快地占用完緩存,從而觸發(fā)緩存淘汰策略,進一步增加系統(tǒng)的運行延遲. Fig.8 System performance under different read/write ratios圖8 不同讀寫比例負載下系統(tǒng)性能 綜上所述,負載的讀寫比例對系統(tǒng)性能有顯著影響.基于廣播的緩存一致性保證機制相較于基于目錄的機制具有更低的運行延遲,而可動態(tài)轉(zhuǎn)換的緩存一致性保證機制在各方面均表現(xiàn)更優(yōu).此外,對象大小的增加導(dǎo)致系統(tǒng)運行延遲增大,既因為大對象的讀寫操作更耗時,又因為大對象更容易觸發(fā)緩存淘汰策略,進而增加系統(tǒng)的運行延遲. 4)真實應(yīng)用的性能測試.以上測試均采用了微基準(zhǔn)測試中的9 種負載.這些微基準(zhǔn)測試中的讀寫操作都是連續(xù)進行的,并且訪問模式較為單一.因此,本文針對PageRank 算法,采用wordassociation-2011數(shù)據(jù)集進行了真實應(yīng)用的測試.該數(shù)據(jù)集包含10 617個節(jié)點和72 172 條邊.實驗測試PageRank 算法達到收斂所需的運行時間.由圖9 可以觀察到,實現(xiàn)了客戶端緩存的系統(tǒng)性能遠高于無緩存的系統(tǒng).與未實現(xiàn)緩存的系統(tǒng)相比,基于目錄的緩存一致性保證機制和基于廣播的緩存一致性保證機制分別提升了PageRank 應(yīng)用性能的1.7 倍和2.6 倍.而可動態(tài)轉(zhuǎn)換的混合緩存一致性保證機制相較于單一的目錄機制和廣播機制,分別提升了72.9%和31.6%的性能.由此可見,所提出的混合緩存一致性保證機制在真實的應(yīng)用場景也取得了顯著的性能提升,具有很好的適用性. Fig.9 Running time of PageRank圖9 PageRank 應(yīng)用的運行時間 我們在實現(xiàn)緩存一致性保證機制的分布式異構(gòu)內(nèi)存池中進行了擴展性測試.實驗分別運行了1~16個客戶端,并測試了負載A、負載B和負載C在這些情況下的運行時間.實驗中對象粒度大小設(shè)置為128 KB,對象訪問模式為均勻訪問,并采用了可動態(tài)轉(zhuǎn)換的緩存一致性保證機制. 如圖10 所示,隨著分布式異構(gòu)內(nèi)存池系統(tǒng)中共享客戶端數(shù)量的增加,系統(tǒng)性能逐漸下降,運行延遲不斷增加.然而,系統(tǒng)的擴展性仍然較好.特別是對于負載A,隨著共享客戶端數(shù)量的增加,運行延遲的增加并不明顯.這是因為負載A主要是讀操作,每個客戶端都可以讀取自己本地的客戶端緩存,各個客戶端之間沒有性能影響.對于負載B,該負載主要由寫操作組成,隨著客戶端數(shù)量的增加,運行延遲明顯上升.這是因為對于寫操作,每次寫操作都需要客戶端向服務(wù)器發(fā)送緩存刷新請求,服務(wù)器會將最新的緩存數(shù)據(jù)發(fā)送給客戶端,從而增加了服務(wù)器的負擔(dān).此外,由于實驗資源的限制,一個實測機器在實驗中運行了多個客戶端程序,這也對性能產(chǎn)生了影響,進而導(dǎo)致延遲的增加. Fig.10 System scalability test圖10 系統(tǒng)的擴展性測試 綜上所述,在實現(xiàn)了客戶端緩存機制和多客戶端共享機制后,系統(tǒng)的多客戶端擴展性較好.然而,對于寫操作較多的負載,擴展性仍有改善的空間. 本文提出了一種可動態(tài)轉(zhuǎn)換的分布式異構(gòu)內(nèi)存池中的緩存一致性保證機制以提高效率.在該機制中,通過多客戶端共享機制實現(xiàn)多客戶端對遠端存儲對象的讀寫操作.采用基于目錄和基于廣播相結(jié)合的混合緩存一致性保證機制,并根據(jù)緩存數(shù)據(jù)塊的訪問模式動態(tài)轉(zhuǎn)換使用不同的機制.通過矩陣分析判定每個數(shù)據(jù)塊的訪問模式,并選擇適合的緩存一致性保證策略:對于讀多寫少的數(shù)據(jù)塊,選擇基于廣播的機制;對于寫多讀少的數(shù)據(jù)塊,選擇基于目錄的機制.這種方式提高了數(shù)據(jù)同步效率,進一步提升了使用緩存的性能優(yōu)勢.實驗結(jié)果表明,相較于使用單一基于目錄或基于廣播的緩存一致性保證機制的分布式異構(gòu)內(nèi)存池系統(tǒng),采用可動態(tài)轉(zhuǎn)換的機制分別提升了32.31%和31.20%的系統(tǒng)平均讀寫性能.此外,在多客戶端環(huán)境下,可動態(tài)轉(zhuǎn)換的緩存一致性保證機制展現(xiàn)出良好的擴展性能. 作者貢獻聲明:段卓輝和劉海坤提出了設(shè)計思路和實現(xiàn)方案;趙金瑋和劉一航負責(zé)實現(xiàn)并撰寫論文;廖小飛和金海提出指導(dǎo)意見并修改論文.3 實驗測試與結(jié)果分析
3.1 實驗環(huán)境
3.2 分布式異構(gòu)內(nèi)存池性能測試
3.3 分布式異構(gòu)內(nèi)存池擴展性測試
4 總結(jié)