姜海粟,陳慶奎
(上海理工大學(xué) 光電信息與計算機工程學(xué)院,上海 200093)
E-mail :1072668856@qq.com
隨著物聯(lián)網(wǎng)大數(shù)據(jù)應(yīng)用的增加,物聯(lián)網(wǎng)終端需要處理大量數(shù)據(jù).過去的手段都集中于云端處理,現(xiàn)在由于數(shù)據(jù)量暴增造成云端負(fù)擔(dān)過大,因此一種新興的邊緣計算技術(shù)應(yīng)運而生[1].邊緣計算可以在外圍對數(shù)據(jù)進行預(yù)處理,再匯集到云中心.它的核心則是通過若干個節(jié)點形成的小型計算機集群構(gòu)成.邊緣計算的一個核心問題必須是有一個高性能通信機制.實現(xiàn)邊緣計算節(jié)點通信的方法有多種,其中一方面是采購專用的通信網(wǎng)絡(luò)設(shè)備比如智能網(wǎng)卡和P4交換機等[2],但是這些設(shè)備價格高昂,無法進行普及.另一方面隨著普通網(wǎng)卡設(shè)備日漸廉價,速率也在提升,服務(wù)器多口設(shè)備也在日益增加.但是如何充分利用這些設(shè)備一直是業(yè)界探討的問題.基于這些問題,Intel在2014年推出了一種數(shù)據(jù)平面開發(fā)套件DPDK(Data Plane Development Kit)[3],DPDK通過繞過傳統(tǒng)的系統(tǒng)內(nèi)核協(xié)議棧,直接進行內(nèi)存訪問,減少中斷等機制提升通信效率,同時將底層數(shù)據(jù)處理移至用戶態(tài).
據(jù)此,本文對DPDK的原理進行深入研究,基于這一思想提出一種數(shù)據(jù)鏈路層多端口并行通信機制,在每個節(jié)點上配置了多個千兆端口,使其復(fù)合端口通信能力接近萬兆.該通信機制不僅降低了設(shè)備通信成本,而且具有優(yōu)越的通信性能和良好的擴展性.本文的通信機制具有如下特點:
1)實現(xiàn)基于DPDK通信的多進程數(shù)據(jù)快速交互;
2)實現(xiàn)基于DPDK的管道模型及高速數(shù)據(jù)傳輸;
3)實現(xiàn)具有動態(tài)調(diào)整的多端口多任務(wù)通信.
隨著用戶態(tài)數(shù)據(jù)平面框架的出現(xiàn),許多人開始采用DPDK、NETMAP等框架進行數(shù)據(jù)開發(fā)處理,通過繞過內(nèi)核提升通信效率.但是大都只針對數(shù)據(jù)進行過濾和轉(zhuǎn)發(fā),很少直接處理后直接交付上層[7,11].
傳統(tǒng)的DPDK上下層通信方式是通過內(nèi)核協(xié)議棧交換數(shù)據(jù).DPDK用戶層通過ioctl系統(tǒng)調(diào)用在系統(tǒng)內(nèi)核創(chuàng)建kni虛擬設(shè)備實現(xiàn).并通過ioctl提供接口和DPDK空間地址信息,由kni重新映射到內(nèi)核棧的地址空間,并將信息保存至虛擬設(shè)備中.這種方式通過已綁定的DPDK端口進行數(shù)據(jù)包捕獲,然后通過KNI驅(qū)動將需要交付上層的數(shù)據(jù)包重新交付給內(nèi)核協(xié)議棧進行所有數(shù)據(jù)處理,最后進入上層.這種方式并沒有真正的解決上下層數(shù)據(jù)通信效率的問題,數(shù)據(jù)仍然通過內(nèi)核處理交付上層,內(nèi)核瓶頸依然存在.
隨著對DPDK的研究逐漸深入,一些人開始將其應(yīng)用在改進數(shù)據(jù)傳輸方面.Wenjun Zhu,Peng Li等人利用了DPDK的技術(shù)優(yōu)勢,提出一種基于DPDK的數(shù)據(jù)包捕獲方法[4],使用 RSS分發(fā)算法充分發(fā)揮了多端口通信性能.但是他們只能在假設(shè)數(shù)據(jù)包經(jīng)過哈希后分發(fā)均衡,并且只進行單任務(wù)的多端口發(fā)包處理.一旦端口已經(jīng)處于已占用部分帶寬條件下,沒有考慮實際環(huán)境的RSS分發(fā)算法反而會造成端口擁塞,無法持續(xù)多端口并行通信.
Kourtis MA則是將DPDK應(yīng)用在網(wǎng)絡(luò)虛擬化,將SR-IVO與DPDK結(jié)合,利用DPDK底層的高速數(shù)據(jù)處理性能,用來提升云計算網(wǎng)絡(luò)中密集型數(shù)據(jù)在轉(zhuǎn)發(fā)面的通信性能[5].金玲等人針對大象流數(shù)據(jù),提出基于DPDK的EFLB機制[6].通過設(shè)定網(wǎng)絡(luò)負(fù)載閾值,在超過閾值的情況下,利用SDN控制器將大象流分裂成老鼠流通過多端口通信,并根據(jù)網(wǎng)絡(luò)拓?fù)浜拓?fù)載動態(tài)計算下一跳節(jié)點.該機制是在已經(jīng)檢測到大象流條件下進行分裂,容易出現(xiàn)數(shù)據(jù)洪峰效應(yīng).
針對邊緣計算集群通信效率問題,本文從單機節(jié)點底層通信出發(fā),提升單機通信效率,提出基于DPDK的數(shù)據(jù)鏈路層多端口并行通信機制.該機制改進了基于DPDK的上下層通信,并提出權(quán)值相似匹配的端口動態(tài)綁定分發(fā)策略和優(yōu)化反饋控制策略,可以通過發(fā)起多個上層應(yīng)用任務(wù)向底層多個端口進行通信.
DPDK的核心組件主要由一系列網(wǎng)卡驅(qū)動和基本操作模塊構(gòu)成,是基于數(shù)據(jù)平面開發(fā)的一款套件.利用該套件可以直接繞過內(nèi)核訪問網(wǎng)卡,允許用戶直接對數(shù)據(jù)進行處理.DPDK主要特點如下:
1)頁表(TLB)技術(shù):處理器具有預(yù)讀取連續(xù)內(nèi)存地址的能力,能夠快速的找到對應(yīng)的內(nèi)存地址,獲得內(nèi)存數(shù)據(jù).DPDK采用頁表技術(shù),將零散的內(nèi)存統(tǒng)一為一個獨立于系統(tǒng)內(nèi)存的內(nèi)存池,并且將其劃分為連續(xù)虛擬地址的空間[12,13].
2)用戶態(tài)(UIO):DPDK利用UIO技術(shù),繞過系統(tǒng)內(nèi)核,直接利用驅(qū)動調(diào)用網(wǎng)卡,將大部分?jǐn)?shù)據(jù)包處理過程暴露給用戶,使得用戶可以根據(jù)所需要的功能開發(fā)各自的模塊.
3)DMA技術(shù):傳統(tǒng)的系統(tǒng)內(nèi)核協(xié)議棧處理數(shù)據(jù)需要大量的拷貝以及多次的系統(tǒng)調(diào)用,大大占用了CPU資源.DPDK采用了DMA技術(shù)[7],使CPU一直處于輪詢狀態(tài).網(wǎng)卡獲得總線控制權(quán)限直接將數(shù)據(jù)拷貝至內(nèi)存,減少了拷貝的次數(shù)和CPU中斷.
4)親和性:DPDK通過將控制線程綁定到指定處理器核心上,使得線程僅在該核心上運行,線程之間不能互相干擾,減少了線程切換時處理器核心的開銷.
DPDK主要框架如圖1所示.
圖1 DPDK主要框架(來自文獻[3])
DPDK整體框架結(jié)構(gòu)由圖1的各個模塊組成.在Linux kernel上提供了三種驅(qū)動KNI、IGB和VFIO.KNI用于兼容傳統(tǒng)內(nèi)核協(xié)議棧,IGB驅(qū)動是將數(shù)據(jù)完全交給DPDK進行處理,VFIO則用于支持虛擬化.在用戶層面上,DPDK的主要處理函數(shù)庫都在core libs上,包括內(nèi)存控制,隊列控制和定時器等.以及為了支持多種型號的網(wǎng)卡提供不同的pmd驅(qū)動方式.
本文通信機制是基于Linux系統(tǒng)和DPDK平臺實現(xiàn),可以在單機上充分利用多核多端口,同時支持多應(yīng)用與底層連接.
在以往的服務(wù)器通信系統(tǒng)中,往往只用到少數(shù)網(wǎng)卡端口進行通信,同時為了避免競爭,多采用加鎖的方式.由于處理器比內(nèi)核和內(nèi)存快很多,導(dǎo)致處理器常常處于等待狀態(tài),造成了極大的資源浪費[8,9],此外大量時間耗費在無意義的上下 文切換和鎖的處理上.該通信機制設(shè)計之初就繞過傳統(tǒng)的內(nèi)核協(xié)議?;贗GB驅(qū)動進行多核多線程處理.主邏輯核用于維持底層進程處理,其余邏輯核綁定單一線程用于動態(tài)輪詢管道及網(wǎng)卡端口.通信框架如圖2所示.
上層應(yīng)用和底層同時共享DPDK內(nèi)存池空間.上層應(yīng)用通過外部消息隊列的方式在底層進程注冊一個通信連接,底層進程就會將DPDK內(nèi)存池中某個空閑通信管道與應(yīng)用進行綁定.上層可以直接申請mbuf內(nèi)存塊填充數(shù)據(jù),然后將數(shù)據(jù)指針放入管道.底層通過另一個邏輯核線程從管道進行輪詢,然后調(diào)用端口將數(shù)據(jù)發(fā)出.
當(dāng)上層應(yīng)用完成通信就會通過連接向底層進程發(fā)出關(guān)閉請求,底層進程回收上層申請的管道和內(nèi)存塊.若需繼續(xù)傳輸,則會發(fā)出維持連接請求,否則超時也會自動關(guān)閉連接回收內(nèi)存池空間.
通信模型在DPDK內(nèi)存池中建立共享命名區(qū)域?qū)崟r傳遞控制信息.上層與底層雙方通過公共命名直接找到對應(yīng)DPDK共享區(qū)域的指針.底層在共享區(qū)域內(nèi)會實時更新上層所需的速率控制信息、應(yīng)用信息和端口信息等.上層應(yīng)用實時讀取共享區(qū)域的控制信息反饋自適應(yīng)的調(diào)整封裝速率和可用端口.當(dāng)發(fā)起多個上層應(yīng)用傳輸時建立多個通信連接,根據(jù)上層應(yīng)用創(chuàng)建的順序,自動調(diào)整不同的優(yōu)先級進行多端口通信.
圖2 通信框架
管道主要用來建立端口和上層應(yīng)用的數(shù)據(jù)傳輸通道,同時會返回管道負(fù)載和管道占用等參數(shù)提交給通信調(diào)度模塊進行控制信息計算.
DPDK在環(huán)境初始化過程中,使用了內(nèi)存池機制,將固定分配到的內(nèi)存進行了連續(xù)虛擬地址映射,分配成連續(xù)內(nèi)存塊,每個內(nèi)存塊擁有2Kb的Mbuf空間.連續(xù)虛擬地址的設(shè)計提升了處理器的預(yù)讀取性能,提高了內(nèi)存命中率,是本機制實現(xiàn)數(shù)據(jù)包快速處理的一個關(guān)鍵.
本文針對應(yīng)用數(shù)據(jù)的快速處理,設(shè)計了如圖2右下角所示的雙向緩沖管道.每個管道對應(yīng)一個雙向循環(huán)隊列,每個隊列擁有16384個存儲內(nèi)存塊指針空間,該循環(huán)隊列引入頭指針和尾指針負(fù)責(zé)循環(huán)隊列中內(nèi)存塊的快速數(shù)據(jù)傳遞.循環(huán)隊列的片區(qū)存儲內(nèi)存塊的起始地址,指向連續(xù)的內(nèi)存區(qū)域.當(dāng)循環(huán)隊列中有數(shù)據(jù)處理出現(xiàn)超時或者管道內(nèi)數(shù)據(jù)持續(xù)溢出,則計算后通過共享區(qū)域通知并上層限制數(shù)據(jù)封裝,提高了管道的可用性.
本文通信邏輯主要由端口分發(fā)策略和反饋控制策略.通過端口分發(fā)可以選擇合適的端口進行傳輸,反饋控制是統(tǒng)計和計算各個參數(shù)得到控制信息狀態(tài),并將狀態(tài)通過共享區(qū)域快速反饋給上層應(yīng)用以達到控制上層封裝數(shù)據(jù)速率.反饋控制統(tǒng)計參數(shù)包括有應(yīng)用編號、端口數(shù)量設(shè)置、數(shù)據(jù)包大小、管道負(fù)載、管道趨勢和每個端口負(fù)載等.
3.3.1 端口分發(fā)策略
傳統(tǒng)端口分發(fā)算法采用端口平衡循環(huán)算法或者權(quán)重輪詢算法進行數(shù)據(jù)包分發(fā).平衡循環(huán)算法對外通過多個端口聚合成一個端口進行通信,在其內(nèi)部通過直接循環(huán)多個物理端口分發(fā)數(shù)據(jù)[10].然而,一方面由于它對外綁定成一個虛擬端口,無法實現(xiàn)自定義端口功能,對內(nèi)未針對無序數(shù)據(jù)分發(fā),也容易出現(xiàn)丟包問題.另一方面使用傳統(tǒng)算法只考慮數(shù)據(jù)分發(fā)和接收的公平性,并未考慮實際運行環(huán)境(包括對方端口負(fù)載,核心負(fù)載,端口性能等),容易出現(xiàn)分發(fā)失誤導(dǎo)致資源使用不均勻和端口擁塞等問題,最終造成通信故障.權(quán)重輪詢算法則根據(jù)當(dāng)前本地端口使用率以及當(dāng)前端口權(quán)重比來分配使用端口.節(jié)點之間的網(wǎng)卡端口使用率和權(quán)重很難動態(tài)的進行調(diào)整,無法充分發(fā)揮端對端通信性能[14].
由于是在邊緣集群中,各節(jié)點經(jīng)過同步都能獲得其他節(jié)點端口信息.因此本文在傳統(tǒng)輪詢負(fù)載權(quán)值基礎(chǔ)上加入目的節(jié)點端口信息進行匹配計算.本機權(quán)值Wsend{M1,M2,M3,…}每個端口由當(dāng)前端口i負(fù)載U(0
定義權(quán)值公式如下:
(1)
(2)
(3)
公式(1)使用每個參數(shù)的系統(tǒng)平均值,作為公式(2)中計算端口i綜合占用L的參數(shù).通過公式(3)獲得該端口在單機的權(quán)值Mi.
確認(rèn)目的節(jié)點后,本機通過節(jié)點信息表對目的節(jié)點端口進行評估,計算出對方權(quán)值Wrecv{M1,M2,M3…}.然后通過雙方進行端口相似匹配.匹配過程如下:
本機節(jié)點通過公式(3)計算獲得本機節(jié)點和目的節(jié)點的Wsend{M1,M2,M3,…}和Wrecv{M1,M2,M3,…}.Mi分別表示每個端口的權(quán)值信息,由于各個端口硬件性能可能不同,需要加入端口性能信息E{E1,E2,E3,…,En} 輔助相似計算:
(4)
循環(huán)匹配(Msend_i,Esend_i)和(Mrecv_j,Erecv_j)代入計算公式(5)計算曼哈頓距離,距離越小說明相似度越高.
distman(i,j)=|xi-xj|+|yi-yj|
(5)
對相似度最高的一對作為端口綁定保存到序列中,然后對隊列剩余部分繼續(xù)進行匹配.最終經(jīng)過相似度匹配和排序后獲得端口綁定序列{(isend,jrecv),(msend,nrecv)…},然后根據(jù)上層選擇匹配較高的N個端口進行通信.
3.3.2 反饋控制策略
通信調(diào)度模塊通過獲得不同模塊的參數(shù),并建立對應(yīng)的多個上層應(yīng)用與底層參數(shù)對應(yīng)表,然后經(jīng)過反饋控制策略將結(jié)果通過共享區(qū)域反饋給上層應(yīng)用和底層通信程序以實現(xiàn)對上層應(yīng)用控制.反饋控制邏輯如圖3所示.
反饋控制模塊通過獲取端口、管道等多個信息通過計算反饋給上層.上層獲得控制信息后調(diào)整內(nèi)存申請和封裝速率,邏輯核獲得控制信息后會修改端口發(fā)送效率和緩沖管道使用效率.因此,該反饋控制策略的衡量參數(shù)為緩沖管道使用趨勢Q(0 圖3 反饋控制邏輯 本文通過前面的端口分發(fā)策略獲得可用端口N個,然后獲得其各個端口的當(dāng)前負(fù)載Nload和端口型號速率E并計算它的理論總速率,計算總速率表示為公式(6).已知信息還包括緩沖管道容量Pa、上層封裝速率Vu、統(tǒng)計周期T和基于層次化帶寬算法設(shè)置的比例系數(shù)k.Q值根據(jù)前次計算結(jié)果進行迭代計算,表示為公式(7),并設(shè)置初始Q值為0. (6) (7) 層次化帶寬算法是基于效用函數(shù)針對適用帶寬方法提出的[15].效用函數(shù)主要用于在經(jīng)濟中衡量消費者和消費商品組合數(shù)量關(guān)系的函數(shù),用來衡量消費者的滿足程度.在反饋控制邏輯中,主要用于衡量不同應(yīng)用任務(wù)對帶寬資源的層次化需求.因此,本文將根據(jù)應(yīng)用任務(wù)的創(chuàng)建優(yōu)先級對帶寬資源進行層次化分配. 反饋控制主要根據(jù)Q值進行,當(dāng)Q過高則判斷Pa占用以及Va和Vu. Feedbackcontrolcodedescription: 1.while(data) 2.foreach app in socket_connect 3. get k from upper layer 4. calculate Q and Va; 5.ifQ>0then 6.ifPaused higher or Vuabove the linethen 7. reduce Vu 8.elsereduce Va 9.endif 10.elseboth raise Vuand Vauntil one meet the line; 11.endif 12. Write control information into the shared area; 13.endfor 14.endwhile 應(yīng)用在啟動時確定使用端口數(shù)量,然后在進行通信傳輸中需要滿足公式(6)-公式(7).同時根據(jù)任務(wù)優(yōu)先順序自動設(shè)置占用剩余帶寬比值k.隨著多個應(yīng)用的加入,根據(jù)應(yīng)用總速率k呈接近反比例下降趨勢.過程中若某個任務(wù)先結(jié)束,則底層會根據(jù)周期更新控制信息重新調(diào)整應(yīng)用k值. 由于在傳統(tǒng)的應(yīng)用通信協(xié)議中,除了以太網(wǎng)包頭,通信協(xié)議占用數(shù)據(jù)28-48字節(jié),在應(yīng)用通信中占用了大量資源,降低了通信效率.因此針對上文的通信機制,設(shè)計了對應(yīng)的通信協(xié)議,只占用了大約13字節(jié).同時也設(shè)計了包括通信連接控制字段和共享區(qū)域反饋控制字段兩個部分.控制字段和通信協(xié)議如圖4所示. 圖4 控制字段及通信協(xié)議 通信連接控制字段:上層應(yīng)用在啟動時會向底層通信程序注冊連接,用來維護連接狀態(tài),同時底層返回內(nèi)存池字段并綁定管道編號.連接狀態(tài)包括注冊、注銷和保持三種狀態(tài).通過綁定的管道,上層可以在DPDK內(nèi)存池申請的內(nèi)存塊封裝數(shù)據(jù)包丟入指定緩沖管道進行處理. 共享區(qū)域反饋控制字段:每注冊一個上層應(yīng)用程序,底層就會增加一條對應(yīng)上層應(yīng)用的反饋控制信息,并定時進行數(shù)據(jù)更新.端口速率控制由底層通信程序?qū)崟r讀取相關(guān)參數(shù)計算后返回,上層應(yīng)用程序通過實時讀取反向控制字段中的參數(shù)進行數(shù)據(jù)封裝速率控制. 應(yīng)用傳輸協(xié)議:初始環(huán)境下通過主節(jié)點組網(wǎng)廣播建立節(jié)點地址連通機制,然后向所有節(jié)點下發(fā)節(jié)點地址通信表,并定時同步更新維護節(jié)點表內(nèi)容,所有節(jié)點通過表內(nèi)容可以向指定節(jié)點進行通信.然后進行上層應(yīng)用發(fā)起及通信傳輸,具體通信步驟如下: 1)所有子節(jié)點先上線,底層進程啟動并建立節(jié)點通信空表,同時獲得本機編號信息、端口、處理器、內(nèi)存等信息狀態(tài). 2)主節(jié)點上線并等候30秒,啟動底層進程及獲取本機信息,然后發(fā)起廣播組網(wǎng)通信.所有子節(jié)點以及主節(jié)點自身收到并過濾廣播組網(wǎng)信息向主節(jié)點返回主機所有信息,主節(jié)點對通信表進行節(jié)點數(shù)據(jù)填充. 3)主節(jié)點處理完畢后向所有節(jié)點下發(fā)節(jié)點通信數(shù)據(jù),子節(jié)點收到并填充到節(jié)點通信表.然后定時進行所有節(jié)點同步維護通信表的更新.此時,所有節(jié)點都擁有任何一方的節(jié)點的端口信息. 4)接收方在節(jié)點發(fā)起上層應(yīng)用,向底層進行連接注冊并綁定管道,底層開始對端口及管道信息進行計算并通過共享區(qū)域返回上層. 5)發(fā)送方同 4),在讀取共享區(qū)域的控制信息后,申請Mbuf內(nèi)存塊并根據(jù)傳輸協(xié)議字段封裝數(shù)據(jù).底層輪詢線程讀取數(shù)據(jù)字段的目的節(jié)點、源節(jié)點和類型信息查找節(jié)點通信表,然后填充地址和目的地址后送入綁定緩沖管道. 6)底層進行另一個輪詢線程從管道中獲得Mbuf指針,讀取目的地址和源地址,并從指定端口將數(shù)據(jù)發(fā)出. 7)接收方端口輪詢線程從端口接收數(shù)據(jù),并申請Mbuf內(nèi)存塊封裝數(shù)據(jù),讀取數(shù)據(jù)的目的節(jié)點送入綁定管道.另一個輪詢線程從管道獲得數(shù)據(jù),通知上層.上層完成數(shù)據(jù)重組釋放Mbuf內(nèi)存塊,關(guān)閉連接,完成應(yīng)用通信. 本節(jié)對多端口通信機制的各項性能指標(biāo)進行實機測試.實驗設(shè)定多臺測試服務(wù)器,配置信息如表1所示. 表1 配置信息 Table 1 Configuration information CPU:E3-1230v23.3GHzMemory:8g ddr3?21600MHzSystem:Centos 7NIC:i350-T41Gb/s each portDPDK:17.11.3 本文對該模型通信性能主要從帶寬利用率、丟包率、時延以及多端口通信等多方面測試進行性能評估. 帶寬利用率:DPDK支持綁定多個網(wǎng)卡端口,本文在并行條件下測量多個DPDK端口的帶寬使用率. 丟包率:本文采用不可靠交付方式進行通信,因此對比傳統(tǒng)UDP方式進行丟包率評估. 時延:時延主要包括發(fā)送時延、傳輸時延和處理時延.由于本文是以邊緣集群節(jié)點環(huán)境為目標(biāo),因此可以忽略集群節(jié)點的傳輸時延.發(fā)送時延定義如公式(8): (8) N表示數(shù)據(jù)塊大小,R表示傳輸速率,DT表示發(fā)送時延.本文的處理時延包PT括三個部分:應(yīng)用處理時延AT、DPDK底層處理時延MT、進程交互處理時延GT,M為當(dāng)前內(nèi)存速率.因此公式定義如式(9)-式(11): (9) PT=AT+2MT+2GT (10) D=PT+DT (11) 最終到達對方應(yīng)用的總時延需要經(jīng)過兩次DPDK底層處理和兩次進程交互處理. 在通信性能和丟包測試中配置主機使用雙核單端口測試,這里和經(jīng)過內(nèi)核的傳統(tǒng)應(yīng)用通信進行對比測試.測試包從64字節(jié)到1024字節(jié),數(shù)據(jù)量為6GB.通信性能和丟包率如圖5所示. 圖5 通信性能測試 由圖5可知,折線圖為通信速率對比,直方圖為丟包率對比.通過折線圖可以看出本文單端口通信在64字節(jié)和128字節(jié)的包處理上明顯優(yōu)于系統(tǒng)內(nèi)核傳輸.通過直方圖可以看出傳統(tǒng)通信丟包率在萬分之一到萬分之五左右,而本文機丟包率在十萬分之一到萬分之一之間,丟包率大大降低. 通過使用4.2的時延計算公式計算時延并進行對比,通信時延測試結(jié)果如圖6所示. 圖6 通信時延測試 如圖6所示,得益于底層高效的數(shù)據(jù)包處理性能,在忽略傳輸時延的條件下,本文的通信時延明顯低于傳統(tǒng)的通信時延,主要在于減少了內(nèi)存拷貝次數(shù)以及提升了單個包的數(shù)據(jù)處理,測試過程發(fā)現(xiàn)本文在單個數(shù)據(jù)包的處理速度小于60ns,相對于內(nèi)核數(shù)據(jù)處理性能提升了10倍以上. 多端口測試主要采用一對一多端口測試模型對比傳統(tǒng)MPI多端口測試模型,同時設(shè)置不同端口數(shù)量.節(jié)點上線同步完成后,打開接收方和發(fā)送方.然后令發(fā)送方設(shè)置1024字節(jié)發(fā)送6GB數(shù)據(jù)量文件.實驗結(jié)果如圖7所示. 圖7 多端口測試 通過圖7可以發(fā)現(xiàn),本文的機制對比傳統(tǒng)MPI通信優(yōu)勢明顯.根據(jù)應(yīng)用端口數(shù)量效率提升幅度分別為(1,44.4%)、(2,43.5%)、(3,48%)、(4,45.7%)、(5,56%)、(6,70.3%)、(7,80%)和(8,85.8%).而MPI通信受限于內(nèi)核,無法充分發(fā)揮多端口性能. 最后是節(jié)點之間的多應(yīng)用測試,主要適用于端到端的多文件或者多應(yīng)用通信.該實驗在設(shè)置應(yīng)用6個可用端口,總端口為8個的條件進行,發(fā)送節(jié)點設(shè)置4個應(yīng)用進行通信.實驗結(jié)果如圖8所示. 圖8 多應(yīng)用多端口測試 如圖8所示,應(yīng)用1通過計算按照端口分發(fā)策略獲得較高匹配的6個端口進行通信,其后的應(yīng)用也同樣通過策略獲得匹配度較高的6個端口.從圖8可以明顯看出,應(yīng)用2使用了應(yīng)用1未使用的匹配較低的端口,應(yīng)用3則在前兩個應(yīng)用的基礎(chǔ)上重新計算獲得相對匹配較高的端口.通過本文的機制最終達到所有端口充分使用的效果. 本文通過對DPDK通信技術(shù)的研究,針對傳統(tǒng)端對端通信效率低下,受限于內(nèi)核瓶頸,浪費大量計算資源和帶寬資源的問題,提出了一種基于DPDK的多端口并行通信機制.該機制在支持多端口通信的基礎(chǔ)上,能夠支持多進程高速交互及端口分配和多任務(wù)通信的動態(tài)調(diào)整,避免了端口擁塞的問題.實驗結(jié)果表明,該通信機制可以充分利用計算資源和帶寬資源,極大地提升通信效率,最高能夠同時支持多個萬兆網(wǎng)卡,緩解了終端節(jié)點的通信瓶頸.本文的后續(xù)工作是對底層通信繼續(xù)優(yōu)化以及數(shù)據(jù)可靠傳輸?shù)膶崿F(xiàn).3.4 控制字段及通信協(xié)議
4 性能評估
4.1 實驗環(huán)境說明
4.2 性能評估指標(biāo)
4.3 測試流程及結(jié)果評估
5 結(jié) 語