<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于Linux數據鏈路層的MPI集群通信機制的設計與實(shí)現

基于Linux數據鏈路層的MPI集群通信機制的設計與實(shí)現

作者: 時(shí)間:2012-09-17 來(lái)源:網(wǎng)絡(luò ) 收藏

中,隨著(zhù)系統規模的增大,通信效率是影響整個(gè)系統獲得高性能的關(guān)鍵因素之一。而隨著(zhù)局域網(wǎng)傳輸性能的快速提高,Myrinet、Gigabit Ethernet和Infiniband等千兆位網(wǎng)絡(luò )設備已被廣泛使用,當前影響集群節點(diǎn)間通信性能的瓶頸已經(jīng)從通信硬件的傳送開(kāi)銷(xiāo)轉移到了通信處理軟件的開(kāi)銷(xiāo)上,所以采用優(yōu)化的通信協(xié)議是降低通信成本、提高結點(diǎn)間通信的有效手段。

在當前的集群通信應用中,普遍采用兩類(lèi)通信結構,即核心級通信和用戶(hù)級通信。但由于它們設計的初衷并非是針對集群通信,所以并不適合當前集群環(huán)境的特點(diǎn)。為此,本文通過(guò)分析這兩類(lèi)通信結構的特點(diǎn),提出了以核心級通信為基礎,旁路內核中IP層及以上協(xié)議層,實(shí)現直接與MPI通道接口層通信的新機制,并通過(guò)實(shí)驗驗證,為傳統集群的升級改造提供一種新的無(wú)連接、無(wú)差錯控制,開(kāi)銷(xiāo)小、延時(shí)低的通信機制。

1 基于的集群通信結構的提出

目前各種通信協(xié)議普遍采用兩種通信結構,即核心級通信和用戶(hù)級通信[1]。

1.1 核心級通信

在核心級通信中,操作系統內核控制著(zhù)所有消息傳遞中的發(fā)送與接收處理,并且負責它們的緩沖管理和通信協(xié)議的實(shí)現,設備驅動(dòng)程序也是通過(guò)內核來(lái)完成所有的硬件支持與協(xié)議軟件處理的任務(wù),如圖1所示。在通信過(guò)程中,系統要經(jīng)過(guò)多次內核態(tài)與用戶(hù)態(tài)之間的數據拷貝才能夠實(shí)現數據的傳送。有數據表明[2],一般奔騰處理器的內存拷貝速率平均為70 Mb/s,但是由于操作系統在交換頁(yè)面時(shí)的 I/O 數據傳送都是阻塞操作,若出現缺頁(yè)中斷,其時(shí)延將會(huì )更大,所以頻繁的內存拷貝操作的開(kāi)銷(xiāo)將是影響整體性能的瓶頸所在。因此,對于通信效率要求較高的,核心級通信是不適合的。


1.2 用戶(hù)級通信

本文引用地址:http://dyxdggzs.com/article/257256.htm

在用戶(hù)級通信中,操作系統內核將網(wǎng)絡(luò )接口控制器NIC(Network Interface Controller)的寄存器和存儲器映射到用戶(hù)地址空間,允許用戶(hù)進(jìn)程旁路操作系統內核從直接訪(fǎng)問(wèn)NIC,直接將數據從用戶(hù)空間發(fā)送到網(wǎng)絡(luò )中進(jìn)行傳輸。通信事件處理的觸發(fā)采用查詢(xún)方式而不是中斷方式,由于旁路操作系統內核,使得整個(gè)通信過(guò)程省掉了執行系統調用、用戶(hù)態(tài)與核心態(tài)之間的數據拷貝及用戶(hù)與內核的上下文切換等軟件上的開(kāi)銷(xiāo),進(jìn)而減少對主機CPU資源的占用,縮短通信操作的關(guān)鍵路徑,實(shí)現通信與計算的重疊。如圖2所示[3]。

但是,采用用戶(hù)級通信協(xié)議時(shí),通信過(guò)程中的所有操作均在用戶(hù)空間中進(jìn)行,當用戶(hù)程序出錯或有惡意用戶(hù)進(jìn)行破壞時(shí),系統就很容易被破壞。這是因為系統數據結構中不僅包含本進(jìn)程(或并行任務(wù))及其相關(guān)信息,同時(shí)也包含與本進(jìn)程無(wú)關(guān)的其他進(jìn)程(或并行任務(wù))的相關(guān)信息。若某一用戶(hù)(并行任務(wù))出錯或失誤,都將會(huì )影響到其他用戶(hù)(并行任務(wù))的執行,因而很難保證系統的安全性和可靠性,也無(wú)法保證并行任務(wù)間的相互獨立性。

1.3 基于通信

為了既能保證系統安全、可靠以及并行任務(wù)間相互獨立,同時(shí)又能降低通信成本,本文提出了一種以核心級通信為基礎的基于數據鏈路層的通信結構,即在操作系統內核(以內核為例)中旁路IP層、INET Socke層和BSD Socket層,使得數據鏈路層直接與應用程序的通道接口層通信。如圖3所示。

圖3中陰影部分表示通信關(guān)鍵路徑上數據鏈路層。在該通信結構下,系統在通信的關(guān)鍵路徑上將通過(guò)內存映射和內存拷貝兩種技術(shù)實(shí)現通信。在發(fā)送消息時(shí),系統通過(guò)內存映射技術(shù)將消息映射到內核中的緩沖區,注冊協(xié)議標識,并調用數據鏈路層函數對其進(jìn)行封包發(fā)送;在接收消息時(shí),系統通過(guò)數據鏈路層的MAC地址進(jìn)行尋址、接收消息,并通過(guò)內存拷貝直接將消息傳送到用戶(hù)空間中的應用程序,實(shí)現點(diǎn)到點(diǎn)通信。

與用戶(hù)級通信結構相比,基于數據鏈路層的通信結構在通信關(guān)鍵路徑上只增加了一次內存拷貝的開(kāi)銷(xiāo)。同時(shí),由于保留了數據鏈路層的通信,進(jìn)而為系統的安全性、可靠性和并行任務(wù)間的獨立性提供了保障。此外,該通信結構可以屏蔽系統的硬件信息,使得在應用程序中不再出現與系統通信硬件有關(guān)的操作。

與核心級通信結構相比,該通信結構在通信關(guān)鍵路徑上減少了協(xié)議處理開(kāi)銷(xiāo)、數據拷貝次數和冗余的差錯校驗,進(jìn)而提高了系統的通信效率。

2 MPI的通信

MPI(Message Passing Interface)是為基于消息傳遞的并行程序設計提供一個(gè)高效、可擴展、統一的編程環(huán)境,是目前主流的并行編程模式,也是分布式并行系統的主要編程環(huán)境。在集群環(huán)境中MPI并行程序設計中使用的通信模式有阻塞通信、非阻塞通信和組通信,其中阻塞通信和非阻塞通信屬于點(diǎn)對點(diǎn)通信,而點(diǎn)對點(diǎn)通信也正是MPI其他通信的基礎。

在阻塞通信中,當發(fā)送調用函數MPI_Send后即被阻塞,這時(shí),系統會(huì )將發(fā)送緩沖區中的數據拷貝到系統緩沖區,由系統負責發(fā)送消息,而發(fā)送者的操作只在拷貝操作完成時(shí)結束并返回,不必等待發(fā)送完成。但是,如果系統緩沖區不足或消息過(guò)長(cháng),導致拷貝失敗,則發(fā)送者將被阻塞,直到消息發(fā)送完成為止;同樣,當接收者在調用函數MPI_Recv后會(huì )被阻塞,直至收到匹配的消息為止[3]。

非阻塞通信主要是通過(guò)實(shí)現計算與通信的重疊,進(jìn)而提高整個(gè)程序的執行效率。對于非阻塞通信,不必等到通信操作完全結束后才可返回,而是由特定的通信硬件完成通信操作。在通信硬件執行通信操作的同時(shí),處理機可以同時(shí)進(jìn)行計算操作,這樣便實(shí)現了通信與計算的重疊。發(fā)送者調用函數MPI_Isend或接收者調用數MPI_Irecv后,處理機便可執行其他計算任務(wù)。在發(fā)送(接收)操作開(kāi)始時(shí),發(fā)送者(接收者)使用請求句柄(request handler),MPI通過(guò)檢查請求來(lái)決定發(fā)送(接收)操作是否完成,發(fā)送者(接收者)通過(guò)調用MPI_Test來(lái)確定發(fā)送(接收)操作是否完成。在發(fā)送或接收操作期間,發(fā)送者不能更改發(fā)送緩沖區中的內容,接收者也不能使用接收緩沖區中的內容。若發(fā)送者(接收者)調用函數MPI_Wait,則發(fā)送者(接收者)會(huì )被阻塞,直到發(fā)送(接收)操作完成才能返回[4]。

由此可知,MPI點(diǎn)到點(diǎn)通信在發(fā)送緩沖區、接收緩沖區和內核中的系統緩沖區之間進(jìn)行傳遞,并由內核發(fā)送或接收系統緩沖區中的消息,本文提出的新通信機制就是圍繞著(zhù)系統緩沖區展開(kāi)的。

3 基于數據鏈路層的MPI通信機制的設計與實(shí)現

若要實(shí)現本文所提出的基于數據鏈路層的集群通信機制,則需要開(kāi)發(fā)一個(gè)中間件DLMC(Data_link Layer MPI Communication)用于提供雙方進(jìn)行通信的底層交換協(xié)議、數據包校驗、用戶(hù)空間與內核空間的數據交換和重傳機制等。這里需要注意的問(wèn)題有:

(1)編譯方式

對于內核編譯分為直接編譯進(jìn)內核和通過(guò)模塊編譯加載進(jìn)內核。本系統采用模塊加載的方式進(jìn)行編譯,其理由是由于系統是在傳統網(wǎng)絡(luò )下進(jìn)行的修改,只有MPI計算才會(huì )用到此中間件,而對于計算之外的部分仍然要依靠傳統的TCP/IP。例如計算前期的準備工作,雖然模塊加載比直接編譯的效率低,但它可以隨意動(dòng)態(tài)加載和卸載,這樣不僅靈活,而且有利于開(kāi)發(fā)、調試等工作。

(2)用戶(hù)空間和內核空間之間的數據交換

基于數據鏈路層的通信進(jìn)程是在內核空間運行的,而MPI進(jìn)程是在用戶(hù)空間進(jìn)行的,所以需要在用戶(hù)空間和內核空間進(jìn)行通信。通過(guò)利用Linux內核機制,在用戶(hù)空間緩存頁(yè)面以及物理頁(yè)面之間建立映射關(guān)系,將物理內存映射到進(jìn)程的地址空間,從而達到直接內存訪(fǎng)問(wèn)的目的。

在Linux中,對于高端物理內存(896 MB之后),并沒(méi)有與內核地址空間建立對應的關(guān)系(即虛擬地址=物理地址+PAGE_OFFSET),所以不能使用諸如get_free_pages()函數進(jìn)行內存分配,而必須使用alloc_pages()來(lái)得到struct *page結構,然后將其映射到內核地址空間,但此時(shí)映射后的地址并非和物理地址相差PAGE_OFFSET[5]。為實(shí)現內存映射技術(shù),其具體使用方法是:使用alloc_pages()在高端存儲器區得到struct *page結構,然后調用kmap(struct *page)在內核地址空間PAGE_OFFSET+896M之后的地址空間中建立永久映射。DLMC首先讓內核得到用戶(hù)空間中發(fā)送緩沖區的頁(yè)信息,再將其映射到內核地址空間,并且返回內核虛擬地址,以供DLMC直接將發(fā)送緩沖區中的數據傳遞到數據鏈路層進(jìn)行發(fā)送,這樣就完成了用戶(hù)地址空間到內核地址空間的映射。

(3)校驗與重傳機制

由于數據鏈路層的傳輸是一種不可靠的網(wǎng)絡(luò )傳輸方式,涉及到對傳輸數據進(jìn)行數據校驗重傳等工作??紤]到局域網(wǎng)或者機對機傳輸的穩定性和可靠性,系統校驗方式使用簡(jiǎn)單的數據校驗和,重傳機制使用選擇重傳ARQ方案。當出現差錯必須重傳時(shí),不必重復傳送已經(jīng)正確到達接收端的數據幀,而只重傳出錯的數據幀或計時(shí)器超時(shí)的數據幀,以避免網(wǎng)絡(luò )資源的浪費。

(4)中斷機制

由于本系統改變了TCP/IP的傳輸機制,所以需要對發(fā)出的數據包進(jìn)行協(xié)議標識。系統在初始化階段,調用內核的dev_add_pack()函數向內核注冊了標識為Ox080A的網(wǎng)絡(luò )數據處理函數。在發(fā)送數據包時(shí),系統先通過(guò)kmap()函數將MPI的發(fā)送緩沖區sendbuff映射到內核映射緩沖區sysbuff,以軟中斷的方式通知系統,申請分配一個(gè)新的SKB來(lái)存儲sysbuff里的數據包,調用dev_queue_xmit函數,使數據包向下層傳遞,并清空sysbuff,釋放SKB。在接收端需要向內核注冊相應的硬件中斷處理函數,在接收到數據后喚醒上層的處理函數,并在netif_receive_skb函數(net/core/dev.c)中屏蔽將SKB包向上層傳遞的語(yǔ)句,改為將SKB里的數據以MPI數據包格式通過(guò)copy_to_user函數拷貝到MPI的接收緩沖區recvbuff中,完成數據的接收,其傳輸過(guò)程如圖4所示。


4 實(shí)驗結果與分析

4.1 實(shí)驗結果和方法

本實(shí)驗環(huán)境是一個(gè)4節點(diǎn)的Beowulf集群系統,每個(gè)節點(diǎn)包含一個(gè)PIV處理器和2 GB內存,操作系統采用Redhat Linux Enterprise 5,并行集群軟件為OPEN MPI 1.3。由于條件所限,加之實(shí)驗規模較小,本實(shí)驗采用MPI自帶的函數MPI_Wtime()來(lái)采集MPI計算的開(kāi)始時(shí)間和結束時(shí)間,取二者的時(shí)間差作為程序的運行時(shí)間并對其進(jìn)行比較和分析。

由于本實(shí)驗的目的是要測試基于數據鏈路層的通信機制的可行性,而該通信機制是在TCP/IP協(xié)議基礎之上構建的,所以本實(shí)驗對象將以單機系統、基于TCP/IP的MPI集群和基于DLMC的MPI集群作為參照平臺進(jìn)行測試。在實(shí)驗用例設計上,考慮到兩種MPI集群的通信機制中的傳輸路徑不同,所以采用如下兩種測試方案:

(1)計算圓周率,主要測試系統的數學(xué)函數浮點(diǎn)計算性能,以點(diǎn)對點(diǎn)短消息傳輸為主;

(2)計算求解三對角方程組,主要測試通信和計算的平衡,以點(diǎn)對點(diǎn)長(cháng)消息傳輸為主。

4.2 性能分析

(1)計算圓周率,如表1所示。

測試結果表明,在精度值設為10-8,精確值比較大時(shí),基于TCP/IP的集群(4個(gè)進(jìn)程)的運行時(shí)間是19.540 237 s,單機系統(單進(jìn)程)運行時(shí)間是84.798 166 s,并行運算效果明顯。在精度值設為10-4,精確值比較小時(shí),基于TCP/IP的集群(4個(gè)進(jìn)程)的運行時(shí)間是0.026 346 s,單機系統(單進(jìn)程)運行時(shí)間是0.013 742 s,這是由于并行運算過(guò)程中,參與運算的機器需要通過(guò)網(wǎng)絡(luò )傳遞消息,若計算量規模不大,則在網(wǎng)絡(luò )傳輸上花費的時(shí)間會(huì )比較多,所以反不如單機的運行速度快。從基于DLMC的集群與基于TCP/IP的集群運行結果對比看,在精度值較大時(shí),前者略微快于后者,而在精度值較小時(shí),后者略快于前者,這主要是因為基于TCP/IP的MPI集群在發(fā)送和接收的整個(gè)過(guò)程中,需要2次數據拷貝,即發(fā)送緩沖區到內核的拷貝和內核到接收緩沖區的拷貝,同時(shí)還有經(jīng)過(guò)各協(xié)議層的開(kāi)銷(xiāo)。而基于DLMC的MPI集群在整個(gè)的傳輸過(guò)程中,通過(guò)使用內存映射,只需要1次數據拷貝,同時(shí)旁路IP層及以上各協(xié)議層,在這種以短消息傳輸為主的測試中使得DLMC集群不能發(fā)揮其在網(wǎng)絡(luò )傳輸上的優(yōu)勢,所以在精度值較大時(shí),二者相差無(wú)幾;在精度值較小時(shí),反而基于TCP/IP的集群更快一些,這是因為內存映射和內核操作所引入的開(kāi)銷(xiāo)大于1次內存拷貝開(kāi)銷(xiāo)而造成性能的下降。

(2)計算求解三對角方程組,如表2所示。

由測試結果表明,在傳輸消息較小時(shí),基于DLMC的MPI集群花費的時(shí)間略微小于基于TCP/IP的MPI集群,這說(shuō)明此時(shí)基于內存映射和內核調用等操作的開(kāi)銷(xiāo)要高于兩次數據拷貝的開(kāi)銷(xiāo),造成網(wǎng)絡(luò )延遲略高。但隨著(zhù)傳輸消息規模的增大,特別是消息大小超過(guò)1 MB時(shí),基于內存映射和數據鏈路層協(xié)議的DLMC相對于具有2次內存拷貝的多協(xié)議機制的網(wǎng)絡(luò )延時(shí)要小得多,這樣使得系統的整體運行時(shí)間明顯低于傳統的TCP/IP集群。

由上分析可知,基于Linux數據鏈路層的集群通信機制是可行的。在該機制下構建的MPI集群系統完成了無(wú)IP條件下的數據傳輸,并且支持多用戶(hù)調用,在傳輸過(guò)程中減少了協(xié)議開(kāi)銷(xiāo)、和內存拷貝次數,相比于TCP/IP傳輸有一定提高。但是基于數據鏈路層協(xié)議的特點(diǎn),該機制只能在局域網(wǎng)范圍內運行,所以集群節點(diǎn)數量或規模會(huì )受到一定的限制,只能適合中小集群系統的應用。由于實(shí)驗條件的有限,對集群通信系統未能充分驗證,希望在今后的研發(fā)工作中能夠進(jìn)一步加強。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程


tcp/ip相關(guān)文章:tcp/ip是什么


數字通信相關(guān)文章:數字通信原理


通信相關(guān)文章:通信原理




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>