什麼是RDMA?

1. 概述

RDMA是Remote Direct Memory Access的縮寫,通俗的說可以看成是遠程的DMA技術,爲了解決網絡傳輸中服務器端數據處理的延遲而產生的。RDMA允許用戶態的應用程序直接讀取或寫入遠程內存,而無內核干預和內存拷貝發生。起初,只應用在高性能計算領域,最近,由於在大規模分佈式系統和數據中心中網絡瓶頸越來越突出,逐漸走進越來越多人的視野。

2. 分類

目前,大致有三類RDMA網絡,分別是InfinibandRoCEiWARP。其中,Infiniband是一種專爲RDMA設計的網絡,從硬件級別保證可靠傳輸 , 而RoCEiWARP都是基於以太網的RDMA技術,支持相應的verbs接口,如圖1所示。從圖中不難發現,RoCE協議存在RoCEv1和RoCEv2兩個版本,主要區別RoCEv1是基於以太網鏈路層實現的RDMA協議(交換機需要支持PFC等流控技術,在物理層保證可靠傳輸),而RoCEv2是以太網TCP/IP協議中UDP層實現。從性能上,很明顯Infiniband網絡最好,但網卡和交換機是價格也很高,然而RoCEv2和iWARP僅需使用特殊的網卡就可以了,價格也相對便宜很多。

  • Infiniband,支持RDMA的新一代網絡協議。 由於這是一種新的網絡技術,因此需要支持該技術的NIC和交換機
  • RoCE,一個允許在以太網上執行RDMA的網絡協議。 其較低的網絡標頭是以太網標頭,其較高的網絡標頭(包括數據)是InfiniBand標頭。 這支持在標準以太網基礎設施(交換機)上使用RDMA。 只有網卡應該是特殊的,支持RoCE。
  • iWARP,一個允許在TCP上執行RDMA的網絡協議。 IB和RoCE中存在的功能在iWARP中不受支持。 這支持在標準以太網基礎設施(交換機)上使用RDMA。 只有網卡應該是特殊的,並且支持iWARP(如果使用CPU卸載),否則所有iWARP堆棧都可以在SW中實現,並且喪失了大部分RDMA性能優勢。

這裏寫圖片描述
圖 1 RDMA網絡棧

3. APIs

慶幸的是,所有上述RDMA的網絡協議都可以使用相同的API(即verbs),使用標準庫libverbs。
這裏就不展開敘述了,感興趣的同學可以看參考文獻[4][5]。

4. 總結

從上面的敘述,RDMA那麼好,但是爲什麼沒有普及呢?個人認爲,有兩方面原因。首先,是因爲價格太貴。其次,是其缺乏像TCP/IP協議的靈活性和更高層的抽象,可進一步參考SOSP’17的論文LITE Kernel RDMA Support for Datacenter Applications

參考文獻

[1] http://www.rdmamojo.com/2014/03/31/remote-direct-memory-access-rdma/.
[2] http://docplayer.net/38877094-How-ethernet-rdma-protocols-iwarp-and-roce-support-nvme-over-fabrics.html.
[3] http://blog.163.com/guaiguai_family/blog/static/20078414520141023103953705/.
[4] https://thegeekinthecorner.wordpress.com/2010/09/28/rdma-read-and-write-with-ib-verbs/.
[5] http://www.cnblogs.com/D-Tec/p/3157582.html.

由於作者水平有限,歡迎指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章