1. 程式人生 > >兩種乙太網 RDMA 協議: iWARP 和 RoCE

兩種乙太網 RDMA 協議: iWARP 和 RoCE

http://weibo.com/p/1001603936363903889917?mod=zwenzhang
本文是講演 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
 由上圖可知,應用程式可以從一臺(物理的或者虛擬的)機器直接傳送資料到另外一臺機器,這既提高了頻寬又降低了延遲、抖動和 CPU 消耗。 各種作業系統支援 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 技術特性帶來的好處如下圖所示:   NVMe 裝置延遲很低,這就要求網路延遲也必須很低, RDMA 正好滿足這一點。
二、用 RDMA 傳送 NVMe 寫命令
 以一個 NVMe 寫操作為例。 NVMe 主機驅動把寫命令及資料(從 NVMe 提交佇列取出一項)封裝一個與底層傳輸無關的命令膠囊(capsule);膠囊被放到主機 RDMA 網絡卡的傳送佇列中,由 RDMA_SEND 傳送出去;目標主機的 RDMA 網絡卡在接收佇列中收到這個膠囊,解除封裝,把 NVMe 命令及資料放到目標主機的記憶體中;目標主機處理 NVMe 命令及資料;完成後,目標主機封裝一個 NVMe 命令完成項,由 RDMA 傳輸到源主機。 三、兩種基於乙太網的 RDMA 協議
第一種:乙太網->IP->UDP->RoCE (RDMA over Converged Ethernet) v2 第二種:乙太網->IP->TCP(去掉 TCP/IP 流量控制和管理)->iWARP 不同協議的網絡卡之間並不相容,也就說支援 RoCE 協議的網絡卡不能與支援 iWARP 協議的網絡卡交換資料。
兩種協議的供應商上臺系統不一樣,  對底層網路基礎設施的要求也不一樣:
 瞭解更多細節, 【1】How Ethernet RDMA Protocols iWARP and RoCE Support NVMe over Fabrics https://www.brighttalk.com/webcast/663/185909