基于Linux數(shù)據(jù)鏈路層MPI通信機(jī)制的設(shè)計與實現(xiàn)
摘 要: 針對MPI集群通信的特點,通過分析當(dāng)前網(wǎng)絡(luò)的通信結(jié)構(gòu)和MPI的點到點通信模式,提出了一種基于數(shù)據(jù)鏈路層的集群通信機(jī)制,用以減少協(xié)議開銷和內(nèi)存拷貝次數(shù),從而提高集群節(jié)點間的通信性能,并且通過實驗驗證了該機(jī)制的可行性。
關(guān)鍵詞: 內(nèi)存映射; 數(shù)據(jù)鏈路層; 內(nèi)存拷貝
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:0258-7998(2012)02-0127-04
在集群計算系統(tǒng)中,隨著系統(tǒng)規(guī)模的增大,通信效率是影響整個系統(tǒng)獲得高性能的關(guān)鍵因素之一。而隨著局域網(wǎng)傳輸性能的快速提高,Myrinet、Gigabit Ethernet和Infiniband等千兆位網(wǎng)絡(luò)設(shè)備已被廣泛使用,當(dāng)前影響集群節(jié)點間通信性能的瓶頸已經(jīng)從通信硬件的傳送開銷轉(zhuǎn)移到了通信處理軟件的開銷上,所以采用優(yōu)化的通信協(xié)議是降低通信成本、提高結(jié)點間通信的有效手段。
在當(dāng)前的集群通信應(yīng)用中,普遍采用兩類通信結(jié)構(gòu),即核心級通信和用戶級通信。但由于它們設(shè)計的初衷并非是針對集群通信,所以并不適合當(dāng)前集群環(huán)境的特點。為此,本文通過分析這兩類通信結(jié)構(gòu)的特點,提出了以核心級通信為基礎(chǔ),旁路內(nèi)核中IP層及以上協(xié)議層,實現(xiàn)數(shù)據(jù)鏈路層直接與MPI通道接口層通信的新機(jī)制,并通過實驗驗證,為傳統(tǒng)集群的升級改造提供一種新的無連接、無差錯控制,開銷小、延時低的通信機(jī)制。
1 基于數(shù)據(jù)鏈路層的集群通信結(jié)構(gòu)的提出
目前各種通信協(xié)議普遍采用兩種通信結(jié)構(gòu),即核心級通信和用戶級通信[1]。
1.1 核心級通信
在核心級通信中,操作系統(tǒng)內(nèi)核控制著所有消息傳遞中的發(fā)送與接收處理,并且負(fù)責(zé)它們的緩沖管理和通信協(xié)議的實現(xiàn),設(shè)備驅(qū)動程序也是通過內(nèi)核來完成所有的硬件支持與協(xié)議軟件處理的任務(wù),如圖1所示。在通信過程中,系統(tǒng)要經(jīng)過多次內(nèi)核態(tài)與用戶態(tài)之間的數(shù)據(jù)拷貝才能夠?qū)崿F(xiàn)數(shù)據(jù)的傳送。有數(shù)據(jù)表明[2],一般奔騰處理器的內(nèi)存拷貝速率平均為70 Mb/s,但是由于操作系統(tǒng)在交換頁面時的 I/O 數(shù)據(jù)傳送都是阻塞操作,若出現(xiàn)缺頁中斷,其時延將會更大,所以頻繁的內(nèi)存拷貝操作的開銷將是影響整體性能的瓶頸所在。因此,對于通信效率要求較高的集群計算系統(tǒng),核心級通信是不適合的。
1.2 用戶級通信
在用戶級通信中,操作系統(tǒng)內(nèi)核將網(wǎng)絡(luò)接口控制器NIC(Network Interface Controller)的寄存器和存儲器映射到用戶地址空間,允許用戶進(jìn)程旁路操作系統(tǒng)內(nèi)核從直接訪問NIC,直接將數(shù)據(jù)從用戶空間發(fā)送到網(wǎng)絡(luò)中進(jìn)行傳輸。通信事件處理的觸發(fā)采用查詢方式而不是中斷方式,由于旁路操作系統(tǒng)內(nèi)核,使得整個通信過程省掉了執(zhí)行系統(tǒng)調(diào)用、用戶態(tài)與核心態(tài)之間的數(shù)據(jù)拷貝及用戶與內(nèi)核的上下文切換等軟件上的開銷,進(jìn)而減少對主機(jī)CPU資源的占用,縮短通信操作的關(guān)鍵路徑,實現(xiàn)通信與計算的重疊。如圖2所示[3]。
但是,采用用戶級通信協(xié)議時,通信過程中的所有操作均在用戶空間中進(jìn)行,當(dāng)用戶程序出錯或有惡意用戶進(jìn)行破壞時,系統(tǒng)就很容易被破壞。這是因為系統(tǒng)數(shù)據(jù)結(jié)構(gòu)中不僅包含本進(jìn)程(或并行任務(wù))及其相關(guān)信息,同時也包含與本進(jìn)程無關(guān)的其他進(jìn)程(或并行任務(wù))的相關(guān)信息。若某一用戶(并行任務(wù))出錯或失誤,都將會影響到其他用戶(并行任務(wù))的執(zhí)行,因而很難保證系統(tǒng)的安全性和可靠性,也無法保證并行任務(wù)間的相互獨立性。
1.3 基于數(shù)據(jù)鏈路層通信
為了既能保證系統(tǒng)安全、可靠以及并行任務(wù)間相互獨立,同時又能降低通信成本,本文提出了一種以核心級通信為基礎(chǔ)的基于數(shù)據(jù)鏈路層的通信結(jié)構(gòu),即在操作系統(tǒng)內(nèi)核(以Linux內(nèi)核為例)中旁路IP層、INET Socke層和BSD Socket層,使得數(shù)據(jù)鏈路層直接與應(yīng)用程序的通道接口層通信。如圖3所示。