本文是講演 How Ethernet RDMA Protocols iWARP and RoCE Support NVMe over Fabrics【1】的摘要。
如果 NVMe 存儲系統與主機是分離的,顯然需要某種 fabric 把它們連接,這樣主機才能使用存儲系統。目前,支持遠程連接的 fabric 包括:
- RDMA 協議:底層可以是以太網( RoCE 或者 iWARP )或者 Infiniband
- Fibre Channel 協議:底層可以是 FC 網絡或者以太網(FCoE)
一、為什么需要 RDMA ?
RDMA (Remote Direct Memory Access) 是一種繞過主機 (host-offload/host-bypass) 技術:一個應用(包括存儲)<--發送/接收數據-->另外一個(遠程)應用的內存空間。
- Source Application <-- (發送/接收、完成)隊列 --> 帶 RDMA 功能的網卡 <-- 可靠的網絡連接 --> 帶RDMA 功能的網卡 <-- (發送/接收、完成)隊列 --> Target Application

各種操作系統支持 RDMA :
- Windows Server: 從 Windows HPC Server 2008 開始支持 Network Direct userspace API ;從 Windows Server 2012 開始支持 Network Direct kernel API
- Linux: 從2004年開始,由 OpenFabrics Alliance 提供 userspace/kernel API , RHEL 和 SLES 已經自帶, Ubuntu 要自己安裝?
- FreeBSD 9.0+ 支持 OpenFabrics Alliance userspace/kernel API
具體來說, RDMA 技術特性帶來的好處如下圖所示:

二、用 RDMA 發送 NVMe 寫命令

三、兩種基於以太網的 RDMA 協議
第一種:以太網->IP->UDP->RoCE (RDMA over Converged Ethernet) v2
第二種:以太網->IP->TCP(去掉 TCP/IP 流量控制和管理)->iWARP

兩種協議的供應商上台系統不一樣,



【1】How Ethernet RDMA Protocols iWARP and RoCE Support NVMe over Fabrics https://www.brighttalk.com/webcast/663/185909