世界上沒有串不起來的記憶體資源
圖片來源: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
世界上沒有串不起來的記憶體資源
圖片來源:Remote Direct Memory Access (RDMA)
在傳統的計算架構中,每個經過網路介面卡的封包都需要經過CPU和作業系統(OS)的層層處理,耗時又耗力,但是如果有一種技術,能讓兩台機器的節點記憶體之間建立一條「私人VVIP」通道來共享與傳送資料,是不是聽起來可以又暴力又直覺?這就是 RDMA (遠端直接記憶體存取, Remote Direct Memory Access) 的核心思想,RDMA 允許應用程式繞過兩端機器的 CPU、快取和作業系統,直接讀寫遠端機器的記憶體,這種「截彎取直」的方式帶來了超低延遲和極高的吞吐量,使得高效能運算 (HPC)、高效能儲存等領域有了滿大的進展,而GPU當來也有 GPUDirect RDMA,這部分後面我們再補實際的範例來看。
RDMA 在Linux 中的核心元件
1. HCA /RDMA-capable NIC
用一班網路的概念來理解,這就是RDMA 的實體硬體卡(主機通道配接器 - Host Channel Adapter),例如 Mellanox ConnectX 系列的網卡,內部有設計專門的電路來卸載網路協定,實現記憶體的直接存取,一般來說,在 Linux 中會將其識別為 "RDMA 裝置",通常命名為 mlx5_0 或 mlx5_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
在支援 RoCE 的情況下,一個 RDMA 裝置 (例如 mlx5_0) 會與一個或多個網路介面 (例如 enp1s0f0) ,在功能上RDMA 裝置提供底層的 RDMA 功能,而網路介面則處理 TCP/IP 流量。
rdma link show 的指令輸出會讓你看到:
RDMA 裝置的名稱(如
mlx5_0)它所綁定的網路介面名稱(如
enp1s0f0)兩者的狀態(如
LINK UP或LINK DOWN)
除了顯示 RDMA 裝置與其所依賴的網路介面之間的邏輯綁定狀態之外,當遇到到 RDMA 故障需要排除時,先確保這兩個層面都處於正常運作,再來做其他狀況的排除。
隨著現在的LLM模型的訓練與推論狀況越來越多元,在多個節點中的GPU運算也越來越倚賴網路直接的連線資源,下一篇我們再來以GKE上的Cluster範例來整理一些筆記。


Top comments (0)