聲明:本文轉至IT168:因為GlusterFS實現了IB網絡(RDMA協議,專用硬件網卡支持),當時就在想普通的網卡能不能實現,就找到一篇這樣的文章介紹,基于TCP協議來實現。!
附件? RDMA?over?TCP 的協議棧工作過程淺析
第一節? RDMA 概述
隨著網絡帶寬和速度的發展和大數據量數據的遷移的需求,網絡帶寬增長速度遠遠高于處理網絡流量時所必需的計算節點的能力和對內存帶寬的需求,數據中心網絡架構已經逐步成為計算和存儲技術的發展的瓶頸,迫切需要采用一種更高效的數據通訊架構。
傳統的 TCP/IP 技術在數據包處理過程中,要經過操作系統及其他軟件層,需要占用大量的服務器資源和內存總線帶寬,所產生嚴重的延遲來自系統龐大的開銷、數據在系統內存、處理器緩存和網絡控制器緩存之間來回進行復制移動,如圖 1.1 所示,給服務器的 CPU 和內存造成了沉重負擔。特別是面對網絡帶寬、處理器速度與內存帶寬三者的嚴重 " 不匹配性 " ,更造成了網絡延遲效應的加劇。處理器速度比內存速度快得越多,等待相應數據的延遲就越多。而且,處理每一數據包時,數據必須在系統內存、處理器緩存和網絡控制器緩存之間來回移動,因此延遲并不是一次性的,而是會對系統性能持續產生負面影響。
?
圖 1.1? 主機接收傳統以太網數據的典型數據流示意圖
這樣,以太網的低投入、低運營成本優勢就難以體現。為充分發揮萬兆位以太網的性能優勢,必須解決應用性能問題。系統不能以軟件方式持續處理以太網通信;主機 CPU 資源必須釋放專注于應用處理。業界最初的解決方案是采用 TCP/IP 負荷減輕引擎( TOE )。 TOE 方案能提供系統性能,但協議處理不強;它能使 TCP 通信更快速,但還達不到高性能網絡應用的要求。解決這類問題的關鍵,是要消除主機 CPU 中不必要的頻繁數據傳輸,減少系統間的信息延遲。
RDMA ( Remote?Direct?Memory?Access )全名是 " 遠程直接數據存取 " , RDMA 讓計算機可以直接存取其它計算機的內存,而不需要經過處理器耗時的傳輸,如圖 1.2 所示。 RDMA 是一種使一臺計算機可以直接將數據通過網絡傳送到另一臺計算機內存中的特性,將數據從一個系統快速移動到遠程系統存儲器中,而不對操作系統造成任何影響,這項技術通過消除外部存儲器復制和文本交換操作,因而能騰出總線空間和 CPU 周期用于改進應用系統性能,從而減少對帶寬和處理器開銷的需要,顯著降低了時延。
?
圖 1.2?RDMA 數據流傳輸示意圖
RDMA 對以太網來說還是 " 新生事物 " ,但以不同形式存在已有十多年時間,它是 Infiniband 技術的基礎。產業標準 API (應用程序接口)使 RDMA 從技術走向實現成為可能。其中包括用于低時延消息處理、成就高性能計算的 MPI (消息通過接口),以及 DAPL (直接接入供應庫)。后者包括兩部分: KDAPL 和 UDAPL ,分別用于內核和用戶(應用程序)。 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? 操作類型
具備 RNIC ( RDMA-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/s 和 1000?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.2 是 RDMA?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 層具備錯序校正能力,通過使能 DDP , MPA 避免內存復制的開銷,減少處理亂序數據包和丟失數據包時對內存的需求。 MPA 將 FPDU 數據段傳送給 TCP 層處理。
?
圖 4.4?MPA 層拆分 DDP 消息示意圖
TCP 層將 FPDU 數據段拆放置在 TCP 數據段中,確保每個 TCP 數據段中都包含 1 個單獨的 FDPU 。 MPA 接收端重新組裝為完整的 FPDU ,驗證數據完整性,將無用的信息段去除,然后將完整的 DDP 消息發送到 DDP 層進行處理。 DDP? 允許 DDP 數據段中的 ULP 協議( Upper?Layer?Protocol )數據,例如應用消息或磁盤 I/O 數據,不需要經過 ULP 的處理而直接放置在目的地址的內存中,即使 DDP 數據段亂序也不影響這種操作。
第五節 RDMA 標準組織
2001 年 10 月, Adaptec 、 Broadcom 、 Cisco 、 Dell 、 EMC 、 HP 、 IBM 、 Intel 、 Microsoft 和 NetApp 公司宣布成立 " 遠程直接內存訪問( RDMA )聯盟 " 。 RDMA 聯盟是個獨立的開放組織,其制定實施能提供 TCP/IP?RDMA 技術的產品所需的體系結構規范,鼓勵其它技術公司積極參與新規范的制定。該聯盟將負責為整個 RDMA 解決方案制定規范,包括 RDMA 、 DDP (直接數據放置)和 TCP/IP 分幀協議。
RDMA 聯盟是 Internet 工程任務組( IETF )的補充, IETF 是由網絡設計師、運營商、廠商和研究公司組成的大型國際組織。其目的是推動 Internet 體系結構的發展,并使 Internet 的運作更加順暢。 RDMA 聯盟的成員公司和個人都是 IETF 的積極參與者。另外, IETF 還認識到了 RDMA 在可行網絡方案中的重要性,并計劃在以后幾個月里成立 "Internet 協議套件 RDMA" 工作組。 RDMA 聯盟協議規定,聯盟將向相應的 IETF 工作組提交規范草案,供 IETF 考慮。
TCP/IP?RDMA 體系結構規范的 1.0 版本于 2002 年 10 月由 RDMA 聯盟成員發布,? TCP/IP?RDMA 的最終規范將由 RDMA 聯盟的業界合作伙伴及相應的業界標準組織派出的代表共同確定。 RDMA 聯盟官方網址: http://www.rdmaconsortium.org 。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
