Jimmy的文檔:Glusterfs之rpc模塊源碼分析附錄(rdma和tcp)

聲明:本文轉至IT168:因爲GlusterFS實現了IB網絡(RDMA協議,專用硬件網卡支持),當時就在想普通的網卡能不能實現,就找到一篇這樣的文章介紹,基於TCP協議來實現。!

附件 RDMA over TCP的協議棧工作過程淺析

第一節 RDMA概述

隨着網絡帶寬和速度的發展和大數據量數據的遷移的需求,網絡帶寬增長速度遠遠高於處理網絡流量時所必需的計算節點的能力和對內存帶寬的需求,數據中心網絡架構已經逐步成爲計算和存儲技術的發展的瓶頸,迫切需要採用一種更高效的數據通訊架構。

  傳統的TCP/IP技術在數據包處理過程中,要經過操作系統及其他軟件層,需要佔用大量的服務器資源和內存總線帶寬,所產生嚴重的延遲來自系統龐大的開銷、數據在系統內存、處理器緩存和網絡控制器緩存之間來回進行復制移動,如圖1.1所示,給服務器的CPU和內存造成了沉重負擔。特別是面對網絡帶寬、處理器速度與內存帶寬三者的嚴重"不匹配性",更造成了網絡延遲效應的加劇。處理器速度比內存速度快得越多,等待相應數據的延遲就越多。而且,處理每一數據包時,數據必須在系統內存、處理器緩存和網絡控制器緩存之間來回移動,因此延遲並不是一次性的,而是會對系統性能持續產生負面影響。


 

  圖1.1 主機接收傳統以太網數據的典型數據流示意圖

  這樣,以太網的低投入、低運營成本優勢就難以體現。爲充分發揮萬兆位以太網的性能優勢,必須解決應用性能問題。系統不能以軟件方式持續處理以太網通信;主機CPU資源必須釋放專注於應用處理。業界最初的解決方案是採用TCP/IP負荷減輕引擎(TOE)。TOE方案能提供系統性能,但協議處理不強;它能使TCP通信更快速,但還達不到高性能網絡應用的要求。解決這類問題的關鍵,是要消除主機CPU中不必要的頻繁數據傳輸,減少系統間的信息延遲。

  RDMARemote Direct Memory Access)全名是"遠程直接數據存取"RDMA讓計算機可以直接存取其它計算機的內存,而不需要經過處理器耗時的傳輸,如圖1.2所示。RDMA是一種使一臺計算機可以直接將數據通過網絡傳送到另一臺計算機內存中的特性,將數據從一個系統快速移動到遠程系統存儲器中,而不對操作系統造成任何影響,這項技術通過消除外部存儲器複製和文本交換操作,因而能騰出總線空間和CPU週期用於改進應用系統性能,從而減少對帶寬和處理器開銷的需要,顯著降低了時延。


 

  圖1.2 RDMA數據流傳輸示意圖

  RDMA對以太網來說還是"新生事物",但以不同形式存在已有十多年時間,它是Infiniband技術的基礎。產業標準API(應用程序接口)使RDMA從技術走向實現成爲可能。其中包括用於低時延消息處理、成就高性能計算的MPI(消息通過接口),以及DAPL(直接接入供應庫)。後者包括兩部分:KDAPLUDAPL,分別用於內核和用戶(應用程序)。Linux支持KDAPL,其它操作系統將來也有可能支持。RDMA在高性能計算環境廣爲採納,在商務應用領域很少,但如今大多應用程序都能直接支持操作系統,透過操作系統(如NFS)間接利用RDMA技術的優勢是完全可能的。

第二節RDMA工作原理

  RDMA是一種網卡技術,採用該技術可以使一臺計算機直接將信息放入另一臺計算機的內存中。通過最小化處理過程的開銷和帶寬的需求降低時延。RDMA通過在網卡上將可靠傳輸協議固化於硬件,以及支持零複製網絡技術和內核內存旁路技術這兩種途徑來達到這一目標。RDMA模型如圖2.1所示。


 

  圖2.1 RDMA模型演變

  零複製網絡技術使NIC可以直接與應用內存相互傳輸數據,從而消除了在應用內存與內核內存之間複製數據的需要。

  內核內存旁路技術使應用程序無需執行內核內存調用就可向網卡發送命令。在不需要任何內核內存參與的條件下,RDMA請求從用戶空間發送到本地NIC並通過網絡發送給遠程NIC,這就減少了在處理網絡傳輸流時內核內存空間與用戶空間之間環境切換的次數。

  當一個應用程序執行RDMA/寫請求時,系統並不執行數據複製動作,這就減少了處理網絡通信時在內核空間和用戶空間上下文切換的次數。在不需要任何內核內存參與的條件下,RDMA請求從運行在用戶空間中的應用中發送到本地 NIC(網卡),然後經過網絡傳送到遠程NIC。請求完成既可以完全在用戶空間中處理(通過輪詢用戶級完成排列),或者在應用一直睡眠到請求完成時的情況下通過內核內存處理。

RDMA操作使應用可以從一個遠程應用的內存中讀數據或向這個內存寫數據。RDMA操作用於讀寫操作的遠程虛擬內存地址包含在RDMA消息中傳送,遠程應用程序要做的只是在其本地網卡中註冊相應的內存緩衝區。遠程節點的CPU在整個RDMA操作中並不提供服務,因此沒有帶來任何負載。通過類型值(鍵值)的使用,一個應用程序能夠在遠程應用程序對它進行隨機訪問的情況下保護它的內存。

  發佈RDMA操作的應用程序必須爲它試圖訪問的遠程內存指定正確的類型值,遠程應用程序在本地網卡中註冊內存時獲得這個類型值。發佈RDMA的應用程序也必須確定遠程內存地址和該內存區域的類型值。遠程應用程序會將相關信息通知給發佈RDMA的應用程序,這些信息包括起始虛擬地址、內存大小和該內存區域的類型值。在發佈RDMA的應用程序能夠對該內存區域進行RDMA操作之前,遠程應用程序應將這些信息通過發送操作傳送給發佈RDMA的應用程序。

第三節RDMA 操作類型

  具備RNICRDMA-aware network interface controller)網卡的設備,不論是目標設備還是源設備的主機處理器都不會涉及到數據傳輸操作,RNIC網卡負責產生RDMA數據包和接收輸入的RDMA數據包,從而消除傳統操作中多餘的內存複製操作。

  RDMA協議提供以下4種數據傳輸操作,除了RDMA讀操作不會產生RDMA消息,其他操作都會產生一條RDMA消息。

  RDMA Send操作;

  Send operation

  Send with invalidate operation

  Send with solicited event

  Send with solicited event and invalidate

  RDMA Write操作;

  RDMA Read操作;

  Terminate操作。

第四節 RDMA over TCP

  以太網憑藉其低投入、後向兼容、易升級、低運營成本優勢在目前網絡互連領域內佔據統治地位,目前主流以太網速率是100 Mb/s1000 Mb/s,下一代以太網速率將會升級到10 Gb/s。將RDMA特性增加到以太網中,將會降低主機處理器利用率,增加以太網升級到10 Gb/s的優點,消除由於升級到10 Gb/s而引入巨大開銷的弊端,允許數據中心在不影響整體性能的前提下拓展機構,爲未來擴展需求提供足夠的靈活性。

  RDMA over TCP協議將數據直接在兩個系統的應用內存之間進行交互,對操作系統內核幾乎沒有影響,並且不需要臨時複製到系統內存的操作,數據流如圖4.1所示。


 

  圖4.1 RDMA over TCP (Ethernet)數據流示意圖

  RDMA over TCP協議能夠工作在標準的基於TCP/IP協議的網絡,如目前在各個數據中心廣泛使用的以太網。注意:RDMA over TCP並沒有指定物理層信息,能夠工作在任何使用TCP/IP協議的網絡上層。RDMA over TCP允許很多傳輸類型來共享相同的物理連接,如網絡、I/O、文件系統、塊存儲和處理器之間的消息通訊。


 

  圖4.2 RDMA over TCP (Ethernet)協議棧

  圖4.2RDMA over TCP (Ethernet)的協議棧,最上面三層構成iWARP協議族,用來保證高速網絡的互操作性。

  RDMA層協議負責根據RDMA寫操作、RDMA讀操作轉換成RDMA消息,並將RDMA消息傳向Direct Data Placement (DDP)層。DDP層協議負責將過長的RDMA消息分段封裝成DDP數據包繼續向下轉發到Marker-based, Protocol-data-unit-Aligned (MPA)層。MPA層在DDP數據段的固定間隔位置增加一個後向標誌、長度以及CRC校驗數據,構成MPA數據段。TCP層負責對TCP數據段進行調度,確保發包能夠順利到達目標位置。IP層則在數據包中增加必要的網絡路由數據信息。

  DDP層的PDU段的長度是固定的,DDP層含有一個成幀機制來分段和組合數據包,將過長的RDMA消息分段封裝爲DDP消息,處理過程如圖4.3所示。


 

  圖4.3 DDP層拆分RDMA消息示意圖

  DDP數據段是DDP協議數據傳輸的最小數據單元,包含DDP協議頭和ULP載荷。DDP協議頭包含ULP數據的最終目的地址的位置和相關控制信息。DDP層將ULP數據分段的原因之一就是TCP載荷的最大長度限制。DDP的數據傳輸模式分爲2種:tagged buffer方式和untagged buffer方式。tagged buffer方式一般應用於大數據量傳輸,例如磁盤I/O、大數據結構等;而untagged buffer方式一般應用於小的控制信息傳輸,例如:控制消息、I/O狀態信息等。

  MPA層在DDP層傳遞下來的DDP消息中,MPA層通過增加MPA協議頭、標誌數據以及CRC校驗數據構成FPDU(framed PDU )數據段,處理過程如圖4.4所示。

  MPA層便於對端網絡適配器設備能夠快速定位DDP協議頭數據,根據DDP協議頭內設置的控制信息將數據直接置入相應的應用內存區域。MPA層具備錯序校正能力,通過使能DDPMPA避免內存複製的開銷,減少處理亂序數據包和丟失數據包時對內存的需求。MPAFPDU數據段傳送給TCP層處理。


 

  圖4.4 MPA層拆分DDP消息示意圖

  TCP層將FPDU數據段拆放置在TCP數據段中,確保每個TCP數據段中都包含1個單獨的FDPUMPA接收端重新組裝爲完整的FPDU,驗證數據完整性,將無用的信息段去除,然後將完整的DDP消息發送到DDP層進行處理。DDP 允許DDP數據段中的ULP協議(Upper Layer Protocol)數據,例如應用消息或磁盤I/O數據,不需要經過ULP的處理而直接放置在目的地址的內存中,即使DDP數據段亂序也不影響這種操作。

第五節RDMA標準組織

  200110月,AdaptecBroadcomCiscoDellEMCHPIBMIntelMicrosoftNetApp公司宣佈成立"遠程直接內存訪問(RDMA)聯盟"RDMA聯盟是個獨立的開放組織,其制定實施能提供TCP/IP RDMA技術的產品所需的體系結構規範,鼓勵其它技術公司積極參與新規範的制定。該聯盟將負責爲整個RDMA解決方案制定規範,包括RDMADDP(直接數據放置)和TCP/IP分幀協議。

  RDMA聯盟是Internet工程任務組(IETF)的補充,IETF是由網絡設計師、運營商、廠商和研究公司組成的大型國際組織。其目的是推動Internet體系結構的發展,並使Internet的運作更加順暢。RDMA聯盟的成員公司和個人都是IETF的積極參與者。另外,IETF還認識到了RDMA在可行網絡方案中的重要性,並計劃在以後幾個月裏成立"Internet協議套件RDMA"工作組。RDMA聯盟協議規定,聯盟將向相應的IETF工作組提交規範草案,供IETF考慮。

  TCP/IP RDMA體系結構規範的1.0版本於200210月由RDMA聯盟成員發佈, TCP/IP RDMA的最終規範將由RDMA聯盟的業界合作伙伴及相應的業界標準組織派出的代表共同確定。RDMA聯盟官方網址:http://www.rdmaconsortium.org

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