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