| 1 什么是RDMA 1.1 傳統(tǒng)意義上的DMA ---直接內(nèi)存訪問(DMA)方式,是一種完全由硬件執(zhí)行I/O交換的工作方式。在這種方式中,DMA控制器從CPU完全接管對總線的控制,數(shù)據(jù)交換不經(jīng)過CPU,而直接在內(nèi)存和I/O設(shè)備之間進(jìn)行。DMA工作時(shí),由DMA控制器向內(nèi)存發(fā)出地址和控制信號;進(jìn)行地址修改;對傳送字的個(gè)數(shù)計(jì)數(shù);并且以中斷方式向CPU報(bào)告?zhèn)魉筒僮鞯慕Y(jié)束。DMA方式一般用于高速傳送成組的數(shù)據(jù)。 ---使用DMA方式目的: 減少大批量數(shù)據(jù)傳輸時(shí)CPU的開銷;方法:采用專用DMA控制器(DMAC)生成訪存地址并控制訪存過程;優(yōu)點(diǎn):操作均由硬件電路實(shí)現(xiàn),傳輸速度快;CPU基本不干預(yù),僅在初始化和結(jié)束時(shí)參與,CPU與外設(shè)并行工作,效率高。 ---DMA的數(shù)據(jù)塊傳送過程可分為三個(gè)階段:傳送前預(yù)處理;正式傳送;傳送后處理! MA控制流程:1. 預(yù)處理:由CPU執(zhí)行I/O指令對DMAC進(jìn)行初始化與啟動(dòng)。2. 數(shù)據(jù)傳送:由DMAC控制總線進(jìn)行數(shù)傳。3. 后處理:傳送結(jié)束,DMAC向CPU發(fā)中斷請求,報(bào)告DMA操作的結(jié)束。CPU響應(yīng),轉(zhuǎn)入中斷服務(wù)程序,完成DMA結(jié)束處理工作。 1.2 RDMA ---RDMA(Remote Direct Memory Access)是通過網(wǎng)絡(luò)把資料直接傳入某臺計(jì)算機(jī)的一塊存儲(chǔ)區(qū)域,不需用到多少計(jì)算機(jī)的處理功能。普通網(wǎng)卡集成了支持硬件校驗(yàn)和的功能,并對軟件進(jìn)行了改進(jìn),從而減少了發(fā)送數(shù)據(jù)的拷貝量,但無法減少接收數(shù)據(jù)的拷貝量,而這部分拷貝量要占用處理器的大量計(jì)算周期。普通網(wǎng)卡的工作過程如下:先把收到的數(shù)據(jù)包緩存到系統(tǒng)上,數(shù)據(jù)包經(jīng)過處理后,相應(yīng)數(shù)據(jù)被分配到一個(gè)TCP連接。下一步,接收系統(tǒng)再把主動(dòng)提供的TCP數(shù)據(jù)同相應(yīng)的應(yīng)用程序聯(lián)系起來,并將數(shù)據(jù)從系統(tǒng)緩沖區(qū)拷貝到目標(biāo)存儲(chǔ)地址。以太網(wǎng)已能滿足高性能應(yīng)用對網(wǎng)絡(luò)吞吐率的要求,具備高吞吐率和成本優(yōu)勢,以太網(wǎng)技術(shù)要跟高性能網(wǎng)絡(luò)應(yīng)用掛鉤,主要解決的問題是應(yīng)用吞吐率。通常情況下,系統(tǒng)持續(xù)在主機(jī)CPU中處理以太網(wǎng)通信需要占用CPU資源。CPU速率會(huì)制約網(wǎng)絡(luò)數(shù)據(jù)率;持續(xù)處理這類通信會(huì)導(dǎo)致CPU性能降級;對多端口千兆位或單端口10千兆位以太網(wǎng),這類問題會(huì)變得更為嚴(yán)重。 ---制約網(wǎng)絡(luò)速率的因素主要在兩方面:應(yīng)用通信強(qiáng)度和主機(jī)CPU在內(nèi)核與應(yīng)用存儲(chǔ)器間處理數(shù)據(jù)的效率。要達(dá)到特定的性能級別,需要追加主機(jī)CPU資源,配置高效的軟件并增強(qiáng)系統(tǒng)負(fù)荷管理。傳統(tǒng)的TCP/IP技術(shù)在處理數(shù)據(jù)傳輸?shù)倪^程中需要占用大量的服務(wù)器資源。這樣以太網(wǎng)的低投入、低運(yùn)營成本優(yōu)勢就難以體現(xiàn)。為充分發(fā)揮萬兆位以太網(wǎng)的性能優(yōu)勢,必須解決應(yīng)用性能問題。系統(tǒng)不能以軟件方式持續(xù)處理以太網(wǎng)通信;主機(jī)CPU資源必須釋放專注于應(yīng)用處理。解決這類問題的關(guān)鍵,是要消除主機(jī)CPU中不必要的頻繁數(shù)據(jù)傳輸,減少系統(tǒng)間的信息延遲?偟膩碚f,需要從協(xié)議、軟件和硬件三方面入手。 ---RDMA全名是“遠(yuǎn)程直接數(shù)據(jù)存取”,如圖 2 所示,RDMA是通過網(wǎng)絡(luò)把資料直接傳入計(jì)算機(jī)的存儲(chǔ)區(qū),將數(shù)據(jù)從一個(gè)系統(tǒng)快速移動(dòng)到遠(yuǎn)程系統(tǒng)存儲(chǔ)器中,而不對操作系統(tǒng)造成任何影響,這樣就不需要用到多少計(jì)算機(jī)的處理功能。它消除了外部存儲(chǔ)器復(fù)制和文本交換操作,因而能騰出總線空間和CPU周期用于改進(jìn)應(yīng)用系統(tǒng)性能。目前通用的做法需由系統(tǒng)先對傳入的信息進(jìn)行分析,然后再存儲(chǔ)到正確的區(qū)域。 ---當(dāng)一個(gè)應(yīng)用執(zhí)行RDMA讀或?qū)懻埱髸r(shí),不執(zhí)行任何數(shù)據(jù)復(fù)制。在不需要任何內(nèi)核內(nèi)存參與的條件下,RDMA請求從運(yùn)行在用戶空間中的應(yīng)用中發(fā)送到本地NIC(網(wǎng)卡),然后經(jīng)過網(wǎng)絡(luò)傳送到遠(yuǎn)程N(yùn)IC。請求完成既可以完全在用戶空間中處理(通過輪詢用戶級完成排列),或者在應(yīng)用一直睡眠到請求完成時(shí)的情況下通過內(nèi)核內(nèi)存處理。RDMA操作使應(yīng)用可以從一個(gè)遠(yuǎn)程應(yīng)用的內(nèi)存中讀數(shù)據(jù)或向這個(gè)內(nèi)存寫數(shù)據(jù)。用于操作的遠(yuǎn)程虛擬內(nèi)存地址包含在RDMA信息中。遠(yuǎn)程應(yīng)用除了為其本地NIC注冊相關(guān)內(nèi)存緩沖區(qū)外,不需要做其他任何事情。遠(yuǎn)程節(jié)點(diǎn)中的CPU完全不參與輸入的RDMA操作,這些對CPU沒有任何負(fù)擔(dān)。 ---RDMA讓計(jì)算機(jī)可以直接存取其它計(jì)算機(jī)的內(nèi)存,而不需要經(jīng)過處理器耗時(shí)的傳輸,因?yàn)橥ǔ_@樣的數(shù)據(jù)要求還要經(jīng)過操作系統(tǒng)及其他軟件層。內(nèi)存瓶頸隨著連接速度超過服務(wù)器的處理能力和內(nèi)存帶寬而變得更加嚴(yán)重。 遠(yuǎn)程直接內(nèi)存存取(RDMA)使一臺計(jì)算機(jī)可以直接將信息傳送到另一臺計(jì)算機(jī)內(nèi)存中。這項(xiàng)技術(shù)通過減少對帶寬和處理器開銷的需要降低了時(shí)延。這種效果是通過在NIC的硬件中部署一項(xiàng)可靠的傳輸協(xié)議以及支持零復(fù)制網(wǎng)絡(luò)技術(shù)和內(nèi)核內(nèi)存旁路實(shí)現(xiàn)的。零復(fù)制網(wǎng)絡(luò)技術(shù)使NIC可以直接與應(yīng)用內(nèi)存相互傳輸數(shù)據(jù),從而消除了在應(yīng)用內(nèi)存與內(nèi)核內(nèi)存之間復(fù)制數(shù)據(jù)的需要。內(nèi)核內(nèi)存旁路使應(yīng)用無需執(zhí)行內(nèi)核內(nèi)存調(diào)用就可向NIC發(fā)送命令。在不需要任何內(nèi)核內(nèi)存參與的條件下,RDMA請求從用戶空間發(fā)送到本地NIC并通過網(wǎng)絡(luò)發(fā)送給遠(yuǎn)程N(yùn)IC,這就減少了在處理網(wǎng)絡(luò)傳輸流時(shí)內(nèi)核內(nèi)存空間與用戶空間之間環(huán)境切換的次數(shù)。RDMA比現(xiàn)行的方法快速。使用目前普遍使用的網(wǎng)絡(luò)通過來RDMA連結(jié)計(jì)算機(jī)與存儲(chǔ)系統(tǒng),硬件連接速度加快會(huì)把眾多低價(jià)位的服務(wù)器集結(jié)成效能更強(qiáng)大的數(shù)據(jù)庫,而不必購置昂貴的機(jī)器。對很注重占地空間和功耗的系統(tǒng)而言,就千兆位以太網(wǎng)滿載傳輸這一任務(wù)而言,RNIC所需功耗僅為相應(yīng)網(wǎng)卡和微處理器的一小部分。
2 RDMA的工作原理規(guī)范 |