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





