聲明:本文轉(zhuǎn)至IT168:因為GlusterFS實現(xiàn)了IB網(wǎng)絡(RDMA協(xié)議,專用硬件網(wǎng)卡支持),當時就在想普通的網(wǎng)卡能不能實現(xiàn),就找到一篇這樣的文章介紹,基于TCP協(xié)議來實現(xiàn)。!
附件? RDMA?over?TCP 的協(xié)議棧工作過程淺析
第一節(jié)? RDMA 概述
隨著網(wǎng)絡帶寬和速度的發(fā)展和大數(shù)據(jù)量數(shù)據(jù)的遷移的需求,網(wǎng)絡帶寬增長速度遠遠高于處理網(wǎng)絡流量時所必需的計算節(jié)點的能力和對內(nèi)存帶寬的需求,數(shù)據(jù)中心網(wǎng)絡架構(gòu)已經(jīng)逐步成為計算和存儲技術的發(fā)展的瓶頸,迫切需要采用一種更高效的數(shù)據(jù)通訊架構(gòu)。
傳統(tǒng)的 TCP/IP 技術在數(shù)據(jù)包處理過程中,要經(jīng)過操作系統(tǒng)及其他軟件層,需要占用大量的服務器資源和內(nèi)存總線帶寬,所產(chǎn)生嚴重的延遲來自系統(tǒng)龐大的開銷、數(shù)據(jù)在系統(tǒng)內(nèi)存、處理器緩存和網(wǎng)絡控制器緩存之間來回進行復制移動,如圖 1.1 所示,給服務器的 CPU 和內(nèi)存造成了沉重負擔。特別是面對網(wǎng)絡帶寬、處理器速度與內(nèi)存帶寬三者的嚴重 " 不匹配性 " ,更造成了網(wǎng)絡延遲效應的加劇。處理器速度比內(nèi)存速度快得越多,等待相應數(shù)據(jù)的延遲就越多。而且,處理每一數(shù)據(jù)包時,數(shù)據(jù)必須在系統(tǒng)內(nèi)存、處理器緩存和網(wǎng)絡控制器緩存之間來回移動,因此延遲并不是一次性的,而是會對系統(tǒng)性能持續(xù)產(chǎn)生負面影響。
?
圖 1.1? 主機接收傳統(tǒng)以太網(wǎng)數(shù)據(jù)的典型數(shù)據(jù)流示意圖
這樣,以太網(wǎng)的低投入、低運營成本優(yōu)勢就難以體現(xiàn)。為充分發(fā)揮萬兆位以太網(wǎng)的性能優(yōu)勢,必須解決應用性能問題。系統(tǒng)不能以軟件方式持續(xù)處理以太網(wǎng)通信;主機 CPU 資源必須釋放專注于應用處理。業(yè)界最初的解決方案是采用 TCP/IP 負荷減輕引擎( TOE )。 TOE 方案能提供系統(tǒng)性能,但協(xié)議處理不強;它能使 TCP 通信更快速,但還達不到高性能網(wǎng)絡應用的要求。解決這類問題的關鍵,是要消除主機 CPU 中不必要的頻繁數(shù)據(jù)傳輸,減少系統(tǒng)間的信息延遲。
RDMA ( Remote?Direct?Memory?Access )全名是 " 遠程直接數(shù)據(jù)存取 " , RDMA 讓計算機可以直接存取其它計算機的內(nèi)存,而不需要經(jīng)過處理器耗時的傳輸,如圖 1.2 所示。 RDMA 是一種使一臺計算機可以直接將數(shù)據(jù)通過網(wǎng)絡傳送到另一臺計算機內(nèi)存中的特性,將數(shù)據(jù)從一個系統(tǒng)快速移動到遠程系統(tǒng)存儲器中,而不對操作系統(tǒng)造成任何影響,這項技術通過消除外部存儲器復制和文本交換操作,因而能騰出總線空間和 CPU 周期用于改進應用系統(tǒng)性能,從而減少對帶寬和處理器開銷的需要,顯著降低了時延。
?
圖 1.2?RDMA 數(shù)據(jù)流傳輸示意圖
RDMA 對以太網(wǎng)來說還是 " 新生事物 " ,但以不同形式存在已有十多年時間,它是 Infiniband 技術的基礎。產(chǎn)業(yè)標準 API (應用程序接口)使 RDMA 從技術走向?qū)崿F(xiàn)成為可能。其中包括用于低時延消息處理、成就高性能計算的 MPI (消息通過接口),以及 DAPL (直接接入供應庫)。后者包括兩部分: KDAPL 和 UDAPL ,分別用于內(nèi)核和用戶(應用程序)。 Linux 支持 KDAPL ,其它操作系統(tǒng)將來也有可能支持。 RDMA 在高性能計算環(huán)境廣為采納,在商務應用領域很少,但如今大多應用程序都能直接支持操作系統(tǒng),透過操作系統(tǒng)(如 NFS )間接利用 RDMA 技術的優(yōu)勢是完全可能的。
第二節(jié) RDMA 工作原理
RDMA 是一種網(wǎng)卡技術,采用該技術可以使一臺計算機直接將信息放入另一臺計算機的內(nèi)存中。通過最小化處理過程的開銷和帶寬的需求降低時延。 RDMA 通過在網(wǎng)卡上將可靠傳輸協(xié)議固化于硬件,以及支持零復制網(wǎng)絡技術和內(nèi)核內(nèi)存旁路技術這兩種途徑來達到這一目標。 RDMA 模型如圖 2.1 所示。
?
圖 2.1?RDMA 模型演變
零復制網(wǎng)絡技術使 NIC 可以直接與應用內(nèi)存相互傳輸數(shù)據(jù),從而消除了在應用內(nèi)存與內(nèi)核內(nèi)存之間復制數(shù)據(jù)的需要。
內(nèi)核內(nèi)存旁路技術使應用程序無需執(zhí)行內(nèi)核內(nèi)存調(diào)用就可向網(wǎng)卡發(fā)送命令。在不需要任何內(nèi)核內(nèi)存參與的條件下, RDMA 請求從用戶空間發(fā)送到本地 NIC 并通過網(wǎng)絡發(fā)送給遠程 NIC ,這就減少了在處理網(wǎng)絡傳輸流時內(nèi)核內(nèi)存空間與用戶空間之間環(huán)境切換的次數(shù)。
當一個應用程序執(zhí)行 RDMA 讀 / 寫請求時,系統(tǒng)并不執(zhí)行數(shù)據(jù)復制動作,這就減少了處理網(wǎng)絡通信時在內(nèi)核空間和用戶空間上下文切換的次數(shù)。在不需要任何內(nèi)核內(nèi)存參與的條件下, RDMA 請求從運行在用戶空間中的應用中發(fā)送到本地? NIC (網(wǎng)卡),然后經(jīng)過網(wǎng)絡傳送到遠程 NIC 。請求完成既可以完全在用戶空間中處理 ( 通過輪詢用戶級完成排列 ) ,或者在應用一直睡眠到請求完成時的情況下通過內(nèi)核內(nèi)存處理。
RDMA 操作使應用可以從一個遠程應用的內(nèi)存中讀數(shù)據(jù)或向這個內(nèi)存寫數(shù)據(jù)。 RDMA 操作用于讀寫操作的遠程虛擬內(nèi)存地址包含在 RDMA 消息中傳送,遠程應用程序要做的只是在其本地網(wǎng)卡中注冊相應的內(nèi)存緩沖區(qū)。遠程節(jié)點的 CPU 在整個 RDMA 操作中并不提供服務,因此沒有帶來任何負載。通過類型值(鍵值)的使用,一個應用程序能夠在遠程應用程序?qū)λM行隨機訪問的情況下保護它的內(nèi)存。
發(fā)布 RDMA 操作的應用程序必須為它試圖訪問的遠程內(nèi)存指定正確的類型值,遠程應用程序在本地網(wǎng)卡中注冊內(nèi)存時獲得這個類型值。發(fā)布 RDMA 的應用程序也必須確定遠程內(nèi)存地址和該內(nèi)存區(qū)域的類型值。遠程應用程序會將相關信息通知給發(fā)布 RDMA 的應用程序,這些信息包括起始虛擬地址、內(nèi)存大小和該內(nèi)存區(qū)域的類型值。在發(fā)布 RDMA 的應用程序能夠?qū)υ搩?nèi)存區(qū)域進行 RDMA 操作之前,遠程應用程序應將這些信息通過發(fā)送操作傳送給發(fā)布 RDMA 的應用程序。
第三節(jié) RDMA? 操作類型
具備 RNIC ( RDMA-aware?network?interface?controller )網(wǎng)卡的設備,不論是目標設備還是源設備的主機處理器都不會涉及到數(shù)據(jù)傳輸操作, RNIC 網(wǎng)卡負責產(chǎn)生 RDMA 數(shù)據(jù)包和接收輸入的 RDMA 數(shù)據(jù)包,從而消除傳統(tǒng)操作中多余的內(nèi)存復制操作。
RDMA 協(xié)議提供以下 4 種數(shù)據(jù)傳輸操作,除了 RDMA 讀操作不會產(chǎn)生 RDMA 消息,其他操作都會產(chǎn)生一條 RDMA 消息。
RDMA?Send 操作;
Send?operation ;
Send?with?invalidate?operation ;
Send?with?solicited?event ;
Send?with?solicited?event?and?invalidate ;
RDMA?Write 操作;
RDMA?Read 操作;
Terminate 操作。
第四節(jié)? RDMA?over?TCP
以太網(wǎng)憑借其低投入、后向兼容、易升級、低運營成本優(yōu)勢在目前網(wǎng)絡互連領域內(nèi)占據(jù)統(tǒng)治地位,目前主流以太網(wǎng)速率是 100?Mb/s 和 1000?Mb/s ,下一代以太網(wǎng)速率將會升級到 10?Gb/s 。將 RDMA 特性增加到以太網(wǎng)中,將會降低主機處理器利用率,增加以太網(wǎng)升級到 10?Gb/s 的優(yōu)點,消除由于升級到 10?Gb/s 而引入巨大開銷的弊端,允許數(shù)據(jù)中心在不影響整體性能的前提下拓展機構(gòu),為未來擴展需求提供足夠的靈活性。
RDMA?over?TCP 協(xié)議將數(shù)據(jù)直接在兩個系統(tǒng)的應用內(nèi)存之間進行交互,對操作系統(tǒng)內(nèi)核幾乎沒有影響,并且不需要臨時復制到系統(tǒng)內(nèi)存的操作,數(shù)據(jù)流如圖 4.1 所示。
?
圖 4.1?RDMA?over?TCP?(Ethernet) 數(shù)據(jù)流示意圖
RDMA?over?TCP 協(xié)議能夠工作在標準的基于 TCP/IP 協(xié)議的網(wǎng)絡,如目前在各個數(shù)據(jù)中心廣泛使用的以太網(wǎng)。注意: RDMA?over?TCP 并沒有指定物理層信息,能夠工作在任何使用 TCP/IP 協(xié)議的網(wǎng)絡上層。 RDMA?over?TCP 允許很多傳輸類型來共享相同的物理連接,如網(wǎng)絡、 I/O 、文件系統(tǒng)、塊存儲和處理器之間的消息通訊。
?
圖 4.2?RDMA?over?TCP?(Ethernet) 協(xié)議棧
圖 4.2 是 RDMA?over?TCP?(Ethernet) 的協(xié)議棧,最上面三層構(gòu)成 iWARP 協(xié)議族,用來保證高速網(wǎng)絡的互操作性。
RDMA 層協(xié)議負責根據(jù) RDMA 寫操作、 RDMA 讀操作轉(zhuǎn)換成 RDMA 消息,并將 RDMA 消息傳向 Direct?Data?Placement?(DDP) 層。 DDP 層協(xié)議負責將過長的 RDMA 消息分段封裝成 DDP 數(shù)據(jù)包繼續(xù)向下轉(zhuǎn)發(fā)到 Marker-based,?Protocol-data-unit-Aligned?(MPA) 層。 MPA 層在 DDP 數(shù)據(jù)段的固定間隔位置增加一個后向標志、長度以及 CRC 校驗數(shù)據(jù),構(gòu)成 MPA 數(shù)據(jù)段。 TCP 層負責對 TCP 數(shù)據(jù)段進行調(diào)度,確保發(fā)包能夠順利到達目標位置。 IP 層則在數(shù)據(jù)包中增加必要的網(wǎng)絡路由數(shù)據(jù)信息。
DDP 層的 PDU 段的長度是固定的, DDP 層含有一個成幀機制來分段和組合數(shù)據(jù)包,將過長的 RDMA 消息分段封裝為 DDP 消息,處理過程如圖 4.3 所示。
?
圖 4.3?DDP 層拆分 RDMA 消息示意圖
DDP 數(shù)據(jù)段是 DDP 協(xié)議數(shù)據(jù)傳輸?shù)淖钚?shù)據(jù)單元,包含 DDP 協(xié)議頭和 ULP 載荷。 DDP 協(xié)議頭包含 ULP 數(shù)據(jù)的最終目的地址的位置和相關控制信息。 DDP 層將 ULP 數(shù)據(jù)分段的原因之一就是 TCP 載荷的最大長度限制。 DDP 的數(shù)據(jù)傳輸模式分為 2 種: tagged?buffer 方式和 untagged?buffer 方式。 tagged?buffer 方式一般應用于大數(shù)據(jù)量傳輸,例如磁盤 I/O 、大數(shù)據(jù)結(jié)構(gòu)等;而 untagged?buffer 方式一般應用于小的控制信息傳輸,例如:控制消息、 I/O 狀態(tài)信息等。
MPA 層在 DDP 層傳遞下來的 DDP 消息中, MPA 層通過增加 MPA 協(xié)議頭、標志數(shù)據(jù)以及 CRC 校驗數(shù)據(jù)構(gòu)成 FPDU(framed?PDU?) 數(shù)據(jù)段,處理過程如圖 4.4 所示。
MPA 層便于對端網(wǎng)絡適配器設備能夠快速定位 DDP 協(xié)議頭數(shù)據(jù),根據(jù) DDP 協(xié)議頭內(nèi)設置的控制信息將數(shù)據(jù)直接置入相應的應用內(nèi)存區(qū)域。 MPA 層具備錯序校正能力,通過使能 DDP , MPA 避免內(nèi)存復制的開銷,減少處理亂序數(shù)據(jù)包和丟失數(shù)據(jù)包時對內(nèi)存的需求。 MPA 將 FPDU 數(shù)據(jù)段傳送給 TCP 層處理。
?
圖 4.4?MPA 層拆分 DDP 消息示意圖
TCP 層將 FPDU 數(shù)據(jù)段拆放置在 TCP 數(shù)據(jù)段中,確保每個 TCP 數(shù)據(jù)段中都包含 1 個單獨的 FDPU 。 MPA 接收端重新組裝為完整的 FPDU ,驗證數(shù)據(jù)完整性,將無用的信息段去除,然后將完整的 DDP 消息發(fā)送到 DDP 層進行處理。 DDP? 允許 DDP 數(shù)據(jù)段中的 ULP 協(xié)議( Upper?Layer?Protocol )數(shù)據(jù),例如應用消息或磁盤 I/O 數(shù)據(jù),不需要經(jīng)過 ULP 的處理而直接放置在目的地址的內(nèi)存中,即使 DDP 數(shù)據(jù)段亂序也不影響這種操作。
第五節(jié) RDMA 標準組織
2001 年 10 月, Adaptec 、 Broadcom 、 Cisco 、 Dell 、 EMC 、 HP 、 IBM 、 Intel 、 Microsoft 和 NetApp 公司宣布成立 " 遠程直接內(nèi)存訪問( RDMA )聯(lián)盟 " 。 RDMA 聯(lián)盟是個獨立的開放組織,其制定實施能提供 TCP/IP?RDMA 技術的產(chǎn)品所需的體系結(jié)構(gòu)規(guī)范,鼓勵其它技術公司積極參與新規(guī)范的制定。該聯(lián)盟將負責為整個 RDMA 解決方案制定規(guī)范,包括 RDMA 、 DDP (直接數(shù)據(jù)放置)和 TCP/IP 分幀協(xié)議。
RDMA 聯(lián)盟是 Internet 工程任務組( IETF )的補充, IETF 是由網(wǎng)絡設計師、運營商、廠商和研究公司組成的大型國際組織。其目的是推動 Internet 體系結(jié)構(gòu)的發(fā)展,并使 Internet 的運作更加順暢。 RDMA 聯(lián)盟的成員公司和個人都是 IETF 的積極參與者。另外, IETF 還認識到了 RDMA 在可行網(wǎng)絡方案中的重要性,并計劃在以后幾個月里成立 "Internet 協(xié)議套件 RDMA" 工作組。 RDMA 聯(lián)盟協(xié)議規(guī)定,聯(lián)盟將向相應的 IETF 工作組提交規(guī)范草案,供 IETF 考慮。
TCP/IP?RDMA 體系結(jié)構(gòu)規(guī)范的 1.0 版本于 2002 年 10 月由 RDMA 聯(lián)盟成員發(fā)布,? TCP/IP?RDMA 的最終規(guī)范將由 RDMA 聯(lián)盟的業(yè)界合作伙伴及相應的業(yè)界標準組織派出的代表共同確定。 RDMA 聯(lián)盟官方網(wǎng)址: http://www.rdmaconsortium.org 。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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