RDMA Overview

RDMA Overview

Latency problems are harder because the speed of light is fixed; you can’t bribe God

—David Clark

近年來網路頻寬雖然大幅提升,kernel 處理封包的能力卻沒有顯著提高。為了更進一步提高頻寬跟降低延遲,RDMA 和 DPDK 等技術出現,跳過了 kernel 直接處理 packet。本篇將會介紹現今 RDMA 相關的技術,比較,以及一些問題。

High Level Overview

RDMA 技術基本上都是把 transport layer offload 到網卡上,避免使用 kernel 做封包處理,把 CPU 從 critical path 中拿除。顧名思義,這可以讓設備直接寫入其他設備的虛擬記憶體,在可控制的環境中達成 10 毫秒左右的傳輸延遲。但是傳統的 RDMA 有兩個很大的缺點:

  • 需要支援 RDMA 的 lossless network,也就是 Infiniband
  • 因而需要在環境中額外放 Infiniband switch 跟支援的網卡

更詳細的 RDMA 介紹可以看看邱牛的文章 RDMA Introduction

為什麼不在 Ethernet 上用 RDMA

好消息是當然可以在 Ethernet 上跑 RDMA。目前 Ethernet 上的 RDMA 技術分為兩大家:RoCE (RDMA over Converged Ethernet) 跟 iWARP (Internet Wide Area RDMA Protocol)
RoCE 是由 Mellanox 所提出,而 iWARP 則主要由 Intel 和 Chelsio 所支持。不過目前這兩大技術都有一些很大的缺點。

RoCE vs iWARP

Mellanox 比較 iWARP 跟 RDMA 的 network layer

iWARP 不需要在 lossless network 上運行,因為這項技術把整個 TCP/IP stack 都放到 NIC 內了。因而 iWARP 非常容易在現有環境中運作,只要換張支援 iWARP 的網卡即可。缺點顯而易見的就是效能相較較低,跟相對複雜、價錢更高的 NIC。

在另一方面,RoCE 用的是 UDP protocol,速度相較使用 TCP/IP 的 iWARP 快了一些。相對的就是仍然需要 lossless network 已獲得相對較佳的 performance,在 lossy network 下雖然仍然可以使用,但效能大打折扣。於是就有了 PFC (priority flow-control),來達成 Ethernet 上的 lossless network。Microsoft 為了在像 datacenter 中沒有 VLAN 的環境大規模部屬 PFC,設計了 DSCP-based PFC,讓 PFC 可以在 L3 下運作。此外 Microsoft 也在 SIGCOMM’16 發了一篇論文探討在大規模部屬的 RoCE 遇到的問題,包含 livelock, deadlock, pause frame storm 的問題。Lossless network 雖然確保了 RoCE 的效能,卻也因為複雜的設定造成了維運者的困難。

RDMA vs DPDK

DPDK 跟 RDMA 同樣的可以 bypass kernel,並使用 polling 的機制來獲取封包來減少 CPU 的消耗。Mellanox 認為 RDMA 仍然優於 DPDK 的原因在於所有的封包處理仍來是在 user space 進行,而 RDMA 則 offload 部分到 NIC 上。不過也有人認為 Mellanox 的說法並不合理,因為 RDMA 也需要在 busy polling 跟 even triggered 兩種模式擇一,前者消耗較多 CPU 資源,後者則會有較高的 latency。

總結

有很多的報告指出 RDMA 相較 TCP 能夠獲得很顯著的效能提升。然而最大的問題在 programmability、安全性、部屬與維運上。RDMA 在管理層面的複雜性造成其在大規模部屬上仍有其困難。最後還是老話一句,沒有最好的方案,只有最適合的方案。我們需要犧牲多少去獲得這些效能,以及其值不值得,在每個 deployment 都會有不一樣的答案。

Reference