DEV Community

JH5
JH5

Posted on • Originally published at Medium

世界上沒有串不起來的記憶體資源

世界上沒有串不起來的記憶體資源

圖片來源:Remote Direct Memory Access (RDMA)

UpdatedMarch 24, 2026•1 min read

世界上沒有串不起來的記憶體資源

JJhihHao Wu**近期研究重點包含 AI Agent 的供應鏈攻擊、PII 偵測模型評估,以及醫療 AI 在臨床流程中的安全落地。

在這裡,我分享深度技術實測報告(如 NVIDIA NeMo, WildGuard)與職場技術成長心得,致力於在 AI 浪潮中打造具備資安韌性的解決方案。

On this page

世界上沒有串不起來的記憶體資源RDMA 在Linux 中的核心元件1. HCA /RDMA-capable NIC2. /dev/infiniband/uverbs3. RDMA Network Device4. RDMA Link

世界上沒有串不起來的記憶體資源

Comparing traditional server-to-server (left) to RoCE server-to-server communications (right).

圖片來源:Remote Direct Memory Access (RDMA)

在傳統的計算架構中,每個經過網路介面卡的封包都需要經過CPU和作業系統(OS)的層層處理,耗時又耗力,但是如果有一種技術,能讓兩台機器的節點記憶體之間建立一條「私人VVIP」通道來共享與傳送資料,是不是聽起來可以又暴力又直覺?這就是 RDMA (遠端直接記憶體存取, Remote Direct Memory Access) 的核心思想,RDMA 允許應用程式繞過兩端機器的 CPU、快取和作業系統,直接讀寫遠端機器的記憶體,這種「截彎取直」的方式帶來了超低延遲和極高的吞吐量,使得高效能運算 (HPC)、高效能儲存等領域有了滿大的進展,而GPU當來也有 GPUDirect RDMA,這部分後面我們再補實際的範例來看。

RDMA 在Linux 中的核心元件

Interface Info

1. HCA /RDMA-capable NIC

用一班網路的概念來理解,這就是RDMA 的實體硬體卡(主機通道配接器 - Host Channel Adapter),例如 Mellanox ConnectX 系列的網卡,內部有設計專門的電路來卸載網路協定,實現記憶體的直接存取,一般來說,在 Linux 中會將其識別為 "RDMA 裝置",通常命名為 mlx5_0mlx5_1

2. /dev/infiniband/uverbs

這是由核心模組 ib_uverbs所提供讓應用程式可以直接從使用者空間呼叫 RDMA 的功能,例如建立佇列對 (Queue Pair)、註冊記憶體 (Memory Registration) 等需求,uverbs 介面會將這些使用者空間的請求傳遞給核心空間的 RoCE driver。驅動程式接收到指令後,會去操作底層的 RoCE 網路卡硬體,並在連線建立後,提供後續kernel Bypass的資料傳輸。

實際的流程應該會像下面這樣:

  • 應用程式 (App) -> uverbs (發出指令:我要發送資料) -> RoCE driver (執行指令:操作網卡發送資料)。

3. RDMA Network Device

這是我們所熟悉的標準 Linux 網路介面,在 InfiniBand (IB) 中通常是 ib0 這樣的介面,如果是 RoCE (RDMA over Converged Ethernet),就是常見的乙太網路介面,如 enp1s0f0,也專門用來處理普通的 TCP/IP 像 ping、SSH 這類一班常見的網路功能。

4. RDMA Link

當執行 rdma link show 指令時,RDMA Device(HCA / RDMA-capable NIC) 和其相關聯的網路介面 (RDMA Network Device) 之間的邏輯對應關係,並顯示它們的狀態。

# rdma link show  

link rxe0/1 state ACTIVE physical_state LINK_UP netdev enp1s0
Enter fullscreen mode Exit fullscreen mode

在支援 RoCE 的情況下,一個 RDMA 裝置 (例如 mlx5_0) 會與一個或多個網路介面 (例如 enp1s0f0) ,在功能上RDMA 裝置提供底層的 RDMA 功能,而網路介面則處理 TCP/IP 流量。

rdma link show 的指令輸出會讓你看到:

  1. RDMA 裝置的名稱(如 mlx5_0

  2. 它所綁定的網路介面名稱(如 enp1s0f0

  3. 兩者的狀態(如 LINK UPLINK DOWN

除了顯示 RDMA 裝置與其所依賴的網路介面之間的邏輯綁定狀態之外,當遇到到 RDMA 故障需要排除時,先確保這兩個層面都處於正常運作,再來做其他狀況的排除。

隨著現在的LLM模型的訓練與推論狀況越來越多元,在多個節點中的GPU運算也越來越倚賴網路直接的連線資源,下一篇我們再來以GKE上的Cluster範例來整理一些筆記。

# devops# kubernetes

Top comments (0)