跟網路通訊有關的資訊太雜亂了,整理了一下與 RDMA 相關的內容。有錯誤再麻煩告知,會盡速修正。

這篇是在整理各種「Direct 類」技術,特別是 RDMA,也包含其他像 DirectStorage 的技術,這些背後有一個共通核心:

盡量跳過中間層 → 減少 CPU 參與 → 減少資料複製次數 → 降低延遲、提高頻寬

RDMA by chatgpt

RDMA by chatgpt

OuO

下面先從 RDMA 的概念開始,依序介紹到底層網路、硬體,以及其他相關技術,中間會穿插一些具體的例子與數字。

Remote Direct Memory Access (RDMA) 是什麼?

  • 定義:讓一台機器可以直接讀寫另一台機器的記憶體,不需要經過對方 CPU 的干預
  • 重點:低延遲、高頻寬、節省 CPU 資源。
  • 支援的底層網路:InfiniBand、RoCE、iWARP 等不同技術都可以承載 RDMA。

可以把 RDMA 想像成:網路卡幫你把「遠端記憶體」變成像本機一樣可操作,只是權限與程式模型比較嚴格、也比較複雜。

一個具體的對比:

  • 傳統 TCP Socket:一次 request 往往要走 Kernel、Socket Buffer、複製多次記憶體,延遲可能是數十到數百 μs。
  • RDMA Read/Write:資料從對方記憶體直接進到本機記憶體 buffer,中間幾乎不打擾對方 CPU,延遲可以壓到個位數 μs 等級。

因此在高頻交易 (HFT)、分散式快取(例如 Memcached / Redis RDMA 版)、分散式資料庫(例如 FaRM 類型系統)等情境,常會採用 RDMA。

RDMA protocol stack;  source

RDMA protocol stack; source

OuO

RDMA 工作原理:Memory Registration + Queue Pair(簡化版)

前面說 RDMA 可以「直接存取遠端記憶體」,實際上在程式層面主要靠兩個核心概念:

  1. Memory Registration(記憶體註冊)
  2. Queue Pair(QP)+ Completion Queue(CQ)

Memory Registration(MR)

  • RDMA NIC 不會直接拿虛擬位址來用,應用程式必須先把一塊 buffer「註冊」給 NIC:
    • OS 幫你把這塊記憶體 pin 住(不會被換出到 swap)。
    • NIC 建一份「虛擬位址 → 實體位址」的對照表,並產生一組 key(L_Key / R_Key)。
  • 之後 RDMA Read/Write 就是拿著「遠端位址 + key」去讀寫那塊記憶體,如果 key 不對或範圍超出,就會被 NIC 擋掉。

這也是為什麼 RDMA 應用常被說「比較難寫」:你要自己管理好哪些 buffer 有被註冊、不能亂 free。

Queue Pair(QP)和 Completion Queue(CQ)

RDMA 不像 TCP 是「一條 byte stream」,而是用佇列來溝通:

  • 每個連線有一組 Queue Pair(QP):
    • Send Queue(SQ):放「我要送什麼」的工作(Work Request)。
    • Receive Queue(RQ):放「我準備好接多少 buffer」的工作。
  • NIC 處理完後,會在 Completion Queue(CQ)裡丟一個完成事件,程式再去 poll CQ 知道哪一個工作做完了。

程式的典型流程長得像:

  1. 呼叫 verbs API 建立 QP、CQ,註冊好要用的記憶體(MR)。
  2. 把「我要傳的 buffer」貼成 send work request 丟到 SQ。
  3. 對方預先在 RQ 裝好 receive work request(含目標 buffer)。
  4. NIC 之間透過 RDMA 把資料搬好,最後在雙方的 CQ 中留下完成事件。

RDMA Queue Pair / Completion Queue 示意圖;  source

RDMA Queue Pair / Completion Queue 示意圖; source

OuO

RDMA 底層網路選項

不同底層網路選項 by gemini

不同底層網路選項 by gemini

OuO

InfiniBand

  • 定義:一種專門設計給高效能運算 (HPC) 環境的高速網路技術。
  • 重點:
    • 速度非常快(高吞吐量 high throughput、低延遲 low latency),現在常見 200Gbps、400Gbps。
    • 內建支援 RDMA,是 RDMA 最「原生」的環境之一。
  • 簡單說:InfiniBand 是一種同時涵蓋「物理層 + 傳輸層」的專用網路技術,天生就為 RDMA 而生。

具體數字上的差異:

  • 一般資料中心 10GbE / 25GbE 的 TCP 延遲,可能是 30-100 μs 起跳。
  • 同樣規模下,InfiniBand 叢集可以把一趟通訊壓到 1-2 μs,差一個數量級以上。

因此很多 HPC 叢集與 Top500 超級電腦的互聯網路,常使用 InfiniBand 或類似規格。

RDMA over Converged Ethernet (RoCE)

  • 定義:讓 RDMA 可以在以太網路 (Ethernet) 上跑。
  • RoCE v1 (RoCE):
    • 工作在 Layer 2(資料鏈結層)。
    • 限制在同一個以太網域內 (L2 broadcast domain),不能跨 Router。
  • RoCE v2 (RoCEv2):
    • 工作在 Layer 3(網路層,IP 層)。
    • 可以跨 Router,支援更大型的資料中心部署。

RoCE 的好處是可以沿用既有的 Ethernet 生態,但為了保證延遲與可靠性,網路調教會比一般 TCP/IP 困難很多。

一個實際的部署方式:

  • 大型雲端資料中心,把 Spine/Leaf 交換器都換成支援 PFC/ECN 的交換器。
  • 機櫃內的伺服器 NIC 支援 RoCEv2,跑 100GbE 或 200GbE。
  • 上層服務(例如分散式儲存、AI 訓練框架)直接用 RDMA verbs / libibverbs 訪問遠端記憶體或 NVMe-oF 目標。

iWARP

  • 定義:讓 RDMA 跑在 傳統 TCP/IP 網路 上的協定。
  • 特點:
    • 完全走 TCP/IP,所以用一般 Ethernet 也能跑,不需要像 RoCE 一樣要求 Lossless Ethernet。
    • 延遲稍高,但部署相對簡單(因為可以沿用既有的 L3 TCP/IP 網路架構)。
  • 場景:在已經有大規模 L3 TCP/IP 網路的資料中心中,若想導入 RDMA 功能,可以在新採購或汰換伺服器時選用支援 iWARP 的 NIC,無需針對整體網路做類似 RoCE 那樣的大幅度調整。

RDMA 相關硬體

RDMA-capable NIC (rNIC)

  • 定義:支援硬體 RDMA 的特製網路卡,例如 Mellanox ConnectX 系列。
  • 特點:
    • 內建 RDMA Engine,可以在 NIC 上處理 RDMA 協定。
    • 依型號支援 RoCE、InfiniBand,有些也支援 iWARP。

這種 NIC 是 RDMA 世界的常見配備,沒有它時,許多 RDMA 功能就只能以軟體模擬方式提供。

在雲端平台上,機型名稱有時會直接顯示是否具備 RDMA 能力,例如:

  • AWS:c7gnp4d 等,背後就是帶有高階 rNIC / InfiniBand 的機型。
  • Azure:HBv3ND A100 v4 等 HPC / GPU 機型,也會標出 InfiniBand 200Gbps / 400Gbps。

選擇這類機型時,通常就代表底層已配備支援 RDMA 的 NIC。

Networking Port; RJ45 vs SFP - Josh Covington March 28, 2023;  source

Networking Port; RJ45 vs SFP - Josh Covington March 28, 2023; source

OuO

有些 Infiniband 使用類似 QSFP 外型 (QSFP+/QSFP28/QSFP56/QSFP112),但不是 Ethernet 用的 QSFP+,是 InfiniBand 認證模組。

DPU (Data Processing Unit) 上的 RDMA 加速

  • 定義:像 NVIDIA BlueField 這種 DPU 裝置,本身內建 RDMA 處理能力,可以 offload 更多網路與安全相關負載。
  • 特點:
    • NIC + 多核 CPU + 加速引擎的混合體。
    • 可以在 NIC 端就做 Security / QoS / Overlay 解封裝 等工作。
  • 場景:雲端數據中心、超大規模部署(例如 AWS、Azure 內部大量使用這類裝置)。

DOCA vs. the CUDA runtime and developer kit stack - Sep 13, 2021 By Justin Betz;  source

DOCA vs. the CUDA runtime and developer kit stack - Sep 13, 2021 By Justin Betz; source

OuO

其他跟 RDMA 有關的技術

Soft-RDMA(Software RDMA)

  • 定義:用 CPU + Kernel 模擬 RDMA 行為的軟體實作。
  • 特點:
    • 硬體沒有 RDMA 支援時也能用。
    • 延遲與效能明顯不如真正的硬體 RDMA,但部署與開發比較省事。
  • 用途:
    • RDMA 應用程式開發與測試。
    • VM / 容器內部的模擬環境。

例如:本機只有普通 1GbE NIC,但如果想寫一個 RDMA Key-Value Store,可以用 Soft-RDMA 在多個 VM 之間模擬 RDMA API,等確定程式邏輯正常,再丟到 InfiniBand / RoCE 環境做壓測。

NVMe over Fabrics (NVMe-oF) with RDMA

  • 定義:讓 NVMe SSD 可以「跨網路」直接被存取,RDMA 是其中一個常見的底層通訊方式。
  • 協定選項:
    • NVMe/RDMA:用 RDMA 傳 NVMe 命令,效能最佳。
    • NVMe/TCP、NVMe/FC:其他常見實作,但通常延遲較高。
  • 場景:超高速分散式存儲系統,例如大型資料湖或分散式資料庫的底層存儲。

更具體的部署方式:

  • 多台儲存節點上各自掛 NVMe SSD,透過 NVMe-oF + RDMA 暴露成「遠端 NVMe 目標」。
  • 應用伺服器看到的是一片邏輯上的 NVMe 空間,實際上由多台機器的 NVMe 透過網路組成,延遲可能只比本機 NVMe 慢幾 μs 到十幾 μs,但容量可以水平擴充到數十 TB、數百 TB。

NVMe over Fabrics | Follow the Wire Series | Marvell Technology;  source

NVMe over Fabrics | Follow the Wire Series | Marvell Technology; source

OuO

RDMA over PCIe

  • 定義:把 RDMA 的傳輸機制搬到 PCIe 總線上,用於「主機內部裝置之間」的超高速通訊,而不是跨機器的網路。
  • 技術方向:Compute Express Link (CXL) 標準與這類概念十分接近。
  • 場景:GPU、FPGA、DPU 等異質加速器之間,做超低延遲資料交換。

RDMA 的「失敗風險」與網路調教

RDMA 通常假設網路環境「接近 Lossless」(不能隨便掉封包,否則重傳成本會放大),所以在 RoCE 場景下,資料中心常常要額外搭配這些技術:

  • PFC (Priority Flow Control)
  • ECN (Explicit Congestion Notification)
  • DCQCN (Data Center Quantized Congestion Notification)

這些都是為了在 Ethernet 上盡量模擬一個「對 RDMA 友善」的網路環境。沒調好時,RDMA 不但不快,還可能因為擁塞或 Head-of-Line Blocking 讓整個網路變得更難排錯。

實務上常見的問題包含:

  • 某一條鏈路出現輕微擁塞,但因為 PFC 設定不佳,整個交換器被反壅塞拖慢,RDMA 流量延遲升高。
  • 傳統 TCP 流量和 RDMA 流量混在同一個 Priority,互相干擾,導致 RDMA 效能低於預期,甚至不如普通 TCP。

其他 Direct 類技術

Direct IO

  • 定義:在存取硬碟 (Storage) 時,直接繞過 OS 的 Page Cache,從程式直接讀寫磁碟。
  • 常見場景:
    • 資料庫 (Database) 在做大量 IO 時,想避免多一次 Memory Copy 和 Cache 汙染。
    • 高效能儲存系統,自行管理快取策略。

例如:

  • MySQL / PostgreSQL 這類資料庫,通常會自己管理 Buffer Pool,如果再經過 OS Page Cache,會多一層快取,記憶體使用更難預測。
  • 透過 Direct IO,資料會從磁碟直接進到 DB 自己的 Buffer Pool,不會在 OS cache 裡再留一份。

GPU Direct(NVIDIA)

  • 定義:NVIDIA 提出的技術總稱,讓 GPU 之間,或 GPU 與其他裝置(例如 NIC、Storage)可以更直接地搬運資料,而不必繞過 CPU 和主記憶體
  • 重點:最大化 GPU 資源使用效率,特別重要於機器學習、深度學習與 HPC 場景。
  • 分成好幾種不同用途的子技術,每一種處理的是不同路徑的資料搬運問題。
名稱用途跨機器?
GPU Direct P2P同機器內多張 GPU 之間直接通訊
GPU Direct RDMAGPU ↔ NIC ↔ 另一台機器記憶體 / GPU
GPU Direct StorageGPU ↔ Storage (如 SSD) 直接搬資料

GPU Direct Peer-to-Peer (P2P)

  • 用途:讓同一台伺服器內,不同 GPU 之間可以直接存取彼此的記憶體
  • 特點:
    • GPU 之間透過 PCIe(或 NVLink 等)互相傳資料。
    • 不需要繞到 CPU memory 再轉一圈。
  • 場景:多 GPU 深度學習訓練,例如模型並行、資料並行訓練。

舉例:一台機器上有 8 張 GPU,在做資料並行訓練時,每一個 mini-batch 結束都要做 AllReduce,把梯度加總。沒有 P2P / NVLink 時,所有梯度都得先繞到 CPU memory 再分送出去;有 P2P / NVLink 時,GPU 之間可以直接互傳,梯度同步時間會明顯縮短。

GPU Direct P2P;  source

GPU Direct P2P; source

OuO

GPU Direct RDMA

  • 用途:讓 GPU 記憶體可以直接透過網路卡 (NIC) 傳到其他伺服器的 GPU 或 CPU。
  • 特點:
    • 典型搭配 InfiniBand 或 RoCE 網路。
    • 直接把「GPU ↔ GPU」或「GPU ↔ 遠端記憶體」的資料搬運壓到 NIC + RDMA 來做。
  • 場景:
    • 分散式深度學習訓練(例如多機多卡訓練大型 Transformer)。
    • HPC 叢集的數值運算(例如 CFD、分子動力學)。
    • GPU 直接寫入 Storage Server(例如分散式檔案系統的節點)。

GPU Direct RDMA;  source

GPU Direct RDMA; source

OuO

用文字示意一下資料路徑:

[機器 A GPU 記憶體]
GPU Direct RDMA
    - 多台儲存節點上各自掛 NVMe SSD,透過 NVMe-oF + RDMA 暴露成「遠端 NVMe 目標」。
[NIC (Ethernet / RoCE / InfiniBand)] ── RDMA ──> [NIC (機器 B)]
                                              [機器 B 記憶體 或 GPU]
  • MySQL / PostgreSQL 這類資料庫,通常會自己管理 Buffer Pool,如果再經過 OS Page Cache,會多一層快取,記憶體使用更難預測。
  • 在這些場景中,常見的 GPU 通訊庫是 NVIDIA NCCL(例如 PyTorch 的 DistributedDataParallel 或 DeepSpeed 背後多半都在呼叫 NCCL)。NCCL 會負責選擇適合的通訊拓樸(ring、tree 等),並在可用時利用 GPUDirect RDMA + InfiniBand / RoCE 來實作 AllReduce、AllGather 等操作。從「有沒有 NCCL」的角度,大致可以這樣理解:
    • 沒有 NCCL 時: 工程師要自己處理 GPU 間通訊、拓樸設計、RDMA 傳輸細節。
    • 使用 NCCL 時: 直接呼叫 NCCL API,由 NCCL 決定是否用 RDMA / GPUDirect,以及用什麼拓樸來做 AllReduce 等操作。

GPU Direct Storage (GDS)

  • 用途:讓 GPU 可以直接從 NVMe SSD 等存儲裝置讀取或寫入資料
  • 特點:
    • 資料不需先讀到 CPU memory 再複製到 GPU memory。
    • 對於資料集超大的訓練(例如 Llama 3 那種 TB 等級資料)特別有感。
  • 場景:各種需要高速資料載入的 GPU 工作負載。

資料路徑上的差異:

  • 沒有 GDS 時,資料路徑是「NVMe → CPU Memory → GPU Memory」,每一批次都要多一次複製。
  • 有了 GDS,路徑變成「NVMe → GPU Memory」,在多機多卡訓練大模型時,資料讀取端的瓶頸可以被大幅推後。

具體案例:DGX H100

DGX H100 是 NVIDIA 的旗艦 AI 訓練伺服器,可以用來說明前面介紹的各種技術如何實際整合在一起:

項目規格
GPU8× NVIDIA H100 80GB(SXM5)
機內 GPU 互連NVLink 4.0(900 GB/s 雙向)+ NVSwitch
InfiniBand NIC8× ConnectX-7 400Gbps(總計 3.2 Tbps)
Ethernet NIC2× ConnectX-7 100GbE(管理用)

各技術在 DGX H100 中的角色:

  • GPU Direct P2P + NVLink:同一台 DGX 內的 8 張 GPU 透過 NVLink 互連,單機內的 AllReduce 走 NVLink(900 GB/s),不需要經過 CPU memory。
  • GPU Direct RDMA + InfiniBand:每張 GPU 各配一張 400Gbps ConnectX-7,跨機器的梯度同步走 InfiniBand + GPUDirect RDMA,資料直接從 GPU 記憶體送出,不經過 CPU。
  • NCCL:PyTorch DDP / DeepSpeed 背後呼叫 NCCL,由 NCCL 自動決定機內走 NVLink、跨機走 InfiniBand。
  • GPU Direct Storage:訓練資料可以從 NVMe SSD 直接載入 GPU memory,減少 CPU 瓶頸。
  • NVMe-oF:在大型叢集中,訓練資料可能存放在遠端儲存節點,透過 NVMe-oF + RDMA 讓多台 DGX 共用同一個高速儲存池。
  • Ethernet 只做管理:SSH、監控、OS 管理流量走 100GbE Ethernet,訓練相關流量全部走 InfiniBand。

不同世代 DGX 的網路配置對照:

機型GPU機內互連跨機互連InfiniBand NIC
DGX A1008× A100NVLink 3.0 + NVSwitchInfiniBand HDR 200Gbps8× ConnectX-6
DGX H1008× H100NVLink 4.0 + NVSwitchInfiniBand NDR 400Gbps8× ConnectX-7
DGX B2008× B200NVLink 5.0 + NVSwitchInfiniBand NDR 400Gbps8× ConnectX-7

DirectStorage(Microsoft)

Windows 11 上推出的 DirectStorage,可以理解成「遊戲版」的 Direct 技術:

  • 遊戲素材(貼圖、幾何模型等)從 SSD 直接送到 GPU,而不是先經過 CPU 解壓再搬一次。
  • CPU 不用負責大量 IO + 解壓縮,可以把時間留給 AI、物理解算、遊戲邏輯等其他工作。

在支援 DirectStorage 的組合(PCIe 4.0/5.0 NVMe + 新一代顯示卡)下,遊戲進入地圖或載入大型場景時的讀取時間有機會縮短,並更容易實作邊玩邊載入場景的設計,減少長時間 loading 畫面。

總整理:幾種 RDMA / Direct 類硬體比較

類別傳輸協定網路需求主要特性延遲 (us)頻寬 (Gbps)常見硬體
InfiniBand NICInfiniBand 原生專有 IB 網路超低延遲、專用傳輸、硬體 RDMA~1-2 μs200-400 GbpsMellanox ConnectX-6/7
RoCE NICRoCEv1/v2 (UDP/IP)乙太網(需 PFC)低延遲、高普及率、對網路品質較敏感~2-5 μs100-400 GbpsMellanox, Broadcom, Intel NIC
iWARP NICTCP/IP普通乙太網部署簡單、不需要 PFC,但延遲較高~10-20 μs40-100 GbpsChelsio T5/T6, Intel E810
GPUDirect RDMAInfiniBand / RoCE專用網卡直連 GPUGPU 記憶體直接 RDMA 傳輸~1-2 μs(GPU 間)200-400 GbpsNVIDIA A100/H100 + ConnectX
SmartNIC / DPU自定義(RDMA + Offload)乙太網或 IBNIC 內建 Arm 核,offload 運算與封包處理~2-5 μs100-400 GbpsNVIDIA BlueField-2/3, Intel IPU
Storage RDMA (NVMe-oF)RoCE / IB專用網段Storage over RDMA,極速存取~5-10 μs100-200 GbpsNVMe-oF target cards
FPGA RDMA 加速卡自訂 RDMA 協定專有網路超低延遲客製化(常見於 HFT / 超算)~0.5-1 μs25-100 GbpsXilinx Alveo, Intel PAC

References

本文部分內容由ChatGPT-4o, GPT-5.1協助生成,作者具備相關專業能力,對 AI 產出內容進行審核與把關,並對文章的正確性負最終責任。若文中有錯誤之處,敬請不吝指正,作者將虛心接受指教並儘速修正。