一、 基本概念
RDMA(Remote Direct Memory Access)網絡是一種基於硬件實現的遠程內存訪問技術,在傳輸過程中繞過了操作系統的網絡協議棧,實現了高效低延遲的數據傳輸。RDMA與傳統網絡協議不同,它將數據傳輸的工作交給網卡(RDMA適配器)完成,而非操作系統的網絡協議棧。
例如,使用TCP/IP傳輸數據時,應用程序通過send()系統調用將數據寫入內存緩衝區,然後經由操作系統的網絡協議棧通過網卡(NIC,Network Interface Card)將數據發送到網絡中。在遠程接收端,網絡協議棧的工作與發送端相反,最終將數據交給應用程序。
相比之下,RDMA技術完全不需要操作系統的網絡協議棧介入數據傳輸過程,而是通過RDMA適配器將數據直接傳輸到遠程服務器的內存中,實現了零拷貝技術,減少了CPU資源和網絡帶寬的消耗,降低了網絡延遲,提高了網絡傳輸效率。
二、 RDMA網絡的應用場景
目前,RDMA技術主要應用在高性能計算(HPC)、雲計算、存儲系統等領域。
在HPC領域,RDMA被廣泛應用於MPI(Message Passing Interface)庫中,MPI庫是一種高性能計算中廣泛使用的並行編程模型,以消息傳遞的方式進行並行計算。MPI庫需要實現消息通信子(Communication Subsystem),在RDMA技術的幫助下,MPI庫可以提高程序並行化的效率,並減少進程間通信的延遲。
在雲計算環境下,RDMA技術可以實現虛擬機(VM)的高速網絡和高性能存儲訪問。RDMA適配器可以通過虛擬網絡,實現虛擬機與物理機的數據傳輸,同時通過RDMA協議實現虛擬機直接訪問SAN(Storage Area Network)存儲系統,提高了虛擬機應用程序的性能。
三、 RDMA網絡的實現方式
RDMA技術的實現主要由以下3個層次構成。
RDMA適配器層: RDMA適配器是一種支持RDMA技術的網卡。RDMA適配器需要具備以下功能:1)將DMA(Direct Memory Access)數據傳輸與網絡協議棧分離;2)支持零拷貝技術;3)支持IPoIB(InfiniBand over IP)和RoCE(RDMA over Converged Ethernet)等協議。
RDMA通信層: RDMA通信層是RDMA網絡傳輸的核心,它實現了RDMA的網絡協議,包括數據傳輸過程中的連接管理、數據傳輸、包序列化和重傳等。RDMA通信層還提供了IBV(InfiniBand Verbs)API和RoCE API,用於應用程序進行RDMA網絡編程。
//使用IBV創建一個RDMA通信端點 #include struct ibv_context *ctx = ibv_open_device(dev->ib_ctx); struct ibv_pd *pd = ibv_alloc_pd(ctx); struct ibv_cq *cq = ibv_create_cq(ctx, CQ_SIZE, NULL, NULL, 0); struct ibv_qp_init_attr qp_init_attr{}; qp_init_attr.send_cq = cq; qp_init_attr.recv_cq = cq; qp_init_attr.qp_type = IBV_QPT_RC; qp_init_attr.cap.max_send_wr = MAX_SEND_WR; qp_init_attr.cap.max_recv_wr = MAX_RECV_WR; qp_init_attr.cap.max_send_sge = MAX_SR_SGE; qp_init_attr.cap.max_recv_sge = MAX_RR_SGE; struct ibv_qp *qp = ibv_create_qp(pd, &qp_init_attr);
應用層: 應用層是RDMA網絡的最上層,用戶可以使用IBV API進行RDMA網絡編程,實現高效低延遲的數據傳輸。
//使用IBV API發送RDMA讀取請求 #include struct ibv_sge send_sge{}; send_sge.addr = local_buffer_addr; send_sge.length = length; send_sge.lkey = lkey; struct ibv_send_wr send_wr{}; send_wr.sg_list = &send_sge; send_wr.num_sge = 1; send_wr.opcode = IBV_WR_RDMA_READ_WITH_IMM; send_wr.send_flags = IBV_SEND_SIGNALED; send_wr.wr.rdma.remote_addr = remote_buffer_addr; send_wr.wr.rdma.rkey = rkey; struct ibv_send_wr *bad_send_wr; ibv_post_send(qp, &send_wr, &bad_send_wr);
四、 RDMA網絡的優勢和挑戰
優勢: RDMA網絡技術採用了先進的零拷貝技術和削減了內核態和數據包處理間接性的通信方式,因此具有如下優勢。
1)低延遲:由於完全繞過操作系統的內核態,RDMA網絡通信的延遲非常低,最小可達到幾微秒級別。
2)高吞吐:RDMA網絡可以通過多通道和多隊列實現並行的消息傳遞和數據傳輸,大大提高了數據傳輸的吞吐量。
3)較高的CPU利用率:RDMA網絡使用零拷貝技術,減少了CPU的消耗,提高了CPU的利用率。
挑戰: RDMA網絡技術在應用過程中還面臨如下挑戰。
1)技術門檻較高:RDMA通信層的實現比較複雜,需要深入理解RDMA網絡的協議和底層硬件,因此對開發者的技術要求較高。
2)成本相對較高:相對於TCP/IP協議等傳統協議,RDMA網絡的適配器、交換機、以及布線成本較高,需要較大的開銷。
五、 總結
RDMA網絡技術是當前高性能計算、雲計算、存儲等領域中最重要的技術之一,它採用先進的零拷貝技術和高效的數據傳輸方式,大大提高了數據傳輸的效率和網絡的性能。雖然RDMA技術面臨技術門檻高、成本高等方面的挑戰,但是隨着硬件和技術的不斷發展,RDMA技術有望成為未來網絡互聯的核心技術之一。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/287467.html