精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

打破網絡傳輸瓶頸,一文看懂RDMA技術

網絡 網絡管理
RDMA,全稱遠程直接數據存取(Remote Direct Memory Access),是一種創新性的網絡通信技術。在傳統網絡通信模式下,數據傳輸往往需要經過操作系統及多層軟件協議棧的處理,這會導致大量的 CPU 資源被占用,數據傳輸延遲較高。

你有沒有過這樣的困惑:服務器 CPU、GPU 性能明明拉滿,可數據在節點間傳輸時卻總 “掉鏈子”?用 100G 網卡傳數據,實際速率連一半都跑不到;AI 訓練時,GPU 等著參數同步卻 “無事可做”;分布式存儲里,遠程讀寫延遲比本地高好幾倍 —— 這些問題的根源,大多藏在傳統 TCP/IP 通信的 “低效” 里。

傳統網絡傳輸要經過 “用戶態→內核態→網卡” 的多輪數據拷貝,還得靠 CPU 處理協議棧,不僅占滿計算資源,延遲還居高不下。而 RDMA(遠程直接內存訪問)恰恰是解決這個痛點的 “利器”:它能讓網卡直接訪問遠程服務器內存,繞開 CPU 和內核,實現 “零拷貝”“低延遲” 傳輸。今天這篇就從基礎原理、實現方式到應用場景,用最通俗的語言拆解 RDMA,不管你是開發、運維還是技術選型,都能搞懂這門讓數據 “飛起來” 的關鍵技術。

一、RDMA簡介

1.1RDMA 是何方神圣?

RDMA,全稱遠程直接數據存取(Remote Direct Memory Access),是一種創新性的網絡通信技術。在傳統網絡通信模式下,數據傳輸往往需要經過操作系統及多層軟件協議棧的處理,這會導致大量的 CPU 資源被占用,數據傳輸延遲較高。而 RDMA 技術的出現,旨在解決這些問題,它能夠讓計算機直接訪問遠程計算機的內存,而無需在本地和遠程計算機之間進行繁瑣的數據復制,從而顯著降低數據傳輸的延遲,提高數據處理效率,這使得它在現代網絡通信中占據著至關重要的地位,尤其在對網絡性能要求極高的領域,如高性能計算(HPC)、數據中心、云計算等,發揮著不可或缺的作用。

1.2技術背景

(1)傳統網絡通信的困境

在深入探討 RDMA 技術之前,我們先來了解一下傳統網絡通信存在的問題。以常見的 TCP/IP 通信模式為例,當數據在網絡中傳輸時,需要經過操作系統內核以及多層軟件協議棧的處理。這一過程會涉及到多次的數據拷貝和上下文切換,從而導致較高的延遲和大量的 CPU 資源消耗。

具體來說,當發送端應用程序要發送數據時,數據首先會從用戶空間的緩沖區拷貝到內核空間的緩沖區,然后經過協議棧的封裝,再通過網卡發送出去。在接收端,數據則需要從網卡接收,經過協議棧的解封裝,再從內核空間拷貝到用戶空間的緩沖區,以供應用程序使用。這些數據拷貝和上下文切換操作不僅占用了寶貴的 CPU 時間,還使得數據傳輸的延遲難以降低,尤其是在處理大量小數據塊的傳輸或者對實時性要求較高的應用場景時,傳統網絡通信的這些問題就顯得更加突出,嚴重影響了系統的整體性能和響應速度。傳統的 TCP/IP 網絡通信,數據需要通過用戶空間發送到遠程機器的用戶空間,在這個過程中需要經歷若干次內存拷貝:

圖片圖片

圖片

如上圖,在傳統模式下,兩臺服務器上的應用之間傳輸數據,過程是這樣的:

  • 首先要把數據從應用緩存拷貝到Kernel中的TCP協議棧緩存;
  • 然后再拷貝到驅動層;
  • 最后拷貝到網卡緩存。

多次內存拷貝需要CPU多次介入,導致處理延時大,達到數十微秒。同時整個過程中CPU過多參與,大量消耗CPU性能,影響正常的數據計算。

(2)TCP/IP存在的問題

傳統TCP/IP通信存在的主要問題就是I/O瓶頸問題。在高速網絡環境下與網絡I/O相關的主機處理的高開銷(數據移動操作和復制操作)限制了機器之間的傳輸帶寬。

具體來說,傳統的TCP/IP網絡通信是通過內核發送消息。通過內核來傳輸消息這種機制會導致性能低和靈活性差。

  • 性能低的主要原因是:由于網絡通信通過內核傳遞,需要在內核中頻繁進行協議封裝和解封操作,造成很大的數據移動和數據復制開銷。
  • 靈活性差的原因是:是因為網絡通信協議在內核中進行處理,這種方式很難支持新的網絡協議和新的消息通信協議以及發送和接收接口。

二、RDMA技術的核心原理

RDMA (繞過CPU,數據直接‘傳’到對端內存)為了消除傳統網絡通信帶給計算任務的瓶頸,我們希望更快和更輕量級的網絡通信,由此提出了RDMA技術。RDMA利用 Kernel Bypass 和 Zero Copy技術提供了低延遲的特性,同時減少了CPU占用,減少了內存帶寬瓶頸,提供了很高的帶寬利用率。RDMA提供了給基于 IO 的通道,這種通道允許一個應用程序通過RDMA設備對遠程的虛擬內存進行直接的讀寫。

RDMA 技術有以下幾個特點:

  • CPU Offload:無需CPU干預,應用程序可以訪問遠程主機內存而不消耗遠程主機中的任何CPU。遠程主機內存能夠被讀取而不需要遠程主機上的進程(或CPU)參與。遠程主機的CPU的緩存(cache)不會被訪問的內存內容所填充
  • Kernel Bypass:RDMA 提供一個專有的 Verbs interface 而不是傳統的TCP/IP Socket interface。應用程序可以直接在用戶態執行數據傳輸,不需要在內核態與用戶態之間做上下文切換
  • Zero Copy:每個應用程序都能直接訪問集群中的設備的虛擬內存,這意味著應用程序能夠直接執行數據傳輸,在不涉及到網絡軟件棧的情況下,數據能夠被直接發送到緩沖區或者能夠直接從緩沖區里接收,而不需要被復制到網絡層。

下面是 RDMA 整體框架架構圖,從圖中可以看出,RDMA 提供了一系列 Verbs 接口,可在應用程序用戶空間,操作RDMA硬件。RDMA繞過內核直接從用戶空間訪問RDMA 網卡。RNIC(RDMA 網卡,RNIC(NIC=Network Interface Card ,網絡接口卡、網卡,RNIC即 RDMA Network Interface Card)中包括 Cached Page Table Entry,用來將虛擬頁面映射到相應的物理頁面。

圖片圖片

2.1直接內存訪問機制

RDMA 的核心在于其直接內存訪問機制。在傳統的網絡通信中,數據傳輸需要 CPU 的深度參與,例如數據從應用程序緩沖區拷貝到內核緩沖區,再通過網絡協議棧進行封裝和傳輸,接收端則需要逆向操作,將數據從內核緩沖區拷貝到應用程序緩沖區,整個過程涉及多次數據拷貝和 CPU 上下文切換,效率較低。

而 RDMA 允許計算機直接存取其他計算機的內存,繞過了處理器的繁瑣處理過程,數據傳輸的大部分工作由硬件來執行,直接在遠程系統的內存之間進行讀寫操作,極大地提高了數據傳輸的效率和速度,減少了 CPU 的負擔,使得系統能夠將更多的資源用于實際的數據處理任務,從而提升整體性能。

2.2零拷貝與內核旁路

零拷貝技術是 RDMA 的另一大關鍵特性。在傳統通信模式下,數據在傳輸過程中需要在不同的內存區域之間進行多次拷貝,例如從用戶空間拷貝到內核空間,再從內核空間拷貝到網絡設備緩沖區等,這些拷貝操作不僅消耗 CPU 資源,還會增加數據傳輸的延遲。而 RDMA 實現了零拷貝,使得數據能夠直接在應用程序的緩沖區與網絡之間進行傳輸,無需中間的拷貝環節,大大減少了數據傳輸的開銷和延遲。

內核旁路也是 RDMA 提升性能的重要手段。在傳統網絡通信中,應用程序與網絡設備之間的通信需要經過操作系統內核的干預,這會導致上下文切換和系統調用的開銷。而 RDMA 允許應用程序在用戶態直接與網卡進行交互,避免了內核態與用戶態之間的上下文切換,進一步降低了 CPU 的負擔,提高了數據傳輸的效率和響應速度。例如,在一些對實時性要求極高的金融交易系統中,RDMA 的零拷貝和內核旁路技術能夠確保交易數據的快速傳輸和處理,減少交易延遲,提高交易效率。

2.3RDMA通信協議

目前,有三種支持RDMA的通信技術:

  • InfiniBand(IB): 基于 InfiniBand 架構的 RDMA 技術,需要專用的 IB 網卡和 IB 交換機。從性能上,很明顯Infiniband網絡最好,但網卡和交換機是價格也很高。
  • RoCE:即RDMA over Ethernet(RoCE), 基于以太網的 RDMA 技術,也是由 IBTA 提出。RoCE支持在標準以太網基礎設施上使用RDMA技術,但是需要交換機支持無損以太網傳輸,只不過網卡必須是支持RoCE的特殊的NIC。
  • iWARP:Internet Wide Area RDMA Protocal,基于 TCP/IP 協議的 RDMA 技術(在現有TCP/IP協議棧基礎上實現RDMA技術,在TCP協議上增加一層DDP),由 IETF 標 準定義。iWARP 支持在標準以太網基礎設施上使用 RDMA 技術,而不需要交換機支持無損以太網傳輸,但服務器需要使用支持iWARP 的網卡。與此同時,受 TCP 影響,性能稍差。

這三種技術都可以使用同一套API來使用,但它們有著不同的物理層和鏈路層;需要注意的是,上述幾種協議都需要專門的硬件(網卡)支持。

(1)InfiniBand

InfiniBand(IB)是一種服務器和存儲器的互聯技術,它具有高速、低延遲、低CPU負載、高效率和可擴展的特性。InfiniBand的關鍵特性之一是它天然地支持遠程直接內存訪問(RDMA)。InfiniBand能夠讓服務器與服務器之間、服務器與存儲設備之間的數據傳輸不需要主機CPU的參與。InfiniBand使用I/O通道進行數據傳輸,每個I/O通道提供虛擬的NIC或HCA語義。InfiniBand提供了多種技術方案,每個端口的速度可以有10GB/s、40GB/s、56GB/s、100GB/s,截止目前已經達到了200GB/s。InfiniBand使用同軸電纜和光纖進行連接。

(2)RoCE

RDMA首先從InfiniBand規范和產品里引入工業界,但是目前在企業界部署著大量基于以太網的產品,因此IBTA規范組織又定義了一套字符規范,使得RDMA不僅可以在infiniBand網絡上運行,同時也可以在以太網上運行。RoCE是基于以太網(Ethernet)的RDMA技術標準,它也是由IBTA組織指定的。RoCE為以太網提供了RDMA語義,并不需要復雜低效的TCP傳輸(IWARP需要)。

RoCE是現在最有效的以太網低延遲方案。它消耗很少的CPU負載,在數據中心橋接以太網中利用優先流控制(PFC)來達到網絡的無損連接。RoCE 有兩個版本,RoCE v1是一種鏈路層協議,允許在同一個廣播域下的任意兩臺主機直接訪問。RoCE v2是一種Internet層協議,即可以實現路由功能。雖然RoCE協議這些好處都是基于融合以太網的特性,但是RoCE協議也可以使用在傳統以太網網絡或者非融合以太網絡中。

(3)iWARP

這是一種基于 TCP 的 RDMA 網絡協議,它利用了 TCP 的可靠性來實現遠程內存訪問,能夠在現有的 TCP/IP 網絡基礎上部署 RDMA 技術,具有良好的兼容性和廣泛的適用性。然而,由于 TCP 協議本身的一些特性,如在大型組網情況下,大量的 TCP 連接會占用較多的內存資源,對系統規格要求相對較高。不過,在一些對網絡兼容性要求較高,且數據傳輸量相對較小、對延遲不太敏感的場景中,iWARP 協議仍然具有一定的優勢,例如一些企業內部的小型網絡環境或者對成本控制較為嚴格的場景。

三、RDMA編程詳解

3.1傳輸操作

RDMA有兩種基本操作,包括Memory verbs和Messaging verbs。

(1)Memory verbs:包括read、write和atomic操作。

RDMA Read:從遠程主機讀取部分內存。調用者指定遠程虛擬地址,像本地內存地址一樣用來拷貝。在執行 RDMA 讀操作之前,遠程主機必須提供適當的權限來訪問它的內存。一旦權限設置完成, RDMA 讀操作就可以在對遠程主機沒有任何通知的條件下執行。不管是 RDMA 讀還是 RDMA 寫,遠程主機都不會意識到操作正在執行 (除了權限和相關資源的準備操作)。

RDMA Write:與RDMA Read類似,只是數據寫到遠端主機中。RDMA寫操作在執行時不通知遠程主機。然而帶即時數的RDMA寫操作會將即時數通知給遠程主機。

RDMA Atomic:包括原子取、原子加、原子比較和原子交換,屬于RDMA原子操作的擴展。

(2)Messaging verbs:包括send和receive操作。

RDMA Send:發送操作允許你把數據發送到遠程 QP 的接收隊列里。接收端必須已經事先注冊好了用來接收數據的緩沖 區。發送者無法控制數據在遠程主機中的放置位置。可選擇是否使用即時數,一個4位的即時數可以和數據緩沖一起被傳送。這個即時數發送到接收端是作為接收的通知,不包含在數據緩沖之中。

RDMA Receive:這是與發送操作相對應的操作。接收主機被告知接收到數據緩沖,還可能附帶一個即時數。接收端應用 程序負責接收緩沖區的維護和發布。

3.2傳輸模式

按照連接和可靠兩個標準,可以劃分出四種不同的傳輸模式:

  • 可靠連接(RC):一個QP只和另一個QP相連,消息通過一個QP的發送隊列可靠地傳輸到另一個QP的接收隊列。數據包按序交付,RC連接很類似于TCP連接。
  • 不可靠連接(UC):一個QP只和另一個QP相連,連接是不可靠的,所以數據包可能有丟失。傳輸層出錯的消息不會進行重傳,錯誤處理必須由高層的協議來進行。
  • 不可靠數據報(UD):一個 QP 可以和其它任意的 UD QP 進行數據傳輸和單包數據的接收。不保證按序性和交付性。交付的數據包可能被接收端丟棄。支持多播消息(一對多)。UD連接很類似于UDP連接。

3.3RDMA的編程接口

RDMA 的編程接口主要包括 Verbs API 和 RDMA CM(Connection Manager)API 等,其中 Verbs API 提供了一套完整的 RDMA 操作函數,是實現 RDMA 功能的關鍵所在。

在使用 Verbs API 進行編程時,首先需要進行設備查詢和初始化操作,例如使用ibv_get_device_list函數獲取系統中的 RDMA 設備列表,然后選擇合適的設備并通過ibv_open_device函數打開設備,獲取設備上下文(ibv_context),這一步是后續所有操作的基礎,只有正確地獲取并初始化設備,才能進行后續的內存注冊、隊列對創建等操作。

內存注冊是通過ibv_reg_mr函數來實現的,它將內存塊固定(防止被交換出)并返回一個包含uint32_t鍵(key)的ibv_mr結構體指針,這個key允許遠程訪問注冊的內存,同時該結構體還包含了內存區域的上下文(context)、地址(addr)、長度(length)等信息,這些信息在后續的數據傳輸操作中起著重要作用。

隊列對(Queue Pair)的創建和管理也是使用 Verbs API 的重要部分。首先,需要使用ibv_alloc_pd函數分配一個保護域(Protection Domain),然后通過ibv_create_cq函數創建完成隊列(Completion Queue),并使用ibv_create_qp函數創建隊列對,包括發送隊列(Send Queue)和接收隊列(Receive Queue)。在創建隊列對時,需要配置一些參數,如隊列的深度、服務級別等,以滿足不同的應用需求。

數據發送和接收則是通過ibv_post_send和ibv_post_recv函數來完成的。對于發送操作,需要先構建一個ibv_send_wr結構體,設置好操作碼(opcode)、工作隊列元素列表(sg_list)、遠程地址(remote_addr)、遠程鍵(rkey)等參數,然后將其提交到發送隊列中;接收操作類似,構建ibv_recv_wr結構體并提交到接收隊列中。當操作完成后,完成隊列中會生成相應的完成隊列元素(Completion Queue Element,CQE),通過輪詢完成隊列可以獲取操作的完成狀態和結果信息。

以下是一個簡單的偽代碼示例,展示了如何使用 Verbs API 進行 RDMA 數據傳輸:

#include <infiniband/verbs.h>

// 全局變量定義
struct ibv_context *ctx;
struct ibv_pd *pd;
struct ibv_mr *mr;
struct ibv_qp *qp;
struct ibv_cq *cq;

// 初始化RDMA資源
void init_rdma() {
    // 查詢RDMA設備
    struct ibv_device **dev_list = ibv_get_device_list(NULL);
    if (!dev_list) {
        perror("Failed to get RDMA device list");
        exit(1);
    }
    ctx = ibv_open_device(dev_list[0]);
    if (!ctx) {
        perror("Failed to open RDMA device");
        exit(1);
    }
    // 創建保護域
    pd = ibv_alloc_pd(ctx);
    if (!pd) {
        perror("Failed to allocate protection domain");
        exit(1);
    }
    // 注冊內存區域
    char *buf = malloc(1024);
    mr = ibv_reg_mr(pd, buf, 1024, IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_READ);
    if (!mr) {
        perror("Failed to register memory region");
        exit(1);
    }
    // 創建完成隊列
    cq = ibv_create_cq(ctx, 10, NULL, NULL, 0);
    if (!cq) {
        perror("Failed to create completion queue");
        exit(1);
    }
    // 創建隊列對
    struct ibv_qp_init_attr qp_attr = {
      .send_cq = cq,
      .recv_cq = cq,
      .cap = {
          .max_send_wr = 10,
          .max_recv_wr = 10,
          .max_send_sge = 1,
          .max_recv_sge = 1
       },
      .qp_type = IBV_QPT_RC
    };
    qp = ibv_create_qp(pd, &qp_attr);
    if (!qp) {
        perror("Failed to create queue pair");
        exit(1);
    }
}

// 發送數據
void send_data() {
    struct ibv_send_wr wr, *bad_wr;
    struct ibv_sge sge;
    memset(&wr, 0, sizeof(wr));
    memset(&sge, 0, sizeof(sge));
    sge.addr = (uint64_t)mr->addr;
    sge.length = 1024;
    sge.lkey = mr->lkey;
    wr.sg_list = &sge;
    wr.num_sge = 1;
    wr.opcode = IBV_WR_RDMA_WRITE;
    // 設置遠程地址和鍵(假設已獲取)
    wr.wr.rdma.remote_addr = remote_addr;
    wr.wr.rdma.rkey = remote_rkey;
    if (ibv_post_send(qp, &wr, &bad_wr)) {
        perror("Failed to post send");
        exit(1);
    }
}

// 接收數據
void receive_data() {
    struct ibv_recv_wr wr, *bad_wr;
    struct ibv_sge sge;
    memset(&wr, 0, sizeof(wr));
    memset(&sge, 0, sizeof(sge));
    sge.addr = (uint64_t)mr->addr;
    sge.length = 1024;
    sge.lkey = mr->lkey;
    wr.sg_list = &sge;
    wr.num_sge = 1;
    if (ibv_post_recv(qp, &wr, &bad_wr)) {
        perror("Failed to post receive");
        exit(1);
    }
}

// 輪詢完成隊列獲取完成事件
void poll_cq() {
    struct ibv_wc wc;
    while (ibv_poll_cq(cq, 1, &wc)) {
        if (wc.status == IBV_WC_SUCCESS) {
            // 處理完成事件
            printf("RDMA operation completed successfully\n");
        } else {
            perror("RDMA operation failed");
        }
    }
}

// 釋放RDMA資源
void cleanup() {
    ibv_dereg_mr(mr);
    ibv_destroy_qp(qp);
    ibv_destroy_cq(cq);
    ibv_dealloc_pd(pd);
    ibv_close_device(ctx);
}

在上述代碼中,首先通過init_rdma函數完成了 RDMA 設備的查詢、打開,以及保護域、內存區域、完成隊列和隊列對的創建等初始化操作。然后,send_data函數用于向遠程節點發送數據,receive_data函數用于接收遠程節點發送的數據,poll_cq函數則通過輪詢完成隊列來獲取操作的完成狀態信息。最后,cleanup函數用于釋放之前分配的 RDMA 資源,確保程序的正確退出和資源的有效回收。

通過這些函數的組合使用,開發者可以在應用程序中充分利用 RDMA 技術的優勢,實現高效的遠程數據傳輸和處理,提高系統的整體性能和響應速度。

3.4內存注冊與隊列對

內存注冊是 RDMA 操作的重要前提。由于 RDMA 硬件對用于數據傳輸的內存有特殊要求,在數據傳輸過程中,應用程序不能修改數據所在的內存,操作系統也不能對其進行 page out 操作,即物理地址和虛擬地址的映射必須固定不變。而且,無論是 DMA 還是 RDMA 都要求物理地址連續,這是由 DMA 引擎所決定的。

內存注冊的過程是通過創建兩個鍵(local和remote)指向需要操作的內存區域來實現的。注冊的鍵是數據傳輸請求的一部分,注冊一個Memory Region(內存區域)后,該區域會具有一些屬性,如上下文(context)、地址(addr)、長度(length)、本地鍵(lkey)和遠程鍵(rkey)等。只有將要操作的內存注冊到 RDMA 內存區域中,這塊內存才能交給 RDMA 保護域來操作,之后便可以對該內存進行 RDMA 操作,只要保證接收方的緩沖區接收長度大于等于發送方的緩沖區長度即可。

隊列對(Queue Pair,QP)在 RDMA 通信中起著關鍵的調度作用。它由發送隊列(Send Queue,SQ)和接收隊列(Receive Queue,RQ)組成,任何通信過程都要有收發兩端,QP 就是這兩個隊列的組合。發送隊列專門用來存放發送任務,接收隊列專門用來存放接收任務。在一次 SEND - RECV 流程中,發送端需要把表示一次發送任務的工作隊列元素(Work Queue Element,WQE)放到發送隊列中,接收端軟件則需要給硬件下發一個表示接收任務的 WQE,這樣硬件才知道收到數據后放到內存中的哪個位置。

完成隊列(Completion Queue,CQ)與工作隊列緊密配合。CQ 中的元素是完成隊列元素(Completion Queue Element,CQE),如果說 WQE 是軟件下發給硬件的 “任務書”,那么 CQE 就是硬件完成任務之后返回給軟件的 “任務報告”。CQE 中描述了某個任務是被正確無誤地執行,還是遇到了錯誤,如果遇到錯誤,還會說明錯誤的原因。每個 CQE 都包含某個 WQE 的完成信息,當發送端或接收端的硬件完成任務后,會生成 CQE 并放置到 CQ 中,上層應用通過輪詢 CQ 來獲取任務的完成信息,從而得知數據傳輸的狀態和結果,以便進行后續的處理操作。

為了更清晰地展示數據傳輸過程中各組件的交互關系,以下是一個簡單的序列圖:

@startuml
actor 發送端應用程序 as SenderApp
actor 接收端應用程序 as ReceiverApp
participant 發送端硬件 as SenderHW
participant 接收端硬件 as ReceiverHW
participant 發送隊列 as SendQueue
participant 接收隊列 as ReceiveQueue
participant 完成隊列 as CompletionQueue

SenderApp -> SendQueue: 提交發送任務(WQE)
SendQueue -> SenderHW: 通知有任務
SenderHW -> 發送端內存: 讀取數據
SenderHW -> ReceiverHW: 發送數據
ReceiverHW -> 接收端內存: 寫入數據
ReceiverHW -> ReceiveQueue: 放置接收完成信息
ReceiverApp -> ReceiveQueue: 輪詢接收完成情況
SenderHW -> CompletionQueue: 放置發送完成信息(CQE)
SenderApp -> CompletionQueue: 輪詢發送完成情況
@enduml

在這個序列圖中,發送端應用程序將發送任務的 WQE 提交到發送隊列,發送隊列通知發送端硬件有任務待處理,發送端硬件從內存讀取數據并發送給接收端硬件,接收端硬件將數據寫入內存后,在接收隊列放置接收完成信息,同時在完成隊列放置發送完成信息,發送端和接收端應用程序通過輪詢相應隊列來獲取任務完成情況,從而實現了 RDMA 數據的可靠傳輸和任務的協調調度。這種通過隊列對和完成隊列的協同工作機制,使得 RDMA 能夠高效地進行數據傳輸,充分發揮其低延遲、高帶寬的優勢,滿足各種對網絡性能要求苛刻的應用場景的需求。

四、RDMA的應用領域

4.1數據中心網絡的變革

在大規模數據中心中,RDMA 技術正發揮著至關重要的作用,深刻改變著服務器間的通信模式。傳統的 TCP/IP 通信方式在數據中心的海量數據傳輸場景下,往往顯得力不從心,存在著高延遲、低帶寬利用率以及 CPU 資源消耗大等問題。而 RDMA 技術的出現,猶如一場及時雨,為這些問題提供了有效的解決方案。

以云存儲服務為例,當用戶請求從云端下載或上傳大量數據時,使用 RDMA 技術可以顯著加速數據的傳輸過程。在一個擁有數千臺服務器的大型數據中心中,采用 RDMA 技術的云存儲系統,其數據傳輸速度相比傳統方式可提升數倍甚至更高。這意味著用戶能夠更快地獲取所需的數據,大大提高了用戶體驗。同時,對于數據中心的運營者來說,這也意味著能夠在相同的時間內處理更多的用戶請求,從而提高了服務的效率和競爭力。

在分布式數據庫系統中,RDMA 同樣展現出了強大的優勢。在進行大規模數據的分布式查詢和事務處理時,RDMA 技術能夠實現服務器之間的高速數據交互,大大降低了數據傳輸的延遲。這使得數據庫系統能夠更快速地響應復雜的查詢請求,提高了事務處理的效率和并發能力。例如,在一些大型電商平臺的訂單處理系統中,RDMA 技術的應用使得訂單的查詢和處理速度得到了顯著提升,能夠在高并發的情況下依然保持穩定的性能,確保了平臺的高效運行。

此外,在應對數據中心內部的海量數據遷移和備份場景時,RDMA 技術也能夠發揮其高帶寬、低延遲的優勢,大大縮短數據遷移和備份的時間窗口,減少對業務的影響,提高數據中心的整體可靠性和可用性。

4.2高性能計算的得力助手

在高性能計算(HPC)領域,RDMA 技術已經成為不可或缺的關鍵技術之一,為科學研究和工程計算等領域的發展提供了強大的動力。

在氣象模擬領域,科學家們需要處理海量的氣象數據,并進行復雜的數值計算,以預測天氣變化和氣候趨勢。傳統的網絡通信方式往往無法滿足這種大規模數據處理和高速計算的需求,而 RDMA 技術的應用則帶來了顯著的改變。通過 RDMA,計算節點之間能夠實現高速的數據共享和交互,大大縮短了數據傳輸的時間,從而加速了整個氣象模擬的計算進程。例如,在一個全球氣候模擬項目中,使用 RDMA 技術后,數據傳輸的延遲降低了數倍,使得模擬計算的效率得到了大幅提升,原本需要數周甚至數月才能完成的模擬任務,現在能夠在更短的時間內得到結果,為氣象研究提供了更及時、準確的支持。

在基因測序領域,RDMA 同樣發揮著重要作用。基因測序會產生海量的基因數據,對這些數據的分析和處理需要強大的計算能力和高效的數據傳輸能力。RDMA 技術使得基因測序設備與計算節點之間能夠快速傳輸數據,減少了數據傳輸的瓶頸,提高了測序數據的處理速度。這不僅有助于加速科研項目的進展,例如在癌癥基因研究、遺傳疾病診斷等方面,能夠更快速地分析基因數據,為疾病的診斷和治療提供更有力的依據,而且也為基因技術在醫學、農業等領域的廣泛應用奠定了基礎。

許多科研機構和企業在其高性能計算集群中廣泛應用 RDMA 技術,取得了顯著的性能提升和科研成果加速的效果。例如,某知名科研機構在其超級計算機上采用 RDMA 技術后,在一系列復雜的科學計算任務中,計算效率提高了 30% 以上,使得原本需要耗費大量時間和資源的科研項目能夠更快地取得突破,推動了相關學科的發展和技術的進步。

4.3分布式存儲系統的優化

在分布式存儲系統中,RDMA 技術的應用為數據的高效存儲和快速訪問提供了有力保障。傳統的分布式存儲架構在數據讀寫過程中,往往需要經過多個中間節點的處理和數據復制,這會導致較高的延遲和較低的讀寫性能。而 RDMA 技術的出現,使得存儲節點和計算節點之間能夠直接進行快速的數據傳輸,繞過了中間節點的繁瑣處理,大大減少了數據復制和中間節點處理的開銷。

以 Ceph、GlusterFS 等分布式存儲系統為例,當計算節點需要從存儲節點讀取大量數據時,RDMA 技術能夠實現數據的直接內存訪問,避免了傳統方式下數據在多個層次之間的拷貝和協議棧的處理,從而顯著提高了數據讀取的速度。在實際的應用場景中,如大規模的視頻存儲和在線播放平臺,使用 RDMA 技術的分布式存儲系統能夠更快地響應用戶的播放請求,減少視頻的緩沖時間,提升用戶的觀看體驗。

在數據寫入方面,RDMA 同樣表現出色。例如,在一些對數據寫入速度要求極高的大數據存儲場景中,如實時數據采集和存儲系統,RDMA 技術能夠確保數據快速、準確地寫入存儲節點,提高了存儲系統的寫入性能和響應速度,保證了數據的及時性和完整性。

此外,RDMA 技術還能夠提高分布式存儲系統的可靠性和可用性。通過減少中間節點的故障點,以及快速的數據恢復和同步能力,RDMA 技術使得分布式存儲系統在面對節點故障或網絡異常時,能夠更快速地進行數據的冗余備份和恢復,確保數據的安全性和可用性,為企業的關鍵業務數據提供了更可靠的存儲解決方案。

五、RDMA通信過程

為了執行 RDMA 操作,首選需要建立與遠程主機的連接和適當的認證。實現這些的機制是隊列對(QP) 。與標準的 IP 協議棧類似,一個 QP 大概等同于一個接字(socket)。QP 需要在連接兩端進行初始化。連接管理器(CM)用來在 QP 建立之前進行 QP 信息的交換。一旦一個 QP 建立起來, verbs API 就可以用來執行 RDMA 讀/寫和原子操作。與套接字的讀/寫類似的連續收/發操作也能執行。RDMA的操作過程大致如下:

  • 當一個應用程執行度或者寫請求時,不執行任何數據復制,再不需要任何內核參與的條件下,RDMA請求從用戶空間中的應用發送到本地NIC網卡。
  • NIC讀取緩沖區的內容,并通過網絡傳輸到遠程NIC。
  • 在網絡上傳輸的RDMA信息包括虛擬地址、內存鑰匙和數據本身。請求既可以完全在用戶空間中處理,又或者在應用一直睡眠到請求完成時的情況下通過系統級中斷處理。RDMA操作使應用可以從一個遠程應用的內存中讀取數據或向這個內存中寫數據。
  • 目標NIC確認內存鑰匙,直接將數據寫入應用緩存中,用于操作的遠程虛擬內存地址包含在RDMA信息中。

在RDMA操作中,Read/Write是單邊操作,秩序本地端明確信息的源和目的地址,遠端應用不必感知此次通信,數據的讀或寫都通過RDMA在RNIC與應用Buffer之間完成,再由遠端RNIC封裝成消息返回到本地端。Send/Receive是雙邊操作,即必須要遠端的應用感知參與才能完成收發,在實際中,Send/Receive多用于連接控制類報文,而數據報文是通過Read/Write來完成的。

5.1單向通信-讀Read

圖片圖片

  • 首先A、B建立連接,QP已經創建并初始化。
  • 數據被存檔在B的buffer,地址為VB,注意VB是提前注冊到B的RNIC,并且它是一個Memory Region,并拿到返回的local key,相當于RDMA操作這塊buffer的權限。
  • B把數據地址VB,key封裝到專用報文傳送到A,這相當于B把數據buffer的操作權交給了A。同時B在他的WQ中注冊一個WR,用于接收數據傳輸的A返回的狀態。
  • A在收到B發送過來的數據地址VB和R_key之后,RNIC會把它們連同本地存儲數據的地址VA封裝到Read請求中,將這個請求消息發送到B,這個過程A、B兩端不需任何軟件參與,就可以將B中的數據存儲到A的VA虛擬地址。
  • A在存儲完成后,向B返回數據傳輸的狀態信息。

5.2 單向通信-寫Write

圖片圖片

  • 首先A、B建立連接,QP已經創建并初始化。
  • 數據遠端的目標存儲空間buffer的地址為VB,注意VB是提前注冊到B的RNIC,并且它是一個Memory Region,并拿到返回的local key,相當于RDMA操作這塊buffer的權限。
  • B把數據地址VB,key封裝到專用報文傳送到A,這相當于B把數據buffer的操作權交給了A。同時B在他的WQ中注冊一個WR,用于接收數據傳輸的A返回的狀態。
  • A在收到B發送過來的數據地址VB和R_key之后,RNIC會把它們連同本地存儲數據的地址VA封裝到Write請求中,這個過程A、B兩端不需任何軟件參與,就可以將A中的數據存儲到B的VB虛擬地址。
  • A在發送數據完成后,向B返回數據傳輸的狀態信息。

5.3雙向通信-Send\Recv

圖片圖片

  • 首先,A和B都要創建并初始化好各自的QP、CQ。
  • A、B分別想自己的WQ中注冊WQE,對于A來說,WQ=SQ,WQE描述指向一個等待被發送的數據;對于B,WQ=RQ,WQE描述指向一塊用于存儲數據的Buffer。
  • A的RNIC異步調度輪到A的WQE,解析到這是一個Send消息,從Buffer中直接向B發送數據。數據流到達B的RNIC后,B的WQE被消耗,并把數據直接存儲到WQE指向的存儲位置。
  • AB通信完成后,A的CQ中會產生一個完成消息CQE表示發送完成。同時,B的CQ中會產生一個完成消息CQE表示接收完成。每個WQ中的WQE的處理完成都會產生一個CQE。
責任編輯:武曉燕 來源: 深度Linux
相關推薦

2016-08-18 00:21:12

網絡爬蟲抓取網絡

2019-02-13 15:38:09

存儲虛擬化云計算

2020-03-31 14:40:24

HashMap源碼Java

2025-05-20 13:52:12

GPU集群微軟

2017-04-17 13:10:09

神經網絡人工智能網絡

2025-07-11 01:45:00

SIM卡模塊識別

2024-08-12 12:30:27

2021-08-02 06:56:19

TypeScript編程語言編譯器

2025-01-20 09:15:00

iOS 18.3蘋果iOS 18

2022-07-27 15:56:58

固態硬盤網絡存儲

2019-07-01 09:22:15

Linux操作系統硬件

2019-05-22 09:50:42

Python沙箱逃逸網絡攻擊

2021-08-05 15:12:30

Anolis OS 國密生態國產化

2022-08-18 17:21:51

人臉識別

2022-07-05 10:03:19

網絡安全網絡攻擊

2019-06-17 10:01:10

SAN網絡運維

2021-05-11 10:40:29

JUCAQSJava

2023-04-10 11:35:31

評估模型業務流程

2022-04-26 13:41:16

區塊鏈比特幣數據庫

2022-12-07 07:38:07

存儲管理HSM
點贊
收藏

51CTO技術棧公眾號

国产精品中文字幕久久久| 亚洲欧洲视频在线| 男人添女荫道口图片| 撸视在线观看免费视频| 美女视频免费一区| 国内精品视频久久| 嘿嘿视频在线观看| 国产 日韩 欧美 综合 一区| 色婷婷激情久久| 国产肉体ⅹxxx137大胆| 东凛在线观看| 成人黄页毛片网站| 91精品国产综合久久香蕉的用户体验| 国产亚洲精品久久久久久无几年桃 | 一区二区三区中文字幕精品精品| 久久国产精品-国产精品| 一区二区国产欧美| 免费亚洲婷婷| 97精品国产97久久久久久春色| www亚洲色图| 久久九九热re6这里有精品| 欧美私人免费视频| 国产深夜男女无套内射| 超鹏97在线| 欧美激情综合在线| 久久久久资源| 欧美性猛交 xxxx| 国产在线乱码一区二区三区| 日本精品视频在线播放| 日本三级免费看| 欧美一区国产在线| 丝袜亚洲另类欧美重口| 亚洲精品乱码久久久久久久久久久久| 成人影院中文字幕| 欧美大片一区二区三区| 色18美女社区| 亚洲三级在线| 欧美系列在线观看| 亚洲人成色77777| 人人草在线视频| 亚洲动漫第一页| 日韩一级片免费视频| 先锋成人av| 亚洲激情中文1区| 波多野结衣激情| 日本在线观看| 亚洲人成精品久久久久| 在线码字幕一区| 国产51人人成人人人人爽色哟哟 | 在线免费三级电影网站| 午夜视频一区二区| 奇米精品一区二区三区| 国内激情视频在线观看| 精品久久久久久亚洲国产300| 激情五月婷婷六月| brazzers在线观看| 精品免费在线视频| 91黄色小网站| 欧美片第1页| 91成人在线免费观看| 亚洲 中文字幕 日韩 无码| 三级成人黄色影院| 欧美午夜精品久久久| av在线网址导航| 成人在线视频国产| 精品国产乱码久久久久久久 | 国产青青草视频| 国产麻豆9l精品三级站| www.成人三级视频| 色综合久久网女同蕾丝边| 久久久久久久久久久久久夜| 神马影院午夜我不卡影院| 2019中文字幕在线视频| 亚洲男女毛片无遮挡| 日韩成人手机在线| 毛片电影在线| 欧美群妇大交群中文字幕| 中文字幕一区二区在线观看视频| 一区二区亚洲视频| 日韩精品电影网| 美国黄色特级片| 欧美精品99| 青青在线视频一区二区三区| 久久久999久久久| 国产精品一区二区三区四区| 精品国产乱码久久久久久郑州公司 | 欧美亚韩一区二区三区| 日本中文一区二区三区| 97中文在线| 日本一级在线观看| 亚洲视频在线观看一区| 无码人妻少妇伦在线电影| 日韩欧美精品电影| 欧美xxxxx牲另类人与| 青青草福利视频| 伊人久久大香线蕉精品组织观看| 98视频在线噜噜噜国产| 一区二区三区亚洲视频| 99精品热视频| 伊人久久大香线蕉av一区| 不卡一本毛片| 欧美精品自拍偷拍动漫精品| 国产精品1000部啪视频| 欧美一区高清| 国产日韩欧美黄色| 瑟瑟在线观看| 亚洲一本大道在线| 午夜剧场在线免费观看| 亚洲精品亚洲人成在线观看| 久久视频在线免费观看| 久久久久在线视频| 成人福利视频在线看| 亚洲一区不卡在线| 神马午夜在线视频| 日韩一区二区三区视频| 69xxx免费| 香蕉国产精品偷在线观看不卡| 91深夜福利视频| 国产精品四虎| 色悠悠久久综合| 精品国产一区在线| 欧美天天在线| 亚洲一区二区三区成人在线视频精品 | 久久av影院| 亚洲视频欧美视频| 日本三级欧美三级| 高清在线观看日韩| 六月婷婷激情网| 欧美亚洲综合视频| 亚洲性视频网址| 久久99国产综合精品免费| 成人av电影免费在线播放| 黄色录像特级片| 亚洲色图综合| 日日骚久久av| 欧美性受xxx黑人xyx性爽| 久久蜜臀中文字幕| 92看片淫黄大片一级| 久草精品视频| 97精品视频在线播放| 免费看黄网站在线观看| 亚洲夂夂婷婷色拍ww47| 台湾佬美性中文| 欧美黄在线观看| 成人动漫在线视频| 黄页在线观看免费| 亚洲福利视频网站| 国产一级视频在线播放| 成人av在线网站| 久久亚洲中文字幕无码| 欧美日韩一本| 欧美有码在线观看| 男女污视频在线观看| 在线观看视频一区二区| 麻豆一区在线观看| 国产一区二区0| 菠萝蜜视频在线观看入口| 白嫩白嫩国产精品| 韩国三级电影久久久久久| 亚洲欧美色视频| 日本道在线观看一区二区| 日韩精品电影一区二区三区| 九九九久久久精品| 色爽爽爽爽爽爽爽爽| 日韩精品中文字幕一区二区| 久久久免费高清电视剧观看| 亚洲 美腿 欧美 偷拍| 日韩欧美中文免费| 亚洲精品成人av久久| 加勒比av一区二区| 97中文字幕在线| 色婷婷精品视频| 国产精品高潮在线| av免费在线免费| 亚洲国产成人精品电影| 日日夜夜狠狠操| 亚洲欧美在线视频| 99精品一区二区三区无码吞精| 亚洲欧美成人| 正在播放一区二区三区| 动漫av一区| 国产精品久久久久av免费| 国产午夜精品久久久久免费视| 欧美mv和日韩mv的网站| 毛片在线免费播放| 有坂深雪av一区二区精品| 免费在线观看成年人视频| 六月丁香婷婷久久| 欧洲精品一区二区三区久久| 成人亚洲一区二区| 国产精品传媒毛片三区| 久久久成人av毛片免费观看| 欧美丰满少妇xxxxx| 国产黄在线看| 亚洲成年网站在线观看| 一级片aaaa| 欧美视频中文字幕在线| 日本女人性生活视频| 99re亚洲国产精品| 日本一二三区在线| 日精品一区二区三区| 99久久免费观看| 成人三级视频| 久久精品成人一区二区三区蜜臀| 99精品女人在线观看免费视频| 91成人在线视频| 91在线中字| 日韩在线视频观看| 久草在线青青草| 亚洲国产精品久久| 国产91视频在线| 欧美视频一区在线观看| 可以免费在线观看的av| 亚洲乱码国产乱码精品精的特点| 三级男人添奶爽爽爽视频| 国产一级精品在线| 污版视频在线观看| 久久九九99| 成人免费在线小视频| 国产一区美女| 久久视频免费在线| 婷婷久久国产对白刺激五月99| 欧美精品一区二区三区在线看午夜| 亚洲网一区二区三区| 91日本在线观看| 欧美一级做一级爱a做片性| 国产精品第七影院| 日韩精品99| 日韩美女视频免费看| √8天堂资源地址中文在线| 欧美老少做受xxxx高潮| 国产在线观看a| 精品久久久av| 久久精品视频观看| 久久久91精品| 国产区在线看| 成年人精品视频| 伊人电影在线观看| 色综合91久久精品中文字幕| 99热国产在线| 久久久久久久激情视频| 欧美亚洲天堂| 色综合视频网站| 国产美女福利在线观看| 欧美激情视频网| 8x8ⅹ拨牐拨牐拨牐在线观看| 欧美精品xxx| 成人黄色动漫| 欧美在线欧美在线| 韩国成人漫画| 国产精品久久精品| 午夜精品久久久久久毛片| 成人妇女免费播放久久久| 亚洲狼人在线| av一区二区在线看| 日韩mv欧美mv国产网站| 欧美精品一区三区在线观看| 精品美女久久久| 亚洲免费不卡| 欧美激情1区2区| 国产69精品久久久久999小说| 亚洲精品婷婷| 成人精品小视频| 久久国产精品无码网站| 欧美体内she精高潮| 成人一区二区视频| 欧美成人午夜精品免费| 久久久久久久综合| 国产农村妇女精品一区| 一区二区免费在线播放| 中日韩精品视频在线观看| 欧美性高潮在线| 亚洲系列在线观看| 欧美电影免费提供在线观看| 日色在线视频| 日韩中文字幕在线精品| 国产精品—色呦呦| 国产成人鲁鲁免费视频a| 亚洲国产aⅴ精品一区二区三区| 亚洲综合在线做性| 图片婷婷一区| 综合国产精品久久久| 亚洲激情网站| 欧美日韩一区二区三区69堂| 成人免费视频一区| www色com| 亚洲成av人片一区二区梦乃 | 蜜臀av性久久久久蜜臀aⅴ| 成年人看片网站| 久久精品在线观看| 中文字幕亚洲欧美日韩| 日韩欧美国产视频| 99精品久久久久久中文字幕 | 国产欧美一区二区三区另类精品| 免费成人高清在线视频theav| 黄色高清视频网站| 亚洲欧美日本日韩| 一本之道在线视频| 国产日产精品一区| 日本五十熟hd丰满| 欧美卡1卡2卡| 麻豆app在线观看| 欧美精品久久久久久久免费观看| 97欧美成人| 久热国产精品视频一区二区三区| 91精品国产乱码久久久久久| 精品久久久久av| www.在线成人| 久久av高潮av无码av喷吹| 欧美日韩1区2区| 激情在线视频| 2020久久国产精品| 视频精品国内| 最近中文字幕免费mv| 日韩精品色哟哟| 日韩一级视频在线观看| 亚洲一区二区精品视频| 中文字幕在线视频第一页| 亚洲老司机av| 蜜桃视频在线网站| 国内视频一区| 亚洲黄色天堂| 26uuu国产| 亚洲精品成人a在线观看| 国产又黄又粗又猛又爽| 亚洲最大在线视频| 亚洲天堂一区二区| 免费日韩av电影| 亚洲欧美日韩综合国产aⅴ| 亚洲精品乱码久久| 亚洲国产cao| 亚洲伦理在线观看| 久久99久久99精品免观看粉嫩| 精品国产亚洲一区二区三区在线 | 国产精品最新自拍| 伊人久久一区二区三区| 亚洲午夜视频在线| 亚洲国产精彩视频| 欧美黄色免费网站| 澳门成人av| 欧美精品自拍视频| 久久综合久久综合久久| 中文字幕av影院| 亚洲色图17p| 精品裸体bbb| 亚洲在线观看一区| 久久黄色级2电影| 91嫩草丨国产丨精品| 91精品国产综合久久久久久久久久 | 国产中文字幕视频| 亚洲午夜久久久久久久| 国产综合色在线观看| 国产系列第一页| 国产福利电影一区二区三区| 1024手机在线视频| 亚洲国产精品久久久久| 日韩精品极品| 性欧美.com| 国产一区啦啦啦在线观看| 欧美日韩国产精品一区二区三区| 精品久久人人做人人爽| 美女91在线看| 天堂√在线观看一区二区| 精品一区二区三区免费播放 | 香蕉视频网站在线观看| 亚洲free性xxxx护士白浆| 亚洲国内精品| 中文字幕网站在线观看| 欧美老人xxxx18| 18aaaa精品欧美大片h| 欧美日韩在线精品一区二区三区| 轻轻草成人在线| 黄色在线观看免费| 亚洲人成电影网站色| 精品国产亚洲一区二区三区在线 | 中文字幕精品一区二区精品| 精品国产亚洲一区二区三区在线 | 丁香网亚洲国际| 久久人妻免费视频| 久久天天躁狠狠躁夜夜爽蜜月| 成人自拍在线| 亚欧在线免费观看| 亚洲乱码中文字幕| 经典三级在线| 97netav| 秋霞电影一区二区| 国产极品美女高潮无套嗷嗷叫酒店 | 国产美女久久久| 精品电影一区| 青青草自拍偷拍| 亚洲国产精品成人va在线观看| 亚洲天堂1区| 91丨porny丨探花| 亚洲欧洲日韩在线| 九九热视频在线观看| 超碰97在线资源| 免费成人av在线| 国产又爽又黄的视频| 久久激情视频免费观看| 亚洲自拍都市欧美小说|