劉 路,張 磊,謝 旻,王永慶
(國防科學(xué)技術(shù)大學(xué)計算機學(xué)院,湖南 長沙 410073)
THNet是國防科學(xué)技術(shù)大學(xué)研制的最新一代高速互連交換網(wǎng)絡(luò),包括兩款自主研制的ASIC芯片,即交換芯片NRC 和網(wǎng)絡(luò)接口芯片NIC。THNet用于構(gòu)建大規(guī)模計算機系統(tǒng)的專用互連網(wǎng)絡(luò),使用NIC接口卡可訪問各種不同類型處理器節(jié)點和I/O 節(jié)點。NRC交換機可以配置為任意拓?fù)浣Y(jié)構(gòu)。
THNet在數(shù)據(jù)鏈路層具有可變長的包格式,對每條鏈路實行基于信用的流控和16位Rolling CRC校驗[1],鏈路層具有基于滑動窗口的重傳機制[2],可保證數(shù)據(jù)在鏈路層正確傳輸。在物理層上,THNet使用全雙工高速串行鏈路,任意兩個端口間可實現(xiàn)數(shù)據(jù)交換,在長至30米的光纖或電纜上仍可實現(xiàn)流水傳輸,獲得雙向160Gbps的峰值速率。
NRC交換芯片使用蟲孔路由機制。在任意網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)中,多端口NRC通過鏈路和其它NRC或單端口的網(wǎng)絡(luò)接口相連。NRC 內(nèi)部采用瓦片式交換結(jié)構(gòu),具有流控和輸入緩沖功能,當(dāng)收到包頭并解碼后,包便立即送到選定的輸出通道上。多個包可以同時流過NRC。16端口NRC 交換芯片的吞吐率高達(dá)2.56Tbps,數(shù)據(jù)包從進入NRC 到離開,產(chǎn)生的時延至多100ns。
NIC網(wǎng)絡(luò)接口芯片做為網(wǎng)絡(luò)和節(jié)點間的橋梁,其設(shè)計目標(biāo)是獲得延遲更低、帶寬更高、更可靠和擴展性更好的性能。它的主機接口支持PCI Express 2.0標(biāo)準(zhǔn),能提供16×5Gbps的傳輸帶寬。網(wǎng)絡(luò)接口為8×10Gbps的全雙工高速串行鏈路。內(nèi)置DRAM(Remote Direct Memory Access)接口,可外接256MB 的DRAM。以下就NIC 芯片設(shè)計與實現(xiàn)的技術(shù)途徑及性能測試結(jié)果進行介紹。
NIC支持短消息MP(Mini Packet)和遠(yuǎn)程內(nèi)存直接訪問RDMA 兩種數(shù)據(jù)傳輸機制。MP是長度為128字節(jié)的報文,其前8字節(jié)被稱為MP 頭,包含傳輸這個MP所需的控制信息,后120字節(jié)為用戶數(shù)據(jù)。MP 從發(fā)送方傳送到接收方后,寫入MP頭指定的某個MPQ(MP Queue),以中斷或查詢方式通知接收方。MPQ 是MP 接收隊列,位于節(jié)點主存中,是一個物理地址連續(xù)、頁面邊界對齊、循環(huán)使用的緩沖區(qū)。NIC 提供的RDMA,可將虛地址連續(xù)的內(nèi)存數(shù)據(jù)塊在節(jié)點間傳輸,進程只需提供發(fā)送方數(shù)據(jù)塊首地址、接收方首地址、數(shù)據(jù)長度以及RDMA 類型等信息,即可啟動RDMA。RDMA 完成后,可采用各種不同的方式通知接收方或發(fā)送方進程。例如,RDMA 描述符中可攜帶一個接收方地址和16字節(jié)的數(shù)據(jù),當(dāng)RDMA 完成后,將這16字節(jié)數(shù)據(jù)寫入指定的地址,接收方進程查詢該地址是否有數(shù)據(jù)寫入即可知道RDMA 是否完成,這被稱作事件機制。也可以選擇在RDMA后緊跟著傳輸一個MP或立即數(shù)RDMA 來通知接收方。事件機制既可以采用查詢方式,也可以采用中斷方式。RDMA 使用的地址,既可以是虛地址,也可以是物理地址,對用戶級通信和內(nèi)核級的應(yīng)用都能很好地支持。進程用提交描述符(Descriptor)的方式啟動數(shù)據(jù)傳輸。描述符的內(nèi)容規(guī)定了RDMA 的類型、源節(jié)點地址、目的節(jié)點地址、RDMA長度、傳輸結(jié)束后以何種方式通知源節(jié)點進程和目的節(jié)點進程,以及RDMA 傳輸?shù)囊恍┛刂菩畔?。NIC 的RDMA 傳輸機制不需要在發(fā)送方和接收方之間建立連接,數(shù)據(jù)的接收方地址已經(jīng)在描述符中了。進程之間可以使用MP 來交換所需的RD-MA 地址和事件地址。
NIC 實現(xiàn)了32 個虛擬接口VP(Virtual Port),VP 的控制寄存器組的地址被映射到用戶空間,用戶進程可以直接訪問這些寄存器,進而通過VP直接訪問NIC,完成各種用戶級通信操作。VP實現(xiàn)了硬件資源的虛擬化,為每個進程形成一個獨占使用硬件的編程視圖。每個VP 都有自己專用的描述符隊列DQ(Descriptor Queue)、MP接收隊列MPQ和完成隊列CQ (Completion Queue)。NIC既實現(xiàn)了片上DQ,也可在主存中擴展為容量更大的主存DQ,用于接收進程提交的描述符。當(dāng)進程使用PIO 寫提交描述符時,它將描述符數(shù)據(jù)直接寫入片上DQ。當(dāng)進程使用DMA 方式提交描述符時,它將描述符數(shù)據(jù)先寫入主存DQ,然后通知NIC 用DMA 讀回描述符。NIC 按round-robin法則處理32個VP的描述符,可保證每個VP內(nèi)描述符是順序執(zhí)行的,但不保證各VP間描述符的執(zhí)行順序。每個VP 內(nèi)的描述符的執(zhí)行可以是非阻塞的,也可以是阻塞的,由描述符本身的控制字段決定。MPQ 和CQ 在主存中,大小可配。CQ 的組織結(jié)構(gòu)與MPQ 類似,執(zhí)行完畢的描述符置上完成信息字段后,可以被寫入CQ。描述符是否寫入CQ 由軟件決定,例如,軟件可設(shè)定當(dāng)發(fā)生傳輸錯誤時才將描述符寫入CQ。
NIC用硬件實現(xiàn)虛實地址變換表ATT(Address Translation Table),以便用較低的資源代價換得最佳地址變換性能。所謂最佳地址變換性能[3]是指:每次地址變換的開銷最小,沒有或幾乎沒有地址變換失效,可提供足夠多的地址變換表項。
NIC 外接DRAM 存放ATT 表,容量為256M字節(jié),可存放32M 個物理頁面地址。在用戶進程注冊內(nèi)存時,驅(qū)動程序鎖定用戶進程空間的數(shù)據(jù)頁面,計算頁面的基地址(物理地址),按照與用戶進程虛地址一一對應(yīng)的順序?qū)懭階TT 表,建立起連續(xù)的用戶進程虛地址到非連續(xù)物理地址的映射關(guān)系。
RDMA 傳輸?shù)奶搶嵉刂纷儞Q在NIC 中完成,首次地址變換與啟動DMA 的準(zhǔn)備工作并行進行,隱藏了首次地址變換開銷。換頁的地址變換與數(shù)據(jù)發(fā)送過程重疊,其開銷也被隱藏,這樣能很好地支持RDMA 操作的流水性,充分利用硬件的帶寬性能。由于ATT 表的容量足夠大,能覆蓋絕大多數(shù)應(yīng)用進程的全部地址空間,對可以訪問的用戶空間沒有大小和位置的限制,不會產(chǎn)生地址變換失效,也就沒有地址變換失效開銷。用戶進程內(nèi)存注冊具有較大的軟件層開銷,但注冊一般在通信開始前完成,對通信過程本身沒有影響。
數(shù)據(jù)發(fā)送方使用物理地址讀主存中的數(shù)據(jù),在接收方同樣也使用物理地址將從網(wǎng)絡(luò)上接收到的數(shù)據(jù)寫入主存。一次完整的用戶級數(shù)據(jù)傳輸至少要執(zhí)行兩次地址變換。對于接收方的地址變換,可以在發(fā)送方執(zhí)行,也可以在接收方執(zhí)行。但是,如果在發(fā)送方執(zhí)行接收方的虛實地址變換,會使得換頁查表、錯誤報文隔離、安全性檢查以及處理多對一通信等方面的處理變得很困難。NIC 采取了后一種地址變換策略,即所有的虛實地址變換都在距離它要訪問的主存最近的NIC進行。
依賴ATT 表的片上虛實地址變換,進程僅使用發(fā)送方和接收方的虛地址信息就能將數(shù)據(jù)塊在節(jié)點間直接傳輸,不需要任何額外的數(shù)據(jù)拷貝,傳輸過程也不需要操作系統(tǒng)的參與。
傳統(tǒng)的用戶級通信中,描述符隊列在主存,進程將描述符準(zhǔn)備好后,向NIC執(zhí)行一次PIO 寫(置門鈴標(biāo)志);NIC 收到門鈴后,執(zhí)行一次DMA 讀,從主存中將描述符取回,然后分析描述符,根據(jù)描述符的請求再次執(zhí)行DMA 讀,取回要傳輸?shù)臄?shù)據(jù),再將數(shù)據(jù)打包發(fā)走。采用上述方法,一次PIO寫加兩次DMA 讀才能讀回數(shù)據(jù),這導(dǎo)致了RDMA 的啟動開銷較大,對于幾十字節(jié)的細(xì)粒度數(shù)據(jù),RDMA 傳輸?shù)耐ㄐ叛舆t就會比較大。NIC 芯片為每個VP 實現(xiàn)了一個512深、64位寬的DQ,進程用PIO 寫將描述符寫入DQ,可以節(jié)省一次DMA 讀的開銷。NIC 不能控制進程調(diào)度,進程上下文切換隨時可能發(fā)生,進程可能沒有寫完描述符就被切換出去,需要采取措施保證描述符的原子性。NIC為每個DQ 設(shè)置了一個檢查模塊,將描述符數(shù)據(jù)依次從DQ 中讀出,確定描述符完整后,再進行處理。
一次PIO 寫可傳送64位數(shù)據(jù),而NIC定義的描述符最大有128個字節(jié),需要執(zhí)行16次PIO 寫才能將一個描述符全部寫入DQ。在設(shè)計過程中發(fā)現(xiàn),即使進程連續(xù)執(zhí)行PIO 寫,可是在PCIE 總線接口處“看到”的PIO 寫入的數(shù)據(jù)并不是連續(xù)寫入的,而是每間隔16個時鐘周期才寫入一個數(shù)據(jù)。PCIE接口的時鐘頻率是250MHz,寫完一個128字節(jié)的描述符耗時4ns*16*16≈1μs,這比一次DMA 讀數(shù)據(jù)的時間(約0.8μs)還要大。通過測試與分析,認(rèn)為原因與橋芯片對PIO 寫的處理有關(guān)。Intel的Intel?64和IA-32體系結(jié)構(gòu)中[4],其存儲器類型中有一類是WC(Write Combining)類型,對這種類型存儲器的寫可以被推遲,后續(xù)的寫在WC緩沖區(qū)中被合并,以減少對存儲器總線的訪問次數(shù)。Intel 的CPU 提供了一種寫合并緩沖(Write Combining Buffer),一般有64 個字節(jié),可將地址連續(xù)的PIO 寫的數(shù)據(jù)合并后,再以burst方式驅(qū)動到數(shù)據(jù)總線上。如果128字節(jié)的描述符按這種方式處理,只需要兩次可“看到”的PIO 寫就可以寫入NIC的DQ 中,耗時約4ns*(16+16+16)≈0.2μs。我們將NIC 上的DQ 地址空間映射為WC類型的存儲器,就可以實現(xiàn)PIO 的寫合并,這是通過對MTRR[4](Memory Type Range Registers)進行編程或在頁面屬性表PAT[4](Page Attribute Table)中配置參數(shù)實現(xiàn)的。
為兼顧用戶使用的靈活性,NIC也支持以傳統(tǒng)的DMA 方式提交描述符,這時其描述符隊列在主存用戶空間。NIC支持以PIO 方式提交描述符與DMA 方式提交描述符在同一個VP 中混合使用。NIC還支持立即數(shù)RDMA 傳輸,它利用描述符中的空閑區(qū)域,將少部分?jǐn)?shù)據(jù)夾帶在描述符中,與描述符一起提交到NIC,省卻了一次DMA 讀取數(shù)據(jù)的開銷,這種機制可顯著減小細(xì)粒度數(shù)據(jù)的傳輸延遲。NIC支持1~128字節(jié)的立即數(shù)傳輸。
DMA 跨越PCIE 總線讀主存數(shù)據(jù)的延遲較大,我們沒有辦法消除首次DMA 讀的延遲,但可以設(shè)法隱藏后續(xù)DMA 讀的延遲,并且付出盡可能小的硬件代價。NIC 啟動RDMA 傳輸時,將總的數(shù)據(jù)塊拆分為多個1KB的小數(shù)據(jù)塊,然后向PCIE接口提交多個小數(shù)據(jù)塊的讀請求,只要RDMA 數(shù)據(jù)接收FIFO 有足夠的空閑空間接收掛起的讀請求所要求的數(shù)據(jù)的合計長度。PCIE 接口內(nèi)部將1 KB的用戶讀請求再拆分生成128 字節(jié)或256 字節(jié)的讀請求報文發(fā)至PCIE 總線(由參數(shù)Max_Read_Request_Size決定)。PCIE 總線MASTER事務(wù)的最大數(shù)據(jù)長度為4K 字節(jié),我們將拆分的長度定為1K 而不是4K 字節(jié),拆分算法的復(fù)雜性幾乎一樣,卻能夠在使用最小尺寸的數(shù)據(jù)接收FIFO的情況下有效隱藏PCIE 讀延遲。NIC 的RDMA數(shù)據(jù)接收FIFO 大小為8K 字節(jié)。
NIC支持字節(jié)邊界對齊方式RDMA 傳輸,數(shù)據(jù)塊的發(fā)送方首地址和接收方首地址都由用戶指定,沒有任何限制。發(fā)送方地址用于從發(fā)送方主存讀數(shù)據(jù),接收方地址用于把數(shù)據(jù)寫入接收方主存,NIC內(nèi)部數(shù)據(jù)幀的寬度是32字節(jié),發(fā)送方首地址和接收方首地址相對于數(shù)據(jù)幀首的偏移可以不同,這將導(dǎo)致數(shù)據(jù)在數(shù)據(jù)幀中位置的變化,需要將按發(fā)送方地址格式讀回的數(shù)據(jù)重新對準(zhǔn)成接收方地址要求的數(shù)據(jù)格式。例如有如下傳輸:數(shù)據(jù)塊的長度是34字節(jié),發(fā)送方的地址偏移是31,接收方的地址偏移是0。那么,從發(fā)送方主存讀回的數(shù)據(jù)的格式和準(zhǔn)備寫入接收方主存的數(shù)據(jù)格式如圖1所示??梢钥闯?,雖然有效數(shù)據(jù)的長度是一樣,但是從發(fā)送方讀回的數(shù)據(jù)在首幀的偏移是31,幀數(shù)是3,準(zhǔn)備寫入接收方的數(shù)據(jù)在首幀的偏移是0,幀數(shù)是2。
Figure 1 Data alignment圖1 數(shù)據(jù)對準(zhǔn)
NIC中用地址對準(zhǔn)模塊解決這個問題。在NIC中設(shè)置了兩組FIFO,一組是RDMA 數(shù)據(jù)FIFO,存儲從主存中讀回的數(shù)據(jù);另一組是RDMA 發(fā)送數(shù)據(jù)FIFO,存儲經(jīng)過地址對準(zhǔn)模塊變換的數(shù)據(jù)。地址對準(zhǔn)模塊將數(shù)據(jù)對準(zhǔn)與組裝網(wǎng)絡(luò)報文的任務(wù)結(jié)合在一起完成,盡量減少數(shù)據(jù)傳輸通路上的節(jié)拍數(shù)并使對準(zhǔn)過程流水起來。對準(zhǔn)模塊把數(shù)據(jù)的目的地址按128字節(jié)邊界進行拆分,按拆分后的地址進行數(shù)據(jù)對準(zhǔn),得到的網(wǎng)絡(luò)報文到達(dá)目的節(jié)點后,都是對齊128字節(jié)邊界的,在目的節(jié)點只要再做一次地址變換,就可以很規(guī)整地寫入目的節(jié)點主存中。
NIC實現(xiàn)了基于控制報文CP(Control Packet)觸發(fā)的描述符隊列處理機制,以支持卸載的聚合通信。其基本思想是:描述符在DQ 中排隊,但描述符的執(zhí)行需要某種觸發(fā)機制,既可以由軟件主動啟動,也可以是網(wǎng)絡(luò)中接收的報文狀態(tài)達(dá)到一定條件而啟動。將聚合通信算法樹構(gòu)造到NIC 中的方法是:軟件先通過算法構(gòu)造過程計算當(dāng)前任務(wù)在算法樹中所處的位置,以及當(dāng)前任務(wù)需要執(zhí)行的通信操作;然后向DQ 中提交對應(yīng)的通信操作的描述符,但控制這些描述符的執(zhí)行,只有在特定條件滿足后才執(zhí)行。
控制報文CP是一種特殊的MP報文,在它的MP頭增加了一些控制字段,使它的行為不同于普通MP的行為,以達(dá)到一個NIC 的VP 能夠控制另外一個NIC的VP上的通信操作的目的。其功能有:CP 到達(dá)目的VP 后,能夠啟動目的VP 的DQ 中已排隊描述符的執(zhí)行;CP 攜帶的數(shù)據(jù)由用戶控制是否寫入目的VP 的MPQ 中;CP 攜帶的數(shù)據(jù)由用戶控制是否替換目的VP 的DQ 中排隊的MP描述符中的數(shù)據(jù)。
NIC為每個VP設(shè)置一個CP 計數(shù)器,軟件用戶可以用它來對到達(dá)的CP報文進行計數(shù),每收到一個CP報文,就觸發(fā)檢查描述符隊列的動作,將計數(shù)結(jié)果與DQ 中排隊的CP描述符中設(shè)定的CP報文個數(shù)進行比對,如相符就啟動描述符隊列的執(zhí)行。啟動描述符執(zhí)行后,CP計數(shù)器減去描述符CP值并繼續(xù)計數(shù)。由于每個任務(wù)進入聚合通信的時間不能精確同步,可能會出現(xiàn)當(dāng)CP報文到達(dá)目的VP時,目的VP的DQ 中還沒有提交描述符的情況,但此時對CP報文還是會進行計數(shù),CP報文也可以按用戶設(shè)置的控制位被寫入MPQ 中。
NIC芯片結(jié)構(gòu)如圖2 所示。它實現(xiàn)了三個DMA 引擎,分別稱為0#、1#、2#引擎。0#引擎處理本地RDMA 寫類型描述符,負(fù)責(zé)讀本地主存中的數(shù)據(jù)。1#引擎處理遠(yuǎn)地節(jié)點送至本地的RDMA 讀類型描述符,也讀本地主存中的數(shù)據(jù),這些數(shù)據(jù)是遠(yuǎn)地節(jié)點請求的。這兩個引擎各自獨立工作,產(chǎn)生的讀數(shù)據(jù)請求2 選1 仲裁后寫入同一個DMA 讀請求緩沖區(qū)。讀回的數(shù)據(jù)分別進入各自的數(shù)據(jù)FIFO,每個FIFO 大小為8K 字節(jié),足夠隱藏PCIE讀延遲。數(shù)據(jù)通過對準(zhǔn)模塊和發(fā)送數(shù)據(jù)FIFO,再由鏈路發(fā)送到鏈路接口。本地RDMA 寫類型描述符產(chǎn)生的數(shù)據(jù)和遠(yuǎn)地RDMA 讀類型描述符產(chǎn)生的數(shù)據(jù)在鏈路層使用不同的虛信道,鏈路報文組裝發(fā)送模塊按round-robin法則發(fā)送數(shù)據(jù),其中還需要用到虛信道發(fā)送信用、滑動窗口重傳、緩沖區(qū)是否空閑等條件進行調(diào)度。2#引擎專門處理寫事務(wù),所有主存用戶數(shù)據(jù)的寫入以及中斷的產(chǎn)生都由2#引擎負(fù)責(zé)。
鏈路發(fā)送模塊負(fù)責(zé)鏈路報文的組裝和發(fā)送。它從片上路由表中取出路由場填入報文的頭flit,不僅要將網(wǎng)絡(luò)報文數(shù)據(jù)分割轉(zhuǎn)換成鏈路報文、流水地發(fā)送出去,還要應(yīng)付在這個過程中隨時可能出現(xiàn)的特殊情況:重傳緩沖區(qū)不可用信號置1。一旦這個信號升起,表明重傳緩沖區(qū)中沒有空閑的緩沖塊來接收鏈路報文flit,這時,鏈路發(fā)送模塊就得及時“剎車”,并保留當(dāng)時的發(fā)送狀態(tài),處理好其它流水線的暫停,保存中間結(jié)果,等重傳緩沖區(qū)不可用信號無效后,再次啟動發(fā)送數(shù)據(jù)。NIC中該模塊的實現(xiàn)效率很高,對于一個RDMA 傳輸?shù)乃袌笪?,僅在發(fā)送第一個報文時額外增加了一拍用于查表讀路由場,其它任何時候只要鏈路允許,都可以每拍流出一個鏈路報文flit。
鏈路報文處理模塊負(fù)責(zé)將網(wǎng)絡(luò)輸入的鏈路報文還原成網(wǎng)絡(luò)報文,并且對報文的完整性和正確性進行檢測,剔除頭尾標(biāo)志不全、超長、迷路、數(shù)據(jù)錯等不合格報文,不讓錯誤報文數(shù)據(jù)被誤寫入主存,避免主機因錯誤的DMA 寫操作導(dǎo)致死機,這種機制稱為臟包丟棄。該模塊可以發(fā)中斷通知主機有臟包丟棄,被丟棄的臟包保存在錯誤緩沖區(qū),用戶可查看,該功能在調(diào)試時很有用。
鏈路接口完成基于滑動窗口的重傳、信用維護、發(fā)送方完整性檢查、接收方完整性檢查、鏈路狀態(tài)維護、發(fā)送數(shù)據(jù)的仲裁、CRC校驗邏輯等功能。
Figure 2 NIC architecture圖2 NIC芯片結(jié)構(gòu)
主機接口支持PCI Express 2.0 標(biāo)準(zhǔn),16lanes,速率為5Gbps,支持鏈路寬度、速率自動協(xié)商,支持鏈路反轉(zhuǎn)、極性交換功能。在事務(wù)層之上提供一個用戶接口模塊,實現(xiàn)PCIE 報文的解析和封裝,以及TC-VC映射、響應(yīng)超時管理、端到端數(shù)據(jù)校驗、數(shù)據(jù)錯誤檢測、電源管理、高級錯誤報告等功能,以簡化用戶數(shù)據(jù)的發(fā)送和接收。用戶接口模塊中,PIO 模塊負(fù)責(zé)描述符的發(fā)送和寄存器的讀寫;DMA 模塊將DMA 讀寫請求發(fā)送給主機,將接收到的讀響應(yīng)數(shù)據(jù)分送到各自的數(shù)據(jù)FIFO;中斷處理模塊將中斷請求轉(zhuǎn)換為PCIE 中斷報文,支持INTx和MSI兩種中斷類型。
NIC芯片沒有內(nèi)嵌微處理器,所有功能都用硬件邏輯實現(xiàn)。NIC采用標(biāo)準(zhǔn)單元90nm 工藝,8層金屬,芯片尺寸10mm×10mm,芯片規(guī)模1 200萬門,采用倒裝BGA 封裝,引腿數(shù)個673。支持IEEE 1149.1JTAG邊界掃描測試,系統(tǒng)掃描鏈用于芯片生產(chǎn)測試和板級導(dǎo)通測試,用戶掃描鏈用于用戶邏輯狀態(tài)觀測與芯片調(diào)試,支持掃入和掃出功能。芯片最大功耗18W。NIC 實現(xiàn)了三個PLL,分別給各外部接口和核心邏輯提供時鐘,核心邏輯的工作頻率是312.5MHz,DRAM 接口的工作頻率是200~266MHz。
測試平臺使用兩臺SMP 服務(wù)器,CPU 為2.93GHz的Intel至強系列X5670 處理器,6 核,運行2.6.32 版的Linux 內(nèi)核。在服務(wù)器PCIE 2.0總線上安裝NIC 接口卡,工作頻率5GHz,鏈路數(shù)為16,用光纖直連,構(gòu)成最短傳輸鏈路。
節(jié)點間通訊延遲測試程序使用Ping Pong方式,測試結(jié)果如圖3所示,用DMA 方式提交描述符的最小延遲為2.5μs,使用立即數(shù)RDMA 的最小延遲為1.95μs。如果采用PIO 寫提交描述符,測到的RDMA 最小延時為1.57μs。RDMA 帶寬測試中,采用流水傳輸方式,由發(fā)送方進程連續(xù)提交多個RDMA 寫操作,然后等待接收方進程收到所有數(shù)據(jù)后的應(yīng)答,收到應(yīng)答后,計算單向數(shù)據(jù)傳輸帶寬。測試結(jié)果如圖4所示,單向的數(shù)據(jù)傳輸峰值帶寬達(dá)到6.34GB/s,考慮到必要的硬件協(xié)議處理開銷,這個帶寬值基本上達(dá)到了PCIE 總線和網(wǎng)絡(luò)鏈路所能提供的極限應(yīng)用帶寬(接近80%)。表1給出了當(dāng)前用于超級計算機的幾種主要互連網(wǎng)絡(luò)的性能[5],其中既有定制的互連網(wǎng)絡(luò),也有基于通用I/O 總線的商用互連網(wǎng)絡(luò)產(chǎn)品,如Infiniband、Infinipath、Myrinet。與它們相比,NIC 的延遲與帶寬性能具有較大的優(yōu)勢。
為了驗證NIC 硬件提供的聚合通信機制,我們對軟件構(gòu)造的相應(yīng)算法樹進行了測試,圖5和圖6給出Barrier和Bcast的測試結(jié)果。這個測試是在天津超算中心“天河一號”主機上進行的??梢钥闯?,在4 096節(jié)點規(guī)模時,基于NIC 硬件機制的通信對比使用點點通信時,可以將聚合通信的延遲降低4倍以上。
Table 1 Some bandwidths and latencies for various networks表1 幾種互連網(wǎng)絡(luò)的帶寬和延遲性能
目前最成功的商用互連產(chǎn)品是Infiniband,在2010年世界TOP 500排名中[6],有42.6%的超級計算機采用Infiniband做互連系統(tǒng)。Infiniband是I/O 標(biāo)準(zhǔn)化組織制定的一種連接服務(wù)器、網(wǎng)絡(luò)設(shè)備和存儲設(shè)備等交換結(jié)構(gòu)的互連規(guī)范[7],由不同的公司開發(fā)生產(chǎn)符合其規(guī)范的硬件產(chǎn)品,如Mellanox、Qlogic等。Infiniband規(guī)范定義了四種傳輸模式:可靠連接、不可靠連接、可靠數(shù)據(jù)報、不可靠數(shù)據(jù)報。這四種模式中,Infiniband規(guī)范要求主機適配器HCA 硬件實現(xiàn)可靠連接、不可靠連接、不可靠數(shù)據(jù)報這三種,對可靠數(shù)據(jù)報不做要求??煽窟B接是目前基于Infiniband實現(xiàn)MPI實際使用的傳輸服務(wù)。在這種模式下,任意兩個進程在通信前,都必須各自產(chǎn)生一個QP對,與對方進程的QP對建立連接后才能進行通信。使用QP 對建立連接會耗費節(jié)點的內(nèi)存資源,且耗費量隨系統(tǒng)節(jié)點數(shù)目(進程數(shù)目)的增加而呈平方關(guān)系增加,這種工作模式給系統(tǒng)的可擴展性帶來嚴(yán)重影響。假設(shè)系統(tǒng)有N 個節(jié)點,每個節(jié)點上有M 個core,每個core上運行一個進程,所有進程都要相互通信,則每個節(jié)點需建立的連接的總數(shù)為O(M2N)個[7]。假設(shè)每個QP對只占用4K 字節(jié)內(nèi)存,則每個節(jié)點上QP對占用內(nèi)存的總數(shù)為O(M2N*4K)字節(jié)。日本“京”超級計算機系統(tǒng)[8]安裝的CPU 數(shù)是80K,每個CPU 有8 核。如果采用Infiniband互連,則每個節(jié)點建立連接所需的內(nèi)存將達(dá)到82*80K*4K=20GB,考慮到每個節(jié)點還要為與之通信的進程預(yù)定義一定數(shù)量的數(shù)據(jù)接收緩沖區(qū),所需的內(nèi)存數(shù)量將比20GB 大得多。文獻(xiàn)[9]為了解決Infiniband可靠連接的可擴展性問題,提出了可擴展的可靠連接XRC(eXtended Reliable Connection)的方案。在XRC中,源進程只需與目標(biāo)節(jié)點建立一個連接,目標(biāo)節(jié)點上所有的進程共享這個連接與源進程通信。這將極大緩解Infiniband的可擴展性問題。但是,即使這樣,在未來幾年構(gòu)建100P(Petascale)或E(Exascale)級系統(tǒng)時,Infiniband的使用仍然會受到限制。據(jù)估算,即使每個CPU上集成個64核,每核每拍流出8個浮點運算結(jié)果,CPU 工作頻率2GHz,單CPU 的浮點運算能力也只有64*8*2=1 024GFlops/s,構(gòu)建E 級系統(tǒng)所需的CPU 個數(shù)將為1M 個。如果使用基于XRC連接的Infiniband互連,每個節(jié)點建立連接所需內(nèi)存64*1M*4K=256GB,這幾乎是不可能承受的。除非Infiniband的連接機制進一步改進,一個進程只需要一個QP 對就可以與其它所有進程進行通信。所以,E 級超級計算機的互連不太可能采用Infiniband,只能是定制的。NIC 實現(xiàn)的無連接RDMA 機制、MPI實現(xiàn)都基于RDMA 讀/寫操作,具有很好的可擴展性,在研制下一代面向100P或E級超算系統(tǒng)時可以繼承使用。
在高維mesh/torus網(wǎng)絡(luò)中,采用自適應(yīng)路由可使全系統(tǒng)節(jié)點獲得均衡的帶寬和延遲性能,減少網(wǎng)絡(luò)擁塞和熱點。如Cray的Gemini[10]實現(xiàn)了自適應(yīng)路由。自適應(yīng)路由能極大改善網(wǎng)絡(luò)性能,但硬件實現(xiàn)難度較大,如在交換層要避免死鎖,在接收端需要識別機制來判斷亂序到達(dá)的報文是否收齊等。很多互連系統(tǒng)采取的路由策略是確定性路由,如Infiniband采用分布式確定路由[7],“京”系統(tǒng)的Tofu互連采用確定性路由[8]?!疤旌右惶枴钡幕ミB采用源路由,NIC 中采用了小尺寸的鏈路報文長度,每個鏈路報文的長度為160個字節(jié),分拆成5個flit進行傳輸,每個報文的凈數(shù)據(jù)載荷為128個字節(jié),在交換層傳完1個報文只需5個時鐘周期。相比于Infiniband的最大報文長度4K 字節(jié),Tofu互連的最大報文長度為1 920字節(jié),在都采用確定性路由策略時,NIC的小粒度報文策略能較好地緩解網(wǎng)絡(luò)擁塞,減少網(wǎng)絡(luò)熱點的產(chǎn)生,且NIC 使用小粒度報文,仍能獲得理論峰值帶寬80%的實測帶寬。
很多互連系統(tǒng)硬件有選擇地支持某些聚合通信操作,如IBM 的BlueGene/L[11]有獨立的reduction和barrier 網(wǎng) 絡(luò);QsNet硬 件[12]支 持broadcast、barrier及卸載的reduction;Tofu互連[8]支持barrier。NIC中利用CP 報文觸發(fā)的描述符隊列處理機制,能夠?qū)⒕酆贤ㄐ挪僮餍遁d到網(wǎng)絡(luò)接口中執(zhí)行,能大幅加速broadcast和barrier的執(zhí)行。
NIC 實現(xiàn)了無連接、零拷貝、用戶級通信的RDMA 傳輸機制,具有較好的可擴展性,支持的節(jié)點數(shù)可達(dá)16 384個,對目前主流的多核CPU 的運用也有較好的支持。NIC 已成功應(yīng)用于天津超算中心“天河一號”超級計算機?!疤旌右惶枴钡腖inpack實測峰值性能達(dá)到每秒2.566千萬億次浮點運算,在2010年世界超級計算機TOP 500中排名第一[6],實現(xiàn)了中國在高性能計算領(lǐng)域的重大突破。下一代面向100P 或E 級規(guī)模超算系統(tǒng)的研制,對互連網(wǎng)絡(luò)將有更高的要求,網(wǎng)絡(luò)在面對瞬發(fā)失效和硬件永久失效時要能保證正常工作。在NIC中我們已經(jīng)實現(xiàn)了鏈路級的可靠傳輸(報文級可靠性),下一步我們要基于硬件實現(xiàn)端到端的可靠傳輸(消息級可靠性),進一步提高系統(tǒng)網(wǎng)絡(luò)的可靠性和可用性。
[1]Maddox R A,Singh G,Safranek R J.Weaving high per-formance multiprocessor fabric[M].Santa clara:Intel Press,2009.
[2]Tanenbaum A S.Computer networks[M].4th Edition.San Antonio:Pearson Education Inc,2002.
[3]Schoinas I,Hill M D.Address translation mechanisms in network interfaces[C]∥Proc of the 4th International Symposium on High Performance Computer Architecture,1998:219-230.
[4]Intel? 64and IA-32architectures software developer’s manual[EB/OL].[2010-05-17].http://www.intel.com.
[5]Overview of recent supercomputers[EB/OL].[2010-05-17].http://www.hpcresearch.nl.
[6]Top500_201011.xls[EB/OL].[2010-05-17].http://www.top500.org/.
[7]InfiniBand Trade Association.Infiniband architecture specification,version 1.2.1[EB/OL].[2010-05-17].http://www.infinibandta.org.
[8]Toyoshima T.ICC:An interconnect controller for the Tofu interconnect architecture[C]∥Proc of A Symposium on High Performance Chips-Hot Chips 22,2010:1.
[9]Koop M J,Sridhar J K,Panda D K.Scalable MPI design over Infiniband using eXtended reliable connection[C]∥Proc of 2008IEEE International Conference on Cluster Computing,2008:203-212.
[10]Alverson R,Roweth D,Kaplan L.The Gemini system interconnect[C]∥Proc of the 18th IEEE Symposium on High Performance Interconnects,2010:83-87.
[11]Almási G,Archer C J,Erway C C.Optimization of MPI collective communication on BlueGene/L systems[C]∥Proc of ICS’05,2005:253-262.
[12]Roweth D.HPC interconnects.A review of current products and introduction to QsNetIII[EB/OL].[2008-02-10].http://www.epcc.ed.ac.uk/msc/programme-information/guest-lectures/2007-2008/duncan-roweth-talk.