|
在當今這個數(shù)據(jù)爆炸的時代,數(shù)據(jù)的高效傳輸和處理成為了各個領域的關(guān)鍵需求。 無論是大規(guī)模的科學計算、海量數(shù)據(jù)的存儲與分析,還是實時性要求極高的金融交易和人工智能訓練,傳統(tǒng)的網(wǎng)絡通信技術(shù)在面對這些挑戰(zhàn)時,都顯得有些力不從心。 而今天,我們要一起探索的RDMA 技術(shù),就像是一把神奇的鑰匙,有望為我們打開高效網(wǎng)絡通信的新大門,讓數(shù)據(jù)傳輸變得更加快速、高效和低延遲。 1. RDMA簡介1.1. RDMA 是何方神圣?RDMA,全稱遠程直接數(shù)據(jù)存?。?/span>Remote Direct Memory Access),是一種創(chuàng)新性的網(wǎng)絡通信技術(shù)。 在傳統(tǒng)網(wǎng)絡通信模式下,數(shù)據(jù)傳輸往往需要經(jīng)過操作系統(tǒng)及多層軟件協(xié)議棧的處理,這會導致大量的 CPU 資源被占用,數(shù)據(jù)傳輸延遲較高。而 RDMA 技術(shù)的出現(xiàn),旨在解決這些問題,它能夠讓計算機直接訪問遠程計算機的內(nèi)存,而無需在本地和遠程計算機之間進行繁瑣的數(shù)據(jù)復制,從而顯著降低數(shù)據(jù)傳輸?shù)难舆t,提高數(shù)據(jù)處理效率,這使得它在現(xiàn)代網(wǎng)絡通信中占據(jù)著至關(guān)重要的地位,尤其在對網(wǎng)絡性能要求極高的領域,如:高性能計算(HPC)、數(shù)據(jù)中心、云計算等,發(fā)揮著不可或缺的作用。 1.2. 技術(shù)背景1.2.1. 傳統(tǒng)網(wǎng)絡通信的困境在深入探討 RDMA 技術(shù)之前,我們先來了解一下傳統(tǒng)網(wǎng)絡通信存在的問題。以常見的 TCP/IP 通信模式為例,當數(shù)據(jù)在網(wǎng)絡中傳輸時,需要經(jīng)過操作系統(tǒng)內(nèi)核以及多層軟件協(xié)議棧的處理。這一過程會涉及到多次的數(shù)據(jù)拷貝和上下文切換,從而導致較高的延遲和大量的CPU 資源消耗。 具體來說,當發(fā)送端應用程序要發(fā)送數(shù)據(jù)時,數(shù)據(jù)首先會從用戶空間的緩沖區(qū)拷貝到內(nèi)核空間的緩沖區(qū),然后經(jīng)過協(xié)議棧的封裝,再通過網(wǎng)卡發(fā)送出去。在接收端,數(shù)據(jù)則需要從網(wǎng)卡接收,經(jīng)過協(xié)議棧的解封裝,再從內(nèi)核空間拷貝到用戶空間的緩沖區(qū),以供應用程序使用。 這些數(shù)據(jù)拷貝和上下文切換操作不僅占用了寶貴的 CPU 時間,還使得數(shù)據(jù)傳輸?shù)难舆t難以降低,尤其是在處理大量小數(shù)據(jù)塊的傳輸或者對實時性要求較高的應用場景時,傳統(tǒng)網(wǎng)絡通信的這些問題就顯得更加突出,嚴重影響了系統(tǒng)的整體性能和響應速度。 傳統(tǒng)的 TCP/IP 網(wǎng)絡通信,數(shù)據(jù)需要通過用戶空間發(fā)送到遠程機器的用戶空間,在這個過程中需要經(jīng)歷若干次內(nèi)存拷貝:
如上圖,在傳統(tǒng)模式下,兩臺服務器上的應用之間傳輸數(shù)據(jù),過程是這樣的: 1. 首先要把數(shù)據(jù)從應用緩存拷貝到Kernel中的TCP協(xié)議棧緩存; 2. 然后再拷貝到驅(qū)動層; 3. 最后拷貝到網(wǎng)卡緩存。 多次內(nèi)存拷貝需要CPU多次介入,導致處理延時大,達到數(shù)十微秒。同時整個過程中CPU過多參與,大量消耗CPU性能,影響正常的數(shù)據(jù)計算。 1.2.2. TCP/IP存在的問題傳統(tǒng)TCP/IP通信存在的主要問題就是I/O瓶頸問題。在高速網(wǎng)絡環(huán)境下與網(wǎng)絡I/O相關(guān)的主機處理的高開銷(數(shù)據(jù)移動操作和復制操作)限制了機器之間的傳輸帶寬。 具體來說,傳統(tǒng)的TCP/IP網(wǎng)絡通信是通過內(nèi)核發(fā)送消息。通過內(nèi)核來傳輸消息這種機制會導致性能低和靈活性差。 l 性能低的主要原因是: 由于網(wǎng)絡通信通過 l 靈活性差的原因是: 是因為網(wǎng)絡通信協(xié)議在 2. RDMA技術(shù)的核心原理2.1. RDMA原理概述
RDMA (繞過CPU,數(shù)據(jù)直接'傳’到對端內(nèi)存)為了消除傳統(tǒng)網(wǎng)絡通信帶給計算任務的瓶頸,我們希望更快和更輕量級的網(wǎng)絡通信,由此提出了RDMA技術(shù)。 RDMA利用 Kernel Bypass 和 Zero Copy技術(shù)提供了低延遲的特性,同時減少了CPU占用,減少了內(nèi)存帶寬瓶頸,提供了很高的帶寬利用率。 RDMA提供了給基于 IO 的通道,這種通道允許一個應用程序通過RDMA設備對遠程的虛擬內(nèi)存進行直接的讀寫。 2.2. RDMA 整體框架架構(gòu)下面是 RDMA 整體框架架構(gòu)圖,從圖中可以看出,RDMA 提供了一系列 Verbs 接口,可在應用程序用戶空間,操作RDMA硬件。 RDMA繞過內(nèi)核直接從用戶空間訪問RDMA 網(wǎng)卡。RNIC(RDMA 網(wǎng)卡,RNIC(NIC = Network Interface Card ,網(wǎng)絡接口卡、網(wǎng)卡,RNIC即 RDMA Network Interface Card)中包括 Cached Page Table Entry,用來將虛擬頁面映射到相應的物理頁面。
2.3. RDMA 技術(shù)有以下幾個特點:2.3.1. CPU Offload:無需CPU干預,應用程序可以訪問遠程主機內(nèi)存而不消耗遠程主機中的任何CPU。遠程主機內(nèi)存能夠被讀取而不需要遠程主機上的進程(或CPU)參與。遠程主機的CPU的緩存(cache)不會被訪問的內(nèi)存內(nèi)容所填充。 2.3.2. Kernel Bypass:RDMA 提供一個專有的 Verbsinterface 而不是傳統(tǒng)的TCP/IP Socket interface。應用程序可以直接在用戶態(tài)執(zhí)行數(shù)據(jù)傳輸,不需要在內(nèi)核態(tài)與用戶態(tài)之間做上下文切換。 2.3.3. Zero Copy:每個應用程序都能直接訪問集群中的設備的虛擬內(nèi)存,這意味著應用程序能夠直接執(zhí)行數(shù)據(jù)傳輸,在不涉及到網(wǎng)絡軟件棧的情況下,數(shù)據(jù)能夠被直接發(fā)送到緩沖區(qū)或者能夠直接從緩沖區(qū)里接收,而不需要被復制到網(wǎng)絡層。 2.4. RDMA機制剖析2.4.1. 直接內(nèi)存訪問機制RDMA 的核心在于其直接內(nèi)存訪問機制。在傳統(tǒng)的網(wǎng)絡通信中,數(shù)據(jù)傳輸需要CPU 的深度參與,例如數(shù)據(jù)從應用程序緩沖區(qū)拷貝到內(nèi)核緩沖區(qū),再通過網(wǎng)絡協(xié)議棧進行封裝和傳輸,接收端則需要逆向操作,將數(shù)據(jù)從內(nèi)核緩沖區(qū)拷貝到應用程序緩沖區(qū),整個過程涉及多次數(shù)據(jù)拷貝和 CPU 上下文切換,效率較低。 而 RDMA 允許計算機直接存取其他計算機的內(nèi)存,繞過了處理器的繁瑣處理過程,數(shù)據(jù)傳輸?shù)拇蟛糠止ぷ饔捎布韴?zhí)行,直接在遠程系統(tǒng)的內(nèi)存之間進行讀寫操作,極大地提高了數(shù)據(jù)傳輸?shù)男屎退俣龋瑴p少了 CPU 的負擔,使得系統(tǒng)能夠?qū)⒏嗟馁Y源用于實際的數(shù)據(jù)處理任務,從而提升整體性能。 2.4.2. 零拷貝與內(nèi)核旁路零拷貝技術(shù)是 RDMA 的另一大關(guān)鍵特性。在傳統(tǒng)通信模式下,數(shù)據(jù)在傳輸過程中需要在不同的內(nèi)存區(qū)域之間進行多次拷貝,例如從用戶空間拷貝到內(nèi)核空間,再從內(nèi)核空間拷貝到網(wǎng)絡設備緩沖區(qū)等,這些拷貝操作不僅消耗 CPU 資源,還會增加數(shù)據(jù)傳輸?shù)难舆t。而 RDMA 實現(xiàn)了零拷貝,使得數(shù)據(jù)能夠直接在應用程序的緩沖區(qū)與網(wǎng)絡之間進行傳輸,無需中間的拷貝環(huán)節(jié),大大減少了數(shù)據(jù)傳輸?shù)拈_銷和延遲。 內(nèi)核旁路也是 RDMA 提升性能的重要手段。在傳統(tǒng)網(wǎng)絡通信中,應用程序與網(wǎng)絡設備之間的通信需要經(jīng)過操作系統(tǒng)內(nèi)核的干預,這會導致上下文切換和系統(tǒng)調(diào)用的開銷。而 RDMA 允許應用程序在用戶態(tài)直接與網(wǎng)卡進行交互,避免了內(nèi)核態(tài)與用戶態(tài)之間的上下文切換,進一步降低了 CPU 的負擔,提高了數(shù)據(jù)傳輸?shù)男屎晚憫俣?。例如,在一些對實時性要求極高的金融交易系統(tǒng)中,RDMA 的零拷貝和內(nèi)核旁路技術(shù)能夠確保交易數(shù)據(jù)的快速傳輸和處理,減少交易延遲,提高交易效率。 2.4.3. RDMA通信協(xié)議目前,有三種支持RDMA的通信技術(shù): InfiniBand(IB): 基于InfiniBand 架構(gòu)的 RDMA技術(shù),需要專用的 IB 網(wǎng)卡和 IB 交換機。從性能上,很明顯Infiniband網(wǎng)絡最好,但網(wǎng)卡和交換機是價格也很高。 RoCE:即RDMA over Ethernet(RoCE), 基于以太網(wǎng)的 RDMA 技術(shù),也是由 IBTA 提出。RoCE支持在標準以太網(wǎng)基礎設施上使用RDMA技術(shù),但是需要交換機支持無損以太網(wǎng)傳輸,只不過網(wǎng)卡必須是支持RoCE的特殊的NIC。 iWARP:Internet Wide Area RDMA Protocal,基于 TCP/IP 協(xié)議的 RDMA 技術(shù)(在現(xiàn)有TCP/IP協(xié)議?;A上實現(xiàn)RDMA技術(shù),在TCP協(xié)議上增加一層DDP),由 IETF 標 準定義。iWARP 支持在標準以太網(wǎng)基礎設施上使用 RDMA 技術(shù),而不需要交換機支持無損以太網(wǎng)傳輸,但服務器需要使用支持iWARP的網(wǎng)卡。與此同時,受 TCP 影響,性能稍差。 這三種技術(shù)都可以使用同一套API來使用,但它們有著不同的物理層和鏈路層;需要注意的是,上述幾種協(xié)議都需要專門的硬件(網(wǎng)卡)支持。 2.4.3.1.InfiniBandInfiniBand(IB)是一種服務器和存儲器的互聯(lián)技術(shù),它具有高速、低延遲、低CPU負載、高效率和可擴展的特性。 InfiniBand的關(guān)鍵特性之一是它天然地支持遠程直接內(nèi)存訪問(RDMA)。InfiniBand能夠讓服務器與服務器之間、服務器與存儲設備之間的數(shù)據(jù)傳輸不需要主機CPU的參與。 InfiniBand使用I/O通道進行數(shù)據(jù)傳輸,每個I/O通道提供虛擬的NIC或HCA語義。InfiniBand提供了多種技術(shù)方案,每個端口的速度可以有10GB/s、40GB/s、56GB/s、100GB/s,截止目前已經(jīng)達到了200GB/s。InfiniBand使用同軸電纜和光纖進行連接。 2.4.3.2.RoCERDMA首先從InfiniBand規(guī)范和產(chǎn)品里引入工業(yè)界,但是目前在企業(yè)界部署著大量基于以太網(wǎng)的產(chǎn)品,因此IBTA規(guī)范組織又定義了一套字符規(guī)范,使得RDMA不僅可以在infiniBand網(wǎng)絡上運行,同時也可以在以太網(wǎng)上運行。 RoCE是基于以太網(wǎng)(Ethernet)的RDMA技術(shù)標準,它也是由IBTA組織指定的。 RoCE為以太網(wǎng)提供了RDMA語義,并不需要復雜低效的TCP傳輸(IWARP需要)。 RoCE是現(xiàn)在最有效的以太網(wǎng)低延遲方案。它消耗很少的CPU負載,在數(shù)據(jù)中心橋接以太網(wǎng)中利用優(yōu)先流控制(PFC)來達到網(wǎng)絡的無損連接。 RoCE 有兩個版本,RoCE v1是一種鏈路層協(xié)議,允許在同一個廣播域下的任意兩臺主機直接訪問。RoCE v2是一種Internet層協(xié)議,即可以實現(xiàn)路由功能。 雖然RoCE協(xié)議這些好處都是基于融合以太網(wǎng)的特性,但是RoCE協(xié)議也可以使用在傳統(tǒng)以太網(wǎng)網(wǎng)絡或者非融合以太網(wǎng)絡中。 2.4.3.3.iWARP這是一種基于 TCP 的RDMA 網(wǎng)絡協(xié)議,它利用了 TCP 的可靠性來實現(xiàn)遠程內(nèi)存訪問,能夠在現(xiàn)有的 TCP/IP 網(wǎng)絡基礎上部署 RDMA 技術(shù),具有良好的兼容性和廣泛的適用性。 然而,由于 TCP 協(xié)議本身的一些特性,如在大型組網(wǎng)情況下,大量的 TCP 連接會占用較多的內(nèi)存資源,對系統(tǒng)規(guī)格要求相對較高。不過,在一些對網(wǎng)絡兼容性要求較高,且數(shù)據(jù)傳輸量相對較小、對延遲不太敏感的場景中,iWARP 協(xié)議仍然具有一定的優(yōu)勢,例如:一些企業(yè)內(nèi)部的小型網(wǎng)絡環(huán)境或者對成本控制較為嚴格的場景。 3. RDMA編程詳解3.1. 傳輸操作RDMA有兩種基本操作,包括Memory verbs和Messaging verbs。 3.1.1. Memory verbs:包括read、write和atomic操作。不管是 RDMA 讀還是 RDMA 寫,遠程主機都不會意識到操作正在執(zhí)行(除了權(quán)限和相關(guān)資源的準備操作)。 3.1.2. RDMA Read:從遠程主機讀取部分內(nèi)存。調(diào)用者指定遠程虛擬地址,像本地內(nèi)存地址一樣用來拷貝。 在執(zhí)行 RDMA 讀操作之前,遠程主機必須提供適當?shù)臋?quán)限來訪問它的內(nèi)存。一旦權(quán)限設置完成,RDMA 讀操作就可以在對遠程主機沒有任何通知的條件下執(zhí)行。 3.1.3. RDMA Write:與RDMA Read類似,只是數(shù)據(jù)寫到遠端主機中。RDMA寫操作在執(zhí)行時不通知遠程主機。 然而帶即時數(shù)的RDMA寫操作會將即時數(shù)通知給遠程主機。 3.1.4. RDMA Atomic:包括:原子取、原子加、原子比較和原子交換,屬于RDMA原子操作的擴展。 3.2. Messaging verbs:包括send和receive操作。 3.2.1. RDMA Send:發(fā)送操作允許你把數(shù)據(jù)發(fā)送到遠程 QP 的接收隊列里。接收端必須已經(jīng)事先注冊好了用來接收數(shù)據(jù)的緩沖區(qū)。 發(fā)送者無法控制數(shù)據(jù)在遠程主機中的放置位置??蛇x擇是否使用即時數(shù),一個4位的即時數(shù)可以和數(shù)據(jù)緩沖一起被傳送。這個即時數(shù)發(fā)送到接收端是作為接收的通知,不包含在數(shù)據(jù)緩沖之中。 3.2.2. RDMA Receive:這是與發(fā)送操作相對應的操作。接收主機被告知接收到數(shù)據(jù)緩沖,還可能附帶一個即時數(shù)。接收端應用程序負責接收緩沖區(qū)的維護和發(fā)布。 3.3. 傳輸模式按照“連接”和“可靠”兩個標準,可以劃分出四種不同的傳輸模式: 3.3.1. 可靠連接(RC):一個QP只和另一個QP相連,消息通過一個QP的發(fā)送隊列可靠地傳輸?shù)搅硪粋€QP的接收隊列。 數(shù)據(jù)包按序交付,RC連接很類似于TCP連接。 3.3.2. 不可靠連接(UC):一個QP只和另一個QP相連,連接是不可靠的,所以數(shù)據(jù)包可能有丟失。 傳輸層出錯的消息不會進行重傳,錯誤處理必須由高層的協(xié)議來進行。 3.3.3. 不可靠數(shù)據(jù)報(UD):一個 QP 可以和其它任意的 UD QP 進行數(shù)據(jù)傳輸和單包數(shù)據(jù)的接收。 不保證按序性和交付性。交付的數(shù)據(jù)包可能被接收端丟棄。 支持多播消息(一對多)。UD連接很類似于UDP連接。 3.4. RDMA的編程接口RDMA 的編程接口主要包括: Verbs API 和 RDMA CM(Connection Manager)API 等,其中:Verbs API 提供了一套完整的 RDMA 操作函數(shù),是實現(xiàn) RDMA 功能的關(guān)鍵所在。 在使用 Verbs API 進行編程時,首先,需要進行設備查詢和初始化操作,例如使用ibv_get_device_list函數(shù)獲取系統(tǒng)中的 RDMA 設備列表。然后,選擇合適的設備并通過ibv_open_device函數(shù)打開設備,獲取設備上下文(ibv_context)。這一步是后續(xù)所有操作的基礎,只有正確地獲取并初始化設備,才能進行后續(xù)的內(nèi)存注冊、隊列對創(chuàng)建等操作。 內(nèi)存注冊是通過ibv_reg_mr函數(shù)來實現(xiàn)的,它將內(nèi)存塊固定(防止被交換出)并返回一個包含uint32_t鍵(key)的ibv_mr結(jié)構(gòu)體指針,這個key允許遠程訪問注冊的內(nèi)存,同時該結(jié)構(gòu)體還包含了內(nèi)存區(qū)域的上下文(context)、地址(addr)、長度(length)等信息,這些信息在后續(xù)的數(shù)據(jù)傳輸操作中起著重要作用。 隊列對(Queue Pair)的創(chuàng)建和管理也是使用 Verbs API 的重要部分。首先,需要使用ibv_alloc_pd函數(shù)分配一個保護域(Protection Domain),然后通過ibv_create_cq函數(shù)創(chuàng)建完成隊列(Completion Queue),并使用ibv_create_qp函數(shù)創(chuàng)建隊列對,包括:發(fā)送隊列(Send Queue) 和 接收隊列(Receive Queue)。在創(chuàng)建隊列對時,需要配置一些參數(shù),如:隊列的深度、服務級別等,以滿足不同的應用需求。 數(shù)據(jù)發(fā)送和接收,則是通過ibv_post_send和ibv_post_recv函數(shù)來完成的。 對于發(fā)送操作,需要先,構(gòu)建一個ibv_send_wr結(jié)構(gòu)體,設置好操作碼(opcode)、工作隊列元素列表(sg_list)、遠程地址(remote_addr)、遠程鍵(rkey)等參數(shù);然后,將其提交到發(fā)送隊列中。 接收操作類似,構(gòu)建ibv_recv_wr結(jié)構(gòu)體并提交到接收隊列中。當操作完成后,完成隊列中會生成相應的完成隊列元素(Completion Queue Element,CQE),通過輪詢完成隊列可以獲取操作的完成狀態(tài)和結(jié)果信息。 以下是一個簡單的偽代碼示例,展示了如何使用 Verbs API 進行 RDMA 數(shù)據(jù)傳輸:
在上述代碼中, 首先通過init_rdma函數(shù)完成了 RDMA 設備的查詢、打開,以及保護域、內(nèi)存區(qū)域、完成隊列和隊列對的創(chuàng)建等初始化操作。 然后,send_data函數(shù)用于向遠程節(jié)點發(fā)送數(shù)據(jù),receive_data函數(shù)用于接收遠程節(jié)點發(fā)送的數(shù)據(jù),poll_cq函數(shù)則通過輪詢完成隊列來獲取操作的完成狀態(tài)信息。 最后,cleanup函數(shù)用于釋放之前分配的 RDMA 資源,確保程序的正確退出和資源的有效回收。 通過這些函數(shù)的組合使用,開發(fā)者可以在應用程序中充分利用 RDMA 技術(shù)的優(yōu)勢,實現(xiàn)高效的遠程數(shù)據(jù)傳輸和處理,提高系統(tǒng)的整體性能和響應速度。 3.5. 內(nèi)存注冊與隊列對內(nèi)存注冊是 RDMA 操作的重要前提。由于 RDMA 硬件對用于數(shù)據(jù)傳輸?shù)膬?nèi)存有特殊要求,在數(shù)據(jù)傳輸過程中,應用程序不能修改數(shù)據(jù)所在的內(nèi)存,操作系統(tǒng)也不能對其進行 page out 操作,即“物理地址”和“虛擬地址”的映射必須固定不變。而且,無論是 DMA 還是RDMA 都要求物理地址連續(xù),這是由 DMA 引擎所決定的。 內(nèi)存注冊的過程是通過創(chuàng)建兩個鍵(local和remote)指向需要操作的內(nèi)存區(qū)域來實現(xiàn)的。注冊的鍵是數(shù)據(jù)傳輸請求的一部分,注冊一個Memory Region(內(nèi)存區(qū)域)后,該區(qū)域會具有一些屬性,如:上下文(context)、地址(addr)、長度(length)、本地鍵(lkey)和遠程鍵(rkey)等。只有將要操作的內(nèi)存注冊到 RDMA 內(nèi)存區(qū)域中,這塊內(nèi)存才能交給 RDMA 保護域來操作,之后便可以對該內(nèi)存進行 RDMA 操作,只要保證接收方的緩沖區(qū)接收長度大于等于發(fā)送方的緩沖區(qū)長度即可。 隊列對(Queue Pair,QP)在RDMA 通信中起著關(guān)鍵的調(diào)度作用。它由發(fā)送隊列(Send Queue,SQ)和接收隊列(Receive Queue,RQ)組成,任何通信過程都要有收發(fā)兩端,QP 就是這兩個隊列的組合。發(fā)送隊列專門用來存放發(fā)送任務,接收隊列專門用來存放接收任務。在一次 SEND - RECV 流程中,發(fā)送端需要把表示一次發(fā)送任務的工作隊列元素(Work Queue Element,WQE)放到發(fā)送隊列中,接收端軟件則需要給硬件下發(fā)一個表示接收任務的 WQE,這樣硬件才知道收到數(shù)據(jù)后放到內(nèi)存中的哪個位置。 完成隊列(Completion Queue,CQ)與工作隊列(Work Queue,WQ)緊密配合。CQ中的元素是完成隊列元素(Completion Queue Element,CQE),如果說工作隊列元素(Work Queue Element,WQE)是軟件下發(fā)給硬件的 “任務書”,那么 CQE 就是硬件完成任務之后返回給軟件的 “任務報告”。CQE 中描述了某個任務是被正確無誤地執(zhí)行,還是遇到了錯誤,如果遇到錯誤,還會說明錯誤的原因。每個 CQE 都包含某個 WQE 的完成信息,當發(fā)送端或接收端的硬件完成任務后,會生成 CQE 并放置到 CQ 中,上層應用通過輪詢 CQ 來獲取任務的完成信息,從而得知數(shù)據(jù)傳輸?shù)臓顟B(tài)和結(jié)果,以便進行后續(xù)的處理操作。 為了更清晰地展示數(shù)據(jù)傳輸過程中各組件的交互關(guān)系,以下是一個簡單的序列圖:
在這個序列圖中,發(fā)送端應用程序?qū)l(fā)送任務的 WQE 提交到發(fā)送隊列,發(fā)送隊列通知發(fā)送端硬件有任務待處理,發(fā)送端硬件從內(nèi)存讀取數(shù)據(jù)并發(fā)送給接收端硬件,接收端硬件將數(shù)據(jù)寫入內(nèi)存后,在接收隊列放置接收完成信息,同時在完成隊列放置發(fā)送完成信息,發(fā)送端和接收端應用程序通過輪詢相應隊列來獲取任務完成情況,從而實現(xiàn)了 RDMA 數(shù)據(jù)的可靠傳輸和任務的協(xié)調(diào)調(diào)度。 這種通過隊列對和完成隊列的協(xié)同工作機制,使得 RDMA 能夠高效地進行數(shù)據(jù)傳輸,充分發(fā)揮其低延遲、高帶寬的優(yōu)勢,滿足各種對網(wǎng)絡性能要求苛刻的應用場景的需求。 4. RDMA的應用領域4.1. 數(shù)據(jù)中心網(wǎng)絡的變革在大規(guī)模數(shù)據(jù)中心中,RDMA 技術(shù)正發(fā)揮著至關(guān)重要的作用,深刻改變著服務器間的通信模式。傳統(tǒng)的 TCP/IP 通信方式在數(shù)據(jù)中心的海量數(shù)據(jù)傳輸場景下,往往顯得力不從心,存在著高延遲、低帶寬利用率以及 CPU 資源消耗大等問題。而 RDMA 技術(shù)的出現(xiàn),猶如一場及時雨,為這些問題提供了有效的解決方案。 以云存儲服務為例,當用戶請求從云端下載或上傳大量數(shù)據(jù)時,使用RDMA 技術(shù)可以顯著加速數(shù)據(jù)的傳輸過程。在一個擁有數(shù)千臺服務器的大型數(shù)據(jù)中心中,采用 RDMA 技術(shù)的云存儲系統(tǒng),其數(shù)據(jù)傳輸速度相比傳統(tǒng)方式可提升數(shù)倍甚至更高。這意味著用戶能夠更快地獲取所需的數(shù)據(jù),大大提高了用戶體驗。同時,對于數(shù)據(jù)中心的運營者來說,這也意味著能夠在相同的時間內(nèi)處理更多的用戶請求,從而提高了服務的效率和競爭力。 在分布式數(shù)據(jù)庫系統(tǒng)中,RDMA 同樣展現(xiàn)出了強大的優(yōu)勢。在進行大規(guī)模數(shù)據(jù)的分布式查詢和事務處理時,RDMA 技術(shù)能夠?qū)崿F(xiàn)服務器之間的高速數(shù)據(jù)交互,大大降低了數(shù)據(jù)傳輸?shù)难舆t。這使得數(shù)據(jù)庫系統(tǒng)能夠更快速地響應復雜的查詢請求,提高了事務處理的效率和并發(fā)能力。例如,在一些大型電商平臺的訂單處理系統(tǒng)中,RDMA 技術(shù)的應用使得訂單的查詢和處理速度得到了顯著提升,能夠在高并發(fā)的情況下依然保持穩(wěn)定的性能,確保了平臺的高效運行。 此外,在應對數(shù)據(jù)中心內(nèi)部的海量數(shù)據(jù)遷移和備份場景時,RDMA 技術(shù)也能夠發(fā)揮其高帶寬、低延遲的優(yōu)勢,大大縮短數(shù)據(jù)遷移和備份的時間窗口,減少對業(yè)務的影響,提高數(shù)據(jù)中心的整體可靠性和可用性。 4.2. 高性能計算的得力助手在高性能計算(HPC)領域,RDMA技術(shù)已經(jīng)成為不可或缺的關(guān)鍵技術(shù)之一,為科學研究和工程計算等領域的發(fā)展提供了強大的動力。 在氣象模擬領域,科學家們需要處理海量的氣象數(shù)據(jù),并進行復雜的數(shù)值計算,以預測天氣變化和氣候趨勢。傳統(tǒng)的網(wǎng)絡通信方式往往無法滿足這種大規(guī)模數(shù)據(jù)處理和高速計算的需求,而 RDMA 技術(shù)的應用則帶來了顯著的改變。通過 RDMA,計算節(jié)點之間能夠?qū)崿F(xiàn)高速的數(shù)據(jù)共享和交互,大大縮短了數(shù)據(jù)傳輸?shù)臅r間,從而加速了整個氣象模擬的計算進程。例如,在一個全球氣候模擬項目中,使用 RDMA 技術(shù)后,數(shù)據(jù)傳輸?shù)难舆t降低了數(shù)倍,使得模擬計算的效率得到了大幅提升,原本需要數(shù)周甚至數(shù)月才能完成的模擬任務,現(xiàn)在能夠在更短的時間內(nèi)得到結(jié)果,為氣象研究提供了更及時、準確的支持。 在基因測序領域,RDMA 同樣發(fā)揮著重要作用?;驕y序會產(chǎn)生海量的基因數(shù)據(jù),對這些數(shù)據(jù)的分析和處理需要強大的計算能力和高效的數(shù)據(jù)傳輸能力。RDMA 技術(shù)使得基因測序設備與計算節(jié)點之間能夠快速傳輸數(shù)據(jù),減少了數(shù)據(jù)傳輸?shù)钠款i,提高了測序數(shù)據(jù)的處理速度。這不僅有助于加速科研項目的進展,例如在癌癥基因研究、遺傳疾病診斷等方面,能夠更快速地分析基因數(shù)據(jù),為疾病的診斷和治療提供更有力的依據(jù),而且也為基因技術(shù)在醫(yī)學、農(nóng)業(yè)等領域的廣泛應用奠定了基礎。 許多科研機構(gòu)和企業(yè)在其高性能計算集群中廣泛應用 RDMA 技術(shù),取得了顯著的性能提升和科研成果加速的效果。例如,某知名科研機構(gòu)在其超級計算機上采用 RDMA 技術(shù)后,在一系列復雜的科學計算任務中,計算效率提高了 30% 以上,使得原本需要耗費大量時間和資源的科研項目能夠更快地取得突破,推動了相關(guān)學科的發(fā)展和技術(shù)的進步。 4.3. 分布式存儲系統(tǒng)的優(yōu)化在分布式存儲系統(tǒng)中,RDMA 技術(shù)的應用為數(shù)據(jù)的高效存儲和快速訪問提供了有力保障。 傳統(tǒng)的分布式存儲架構(gòu)在數(shù)據(jù)讀寫過程中,往往需要經(jīng)過多個中間節(jié)點的處理和數(shù)據(jù)復制,這會導致較高的延遲和較低的讀寫性能。而 RDMA 技術(shù)的出現(xiàn),使得存儲節(jié)點和計算節(jié)點之間能夠直接進行快速的數(shù)據(jù)傳輸,繞過了中間節(jié)點的繁瑣處理,大大減少了數(shù)據(jù)復制和中間節(jié)點處理的開銷。 以 Ceph、GlusterFS等分布式存儲系統(tǒng)為例,當計算節(jié)點需要從存儲節(jié)點讀取大量數(shù)據(jù)時,RDMA 技術(shù)能夠?qū)崿F(xiàn)數(shù)據(jù)的直接內(nèi)存訪問,避免了傳統(tǒng)方式下數(shù)據(jù)在多個層次之間的拷貝和協(xié)議棧的處理,從而顯著提高了數(shù)據(jù)讀取的速度。在實際的應用場景中,如大規(guī)模的視頻存儲和在線播放平臺,使用 RDMA 技術(shù)的分布式存儲系統(tǒng)能夠更快地響應用戶的播放請求,減少視頻的緩沖時間,提升用戶的觀看體驗。 在數(shù)據(jù)寫入方面,RDMA 同樣表現(xiàn)出色。例如,在一些對數(shù)據(jù)寫入速度要求極高的大數(shù)據(jù)存儲場景中,如實時數(shù)據(jù)采集和存儲系統(tǒng),RDMA 技術(shù)能夠確保數(shù)據(jù)快速、準確地寫入存儲節(jié)點,提高了存儲系統(tǒng)的寫入性能和響應速度,保證了數(shù)據(jù)的及時性和完整性。 此外,RDMA 技術(shù)還能夠提高分布式存儲系統(tǒng)的可靠性和可用性。通過減少中間節(jié)點的故障點,以及快速的數(shù)據(jù)恢復和同步能力,RDMA 技術(shù)使得分布式存儲系統(tǒng)在面對節(jié)點故障或網(wǎng)絡異常時,能夠更快速地進行數(shù)據(jù)的冗余備份和恢復,確保數(shù)據(jù)的安全性和可用性,為企業(yè)的關(guān)鍵業(yè)務數(shù)據(jù)提供了更可靠的存儲解決方案。 5. RDMA通信過程為了執(zhí)行 RDMA 操作,首選需要建立與遠程主機的連接和適當?shù)恼J證。實現(xiàn)這些的機制是隊列對(QP) 。與標準的 IP 協(xié)議棧類似,一個 QP 大概等同于一個接字(socket)。QP 需要在連接兩端進行初始化。連接管理器(CM)用來在 QP 建立之前進行 QP 信息的交換。一旦一個 QP 建立起來, verbs API 就可以用來執(zhí)行 RDMA 讀/寫和原子操作。與套接字的讀/寫類似的連續(xù)收/發(fā)操作也能執(zhí)行。 RDMA的操作過程大致如下: 1. 當一個應用程執(zhí)行度或者寫請求時,不執(zhí)行任何數(shù)據(jù)復制,再不需要任何內(nèi)核參與的條件下,RDMA請求從用戶空間中的應用發(fā)送到本地NIC網(wǎng)卡。 2. NIC讀取緩沖區(qū)的內(nèi)容,并通過網(wǎng)絡傳輸?shù)竭h程NIC。 3. 在網(wǎng)絡上傳輸?shù)?/span>RDMA信息包括虛擬地址、內(nèi)存鑰匙和數(shù)據(jù)本身。請求既可以完全在用戶空間中處理,又或者在應用一直睡眠到請求完成時的情況下通過系統(tǒng)級中斷處理。RDMA操作使應用可以從一個遠程應用的內(nèi)存中讀取數(shù)據(jù)或向這個內(nèi)存中寫數(shù)據(jù)。 4. 目標NIC確認內(nèi)存鑰匙,直接將數(shù)據(jù)寫入應用緩存中,用于操作的遠程虛擬內(nèi)存地址包含在RDMA信息中。 在RDMA操作中,Read/Write是單邊操作,秩序本地端明確信息的源和目的地址,遠端應用不必感知此次通信,數(shù)據(jù)的讀或?qū)懚纪ㄟ^RDMA在RNIC與應用Buffer之間完成,再由遠端RNIC封裝成消息返回到本地端。Send/Receive是雙邊操作,即必須要遠端的應用感知參與才能完成收發(fā),在實際中,Send/Receive多用于連接控制類報文,而數(shù)據(jù)報文是通過Read/Write來完成的。 5.1. 單向通信-讀Read 1. 首先A、B建立連接,QP已經(jīng)創(chuàng)建并初始化。 2. 數(shù)據(jù)被存檔在B的buffer,地址為VB,注意VB是提前注冊到B的RNIC,并且它是一個Memory Region,并拿到返回的local key,相當于RDMA操作這塊buffer的權(quán)限。 3. B把數(shù)據(jù)地址VB,key封裝到專用報文傳送到A,這相當于B把數(shù)據(jù)buffer的操作權(quán)交給了A。同時B在他的WQ中注冊一個WR,用于接收數(shù)據(jù)傳輸?shù)?/span>A返回的狀態(tài)。 4. A在收到B發(fā)送過來的數(shù)據(jù)地址VB和R_key之后,RNIC會把它們連同本地存儲數(shù)據(jù)的地址VA封裝到Read請求中,將這個請求消息發(fā)送到B,這個過程A、B兩端不需任何軟件參與,就可以將B中的數(shù)據(jù)存儲到A的VA虛擬地址。 5. A在存儲完成后,向B返回數(shù)據(jù)傳輸?shù)臓顟B(tài)信息。 5.2. 單向通信-寫Write
1. 首先A、B建立連接,QP已經(jīng)創(chuàng)建并初始化。 2. 數(shù)據(jù)遠端的目標存儲空間buffer的地址為VB,注意VB是提前注冊到B的RNIC,并且它是一個Memory Region,并拿到返回的local key,相當于RDMA操作這塊buffer的權(quán)限。 3. B把數(shù)據(jù)地址VB,key封裝到專用報文傳送到A,這相當于B把數(shù)據(jù)buffer的操作權(quán)交給了A。同時B在他的WQ中注冊一個WR,用于接收數(shù)據(jù)傳輸?shù)?/span>A返回的狀態(tài)。 4. A在收到B發(fā)送過來的數(shù)據(jù)地址VB和R_key之后,RNIC會把它們連同本地存儲數(shù)據(jù)的地址VA封裝到Write請求中,這個過程A、B兩端不需任何軟件參與,就可以將A中的數(shù)據(jù)存儲到B的VB虛擬地址。 5. A在發(fā)送數(shù)據(jù)完成后,向B返回數(shù)據(jù)傳輸?shù)臓顟B(tài)信息。 5.3. 雙向通信-Send\Recv
1. 首先,A和B都要創(chuàng)建并初始化好各自的QP、CQ。 2. A、B分別向自己的WQ中注冊WQE,對于A來說,WQ=SQ,WQE描述指向一個等待被發(fā)送的數(shù)據(jù);對于B,WQ=RQ,WQE描述指向一塊用于存儲數(shù)據(jù)的Buffer。 3. A的RNIC異步調(diào)度輪到A的WQE,解析到這是一個Send消息,從Buffer中直接向B發(fā)送數(shù)據(jù)。數(shù)據(jù)流到達B的RNIC后,B的WQE被消耗,并把數(shù)據(jù)直接存儲到WQE指向的存儲位置。 4. AB通信完成后,A的CQ中會產(chǎn)生一個完成消息CQE表示發(fā)送完成。同時,B的CQ中會產(chǎn)生一個完成消息CQE表示接收完成。每個WQ中的WQE的處理完成都會產(chǎn)生一個CQE。 6. 全文總結(jié)RDMA 技術(shù)作為現(xiàn)代網(wǎng)絡通信領域的一項關(guān)鍵技術(shù),以其獨特的直接內(nèi)存訪問、零拷貝和內(nèi)核旁路等特性,有效地解決了傳統(tǒng)網(wǎng)絡通信中的高延遲、低帶寬利用率以及 CPU 資源消耗大等問題,為眾多對網(wǎng)絡性能要求苛刻的應用場景提供了高效、可靠的數(shù)據(jù)傳輸解決方案。 從數(shù)據(jù)中心的大規(guī)模數(shù)據(jù)處理與存儲,到高性能計算領域的科學研究和工程計算,再到分布式存儲系統(tǒng)的優(yōu)化,RDMA 技術(shù)都展現(xiàn)出了強大的優(yōu)勢和巨大的應用潛力,推動了各行業(yè)的技術(shù)進步和業(yè)務創(chuàng)新,成為推動現(xiàn)代信息技術(shù)發(fā)展的重要力量。 盡管目前 RDMA 技術(shù)在實際應用中還面臨著網(wǎng)絡環(huán)境穩(wěn)定性要求高、硬件成本相對較高以及技術(shù)普及難度較大等挑戰(zhàn),但隨著網(wǎng)絡優(yōu)化技術(shù)的不斷發(fā)展、硬件成本的逐漸下降以及開源社區(qū)和行業(yè)標準的持續(xù)推動,這些問題正在逐步得到解決。 展望未來,RDMA 技術(shù)有望在硬件性能提升、應用領域拓展以及與其他新興技術(shù)融合等方面取得更多的突破和發(fā)展,為網(wǎng)絡通信和計算領域帶來更多的創(chuàng)新和機遇,持續(xù)推動各行業(yè)數(shù)字化轉(zhuǎn)型和智能化升級,其在未來信息技術(shù)領域的重要性和影響力也將不斷提升,值得我們持續(xù)關(guān)注和深入探索其更多的應用可能性。 |
|
|
來自: Sideboard_SoSE > 《待分類》