SC'21:分布式內存池數據遠端持久化機制研究——內存計算系統系列成果之九
近年來,持久性內存和遠端直接內存訪問(RDMA)技術在數據中心環境中得到了廣泛的應用。然而,持久RDMA操作和RDMA更新的可見性在分布式持久內存系統中還沒有得到充分的研究。由于RDMA網絡接口卡中存在易失性緩存,持久性內存和RDMA的結合對保證遠端數據持久性帶來了重大挑戰。為此,我們對現有的基于RDMA的RPC通信系統及其性能差異進行了比較和分析,在此基礎上設計了幾種硬件支持的RDMA刷新原語。這些刷新原語可將易失性緩存中的數據刷新到持久存儲器中,并通過ACK來告知客戶端數據已被持久化。我們在上述刷新原語的基礎上提出了持久RPC通信系統,并提供了快速故障恢復能力。基于真實NVM硬件的實驗結果表明,相比現有研究,所提出的RDMA刷新原語可以將RPC系統吞吐量提高90%,并減少49%的第99百分位尾延遲。此外,實驗研究結果也為基于RDMA的分布式持久內存系統的設計提供了重要的指導意見。
該成果“Hardware-supported Remote Persistence for Distributed Persistent Memory” 發表在CCF A類國際會議The International Conference for High Performance Computing, Networking, Storage, and Analysis (SC) 2021上。該會議是高性能計算領域的頂級國際會議,本次會議錄用率為23.6%,主要關注高性能計算體系機構、系統軟件、算法和應用等相關領域的最新研究成果。

- 論文鏈接:
- https://dl.acm.org/doi/pdf/10.1145/3458817.3476194
摘要
隨著新型持久性內存(PM)和遠端直接內存訪問(RDMA)技術的蓬勃發展,持久內存(PM)和具有低傳輸延遲的RDMA在數據中心環境中得到了廣泛的應用。由于RDMA網絡接口卡(RNIC)中存在易失性緩存,系統故障可能造成數據不一致。然而,RDMA數據更新的可見性在分布式持久內存系統中還沒有得到充分的研究。如何在融合PM和RDMA的分布式持久內存系統中高效地保證遠端數據持久化成為一個重大挑戰。盡管少數基于遠端過程調用(RPC)的研究工作通過多個RDMA操作的組合來支持遠端數據持久化,但在這些基于軟件的持久化傳輸解決方案中,遠端CPU需要參與其中,并且數據傳輸持久化對發送端的可見性被滯后,進而導致傳輸時延增加。
為了避免現有RPC設計的不足,我們設計了持久RPC系統,利用多種硬件支持的RDMA Flush刷新原語將RNIC易失性緩存中的數據刷新到持久區域中。持久RPC系統通過批處理優化以及并發傳輸已確認持久化的RPC請求,讓復雜的數據處理過程和持久傳輸過程解耦合。此外,持久RPC系統在接收端構建持久緩沖區來存儲數據處理請求,并結合RDMA連接信息組成重做日志(redo log)以提供失效恢復特性,多種原語實現方式還可以滿足各類系統環境和應用設置的需求。我們在實驗中對基于RDMA 的RPC進行了深入的分析和測試,結果揭示了RPC通信設計對傳輸性能的影響。在配備Intel Optane DCPMM和InfiniBand網絡的真實測試環境中,基于RDMA Flush原語的持久RPC與現有RPC通信設計的對比能夠更加真實地反映持久RPC設計的性能優勢。
實驗結果表明,基于RDMA Flush原語的持久RPC相比現有RPC系統可提高90%的吞吐率,減少49%的第99百分位傳輸延遲。源自實驗結果的研究分析也為基于RDMA分布式持久內存系統的設計提供了重要的指導建議。
背景與動機

圖1 基于RDMA的持久內存系統數據傳輸路徑
持久性內存和遠端直接內存訪問RDMA技術在數據中心和高性能計算環境中得到了廣泛的應用。在支持RDMA的PM系統中,發送方需要知道數據在遠端PM中持久化的時間,這對于分布式共享PM系統的并發控制尤為重要。由于RDMA網絡接口卡中存在易失性緩存,持久內存和RDMA的結合對保證遠端數據持久化提出了重大挑戰,如圖1所示。現有許多研究使用RPC來優化RDMA傳輸。RPC通常使用一組RDMA原語以較少的RTT執行復雜的任務。大多數RPC需要遠端服務器的CPU來處理寫入的數據。發送方必須等待來自遠端CPU的完成事件。盡管RPC設計的主要目標不是保證數據持久化,但它們天然支持持久的RDMA寫入。RPC完成后,發送方可以驗證數據是否已由接收方持久化。但是,昂貴的RPC處理、RDMA網絡和PCIe操作都是處于客戶端應用程序的關鍵路徑上。與單個RDMA原語相比,它們通常會顯著增加端到端延遲。
針對這一問題,我們根據不同的RDMA原語和傳輸模式對現有基于RDMA的DSM系統進行分類分析,進一步研究現有RPC系統中的持久RDMA寫入機制。由于RDMA RC模式確保了可靠的數據傳輸,因此它有可能在遠端服務器CPU無感的情況下實現持久的RDMA寫入。相反,RDMA UC/UD模式必須依賴遠端服務器的CPU以驗證數據持久化。基于上述發現,我們設計了硬件支持的RDMA刷新原語。這些刷新原語將易失性緩存中的數據刷到持久存儲器中。然而,應用環境對刷新原語的需求各不相同,單一的刷新原語無法滿足各類環境對網絡傳輸性能的需求。此外,故障可恢復對于企業級應用程序非常重要,僅僅使用持久刷新原語無法為傳輸提供故障恢復的能力,如何結合持久化刷新原語設計出故障可恢復的高效傳輸過程也是一個挑戰。
設計與實現
我們設計并開發了基于RDMA的分布式內存遠端持久化機制。為了滿足各類環境中的應用需求,我們從雙邊原語(RDMA Send)、單邊原語(RDMA Write)的特性以及原語發起方這兩個維度設計了多種刷新原語。不同的原語種類在不同工作負載下展示出各有優勢的性能。我們利用重做日志來實現不完整RPC的快速恢復,而無需從客戶端重新發送數據。由于持久的RPC將數據持久化與RPC處理分離,因此遠端數據持久化對應用程序來說比傳統的RPC要早得多。這為通過重疊RDMA傳輸和RPC處理來提高應用程序的性能提供了巨大的機會。

圖2 RDMA Flush持久原語設計圖
RDMA Flush持久原語設計:所提出的RDMA刷新原語可以被分為兩類:發送端主動發起的和接收端主動發起的刷新原語,如圖2所示。發送端主動發起的RDMA Flush原語(SFlush及WFlush)由發送端在發起RDMA數據傳輸之后再發出,用于確認所傳輸數據的持久化。接收端發起的RDMA Flush原語 (RFlush) 在接收到數據寫入之后,由接收端主動發出,它可以保證數據寫入PM并通知發送端持久傳輸完成。
1)發送端主動發起的RDMA刷新原語。發送端主動發起的RDMA Flush刷新原語是根據RDMA和非易失性存儲器的硬件特性設計的。基于單邊RDMA原語的數據傳輸方式繞過操作系統內核,不會喚醒遠端服務器的CPU。同時,未來的智能RNIC有可能直接將所傳輸的數據從RNIC上易失性緩存刷新到持久內存中。因此,可以在不喚醒遠端CPU的情況下實現持久的基于RDMA write或者send原語的數據傳輸。值得注意的是,發送端主動發起的RDMA Flush刷新原語只能用于在RDMA RC模式中,因為RDMA刷新原語必須等待來自遠端RNIC的確認消息才能確保刷新操作完成,即持久化傳輸完畢。
2)接收端主動發起的RDMA刷新原語。與發送端發起的RDMA Flush原語不同,接收端主動發起的RDMA Flush原語是由接收端的RDMA RNIC負責來將接收到的數據刷新到持久內存區域,此刷新過程中不需要喚醒接收端的CPU。然而,由于當前的RNIC硬件并不支持主動的數據刷新操作,本工作的實驗仍然依靠接收端CPU參與來模擬RDMA RFlush原語。接收端的CPU對消息緩沖區進行輪詢,以感知到新接收的數據訪問請求操作,并發出RDMA RFlush原語來將接收到的數據請求刷到持久內存中。一旦數據被刷新,接收端會立即通知發送端數據持久化完成。

圖3 基于RDMA Flush的持久RPC通信過程圖
持久RPC設計:與現有的RPC通信設計不同,持久RPC可以保證當發送端收到RPC中RDMA Flush原語的完成確認消息ACK后,接收端的持久區域中就會存儲接收到的數據。因此,接收端可以利用已經持久存儲的數據進行RPC處理,之后將處理結果返回給發送端。圖3顯示了各類持久RPC的通信過程以及使用的原語組合方式。
當接收端的RNIC接收到RDMA請求時,數據包被緩存在易失性RNIC緩沖區中,并會被動的等待DMA引擎將其刷出到持久請求緩沖區,如圖4所示。持久請求緩沖區本質是存儲在持久內存上的一個環形緩沖區,其中存放著多個包含RPC操作符和數據的RPC處理請求條目。為了保證RPC請求的傳輸完整性,數據總是被存儲在持久RPC請求緩沖區中的RPC操作符之前。接收端的CPU會根據RPC操作符等信息來判斷所接受的RPC請求是否完整有效。一旦RPC數據處理過程完畢,相應的RPC請求條目就會從持久環形緩沖區中刪除。持久RPC利用RDMA Flush原語將數據持久化與復雜的RPC處理解耦合,因此基于持久RPC的發送端將比基于傳統RPC能更早地知道所傳輸數據請求已經完成持久化存儲。當請求為全寫操作時,利用已經持久存儲在接收端的請求數據和相應的請求處理機制,發送端可以繼續發起其他RPC請求,而無需等待仍在處理狀態的RPC的完成消息。即使后續發起的RPC請求訪問的數據與之前未處理完成RPC一樣,后續請求也會在持久存儲區域中排隊,然后按照先進先出順序依次被接收端處理。

圖4 持久內存數據服務器端RPC處理流程
我們在真實RDMA高速網絡和Intel Optane DIMM硬件平臺上實現了上述基于RDMA分布式內存遠端持久化機制,采用多種負載的微測試和YCSB、PageRank等應用負載進行試驗。結果表明,基于RDMA Flush原語的持久RPC相比現有RPC系統可提高90%的吞吐率,減少49%的第99百分位傳輸延遲。
詳細內容請參見:
Zhuohui Duan, Haodi Lu, Haikun Liu, Xiaofei Liao, Hai Jin, Yu Zhang, Song Wu. 2021. Hardware-Supported Remote Persistence for Distributed Persistent Memory. In Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis (SC'21), November 14–19, 2021, St. Louis, MO, USA. ACM, New York, NY, USA, 14 pages. https://doi.org/10.1145/3458817.34 76194
往期 · 回顧







