本站小編為你精心準備了SCI體系對數據通信的作用參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
作者:姜震熊華鋼邵定蓉單位:北京航空航天大學電子工程系
1、引言
IEEEStd1596-1992ScalableCoherentInterface(sci)可擴展一致性接口[1]是一種專門針對并行計算機系統設計的,可以提供千兆位互連帶寬和微秒級通信延遲的高性能系統互連技術。它提供了一種硬件實現的分布式共享存儲(DSM)的并行計算機結構,支持硬件的緩存一致性,主要應用于高性能并行計算機系統互連,高性能I/O等領域。
SCI技術來源于傳統總線技術的固有限制,傳統總線是一種共享介質的互連技術,隨著系統中連接節點的增加,系統性能下降,而SCI提供節點之間單向、點到點的互連,支持靈活的拓撲:寄存器插入環、2DMesh、交換式互連等。任何一種互連方式都支持消息的并發傳輸,從而在一定規模內,系統的性能隨網絡中的節點數增多而增加,具有可擴展性。本文主要研究WindowsNT環境下實現SCI數據通信的方法,給出了SCI數據通信軟件的設計。
2SCI協議概述
SCI協議包括三個層次:物理層、邏輯層和緩存一致層(可選)。物理層對SCI的鏈路規范、拓撲方式及網絡接口等做出了規定;邏輯層主要定義了SCI的數據包格式、邏輯事務協議;緩存一致層針對并行計算的分布式共享存儲模型提供硬件緩存一致性的支持,是SCI協議的可選部分。
SCI可以采用各種靈活的拓撲構成互連系統,支持多種鏈路形式,其中18-DE-500并行鏈路寬18位,采用差分信號傳輸,每條信號線提供500Mbps的帶寬,其中16位用于數據傳輸,因此理論上可提供8Gbps的互連帶寬。基本的拓撲是寄存器插入環,支持消息的并發傳輸,如圖1所示。SCI節點在發送數據的同時仍然可以接收數據并進行處理,考慮SCI環中每個節點都向其下游節點發送消息,則圖1中的4節點SCI環中可以存在四個獨立的數據流,使系統吞吐量達到單條鏈路吞吐量的四倍。SCI網絡傳輸的基本單位是符號(Symbol),每個符號長2個字節(Byte),SCI使用復雜的技術克服了總線技術/共享介質0的固有限制,但是對互連系統應用提供了類似總線的服務:讀事務(ReadXX)、寫事務(WriteXX)、移動事務(MoveXX)和鎖定事務(Lock)等。為使通信較少受到傳輸距離的影響,SCI采用了分離事務協議,使CPU在發出/請求0后不必等待/響應0,可以立即進行其它操作。
SCI中每一個事務都由子操作(Subaction)組成,每個子操作包含兩種消息的傳輸,如圖1中虛線所示,以節點1向節點3發起的Read64事務為例:(1)節點1應用層發送請求發送(RequestSend)消息,向節點3請求讀64字節的數據;(2)節點3的SCI接口自動返回請求回應(RequestEcho),說明請求發送消息收到;(3)節點3應用層發送響應發送(ResponseSend)消息,附帶有節點1請求的64字節數據;(4)節點1的SCI接口自動發送響應回應(ResponseEcho)消息,表明收到節點3的消息,從而完成節點1向節點3發起的Read64事務。
3WindowsNT4.0環境下SCI設備驅動模型
SCI支持WindowsNT4.0,Windows2000,Solaris,Linux,VxWorks,HP-UX等主流操作系統,其中在WindowsNT4.0環境下的測試性能最好,WindowsNT4.0對硬件的訪問做了嚴格的限制,系統設計者必須嚴格遵循驅動程序開發規范進行硬件驅動程序的開發和使用。目前商用SCI接口適配卡由挪威的Dolphin公司[2]提供,主要基于計算機I/O總線。采用Intel平臺上PCI總線的SCI接口適配卡D330[2]構成的SCI通信系統的設備驅動模型如圖2所示。D330SCI適配卡支持64位和32位的PCI總線,完成SCI構成的DSM系統與SCI節點機的接口功能,同時實現SCI協議規范。SCI采用64位地址,提供整個DSM系統的全局地址空間,其中前16位表示節點地址,各節點機PCI總線的64位或32位地址則映射至SCI全局地址的后48位,各節點機只要對該全局地址空間的某一地址操作,節點機之間的數據傳遞即可由SCI硬件自動實現。Pcisci.sys提供了SCI網絡的底層驅動,完成PCI總線設備的訪問功能,并且將PCI總線事務映射成為SCI網絡事務,提供透明的SCI設備訪問機制。Pcisci.sys中的IRM驅動函數提供SCI協議相關的功能驅動。D330適配卡的參數可以通過調用IRM驅動函數進行更改。一般情況下,系統設計者不應隨意調用IRM驅動函數對D330內部參數進行更改。Sisci.sys提供了SCI網絡的高層驅動,它屏蔽了SCI協議細節,為系統設計者提供了基于共享內存、DMA、遠程中斷等的數據通信接口,Sisci.sys在WindowsNT平臺上以同步通信方式工作,異步通信可以結合多線程技術實現。
Sisciapi.lib為Win32應用程序提供了用戶模式下的接口函數(SISCIAPI)[3,4],SISCIAPI既支持共享內存的編程模式也支持消息傳遞的編程模式。在建立了內存映射之后,應用程序利用指針就可以實現數據在各節點機之間的傳遞,體現了SCI支持共享內存的特點;利用DMA實現數據通信,應用程序必須負責數據傳輸的全部過程,這體現了SCI對傳統的消息傳遞模式的支持。
SCI提供了基于共享內存和DMA的兩種同步數據通信方式,通信采用面向連接的方式,利用中斷實現通信雙方節點的事件通知,下面的討論中我們稱發送數據的節點為Client,接收數據的節點為Server。
3.1共享內存方式
共享內存是一種針對小規模數據傳輸的Programm-bleI/O(PIO)通信方式,SCI使用段(Segment)的概念將本地內存映射成本地段localsegmentt,將遠端內存映射成遠程段remotesegmentt,Server建立localsegmentt類型的變量使得本地內存可以為其它節點訪問;Client建立remotesegmentt類型的變量使得訪問其它節點上的內存資源成為可能。通信雙方將各自的本地內存映射到SCI全局地址空間之后,依靠設定的內存標志完成數據通信。在圖3中,Client節點和Server節點分別聲明localsegmentt的變量localsegC和localsegS,利用這兩個變量建立本地內存在SCI全局地址空間的內存映像,然后Client節點聲明remotesegmentt的變量remotesegS用于連接Server節點在SCI全局地址空間的內存段,從而建立了各個節點在SCI全局地址空間中的內存映射關系。Server節點使用SCICreateSegment()申請本地內存,創建localsegS,指定該段標志8,然后調用SCIMapLo-calSegment()返回本地指針供Server節點中的進程訪問,調用SCIPrepareSegment()將申請到本地內存的localsegS映射到SCI全局地址空間;SCISetSegmentAvailable()則使該localsegS為SCI網絡中的所有節點機可見。
Client節點設定本地段localsegC的過程同上,欲完成向Server節點發送數據,Client節點必須調用SCI-ConnectSegment()與Server節點建立連接,將Server本地內存在全局地址空間中的映像映射到remotesegS,然后利用SCIMapRemoteSegment()返回屬于Client進程的本地指針供訪問Server節點時使用,連接建立之后就可以使用返回的內存指針或SCIMemCopy(本地指針,remotesegS)函數進行數據傳輸了。
3.2DMA方式
當進行大量的數據傳輸時,DMA數據傳輸方式可以充分利用帶寬資源提高吞吐量。由于采用DMA方式時,存在DMA隊列的建立、管理等通信開銷,所以與共享內存方式相比,DMA方式的通信延遲略有增加。使用DMA方式,應用程序要創建DMA隊列,將數據放入DMA隊列,啟動DMA隊列,查詢DMA隊列的狀態等,應用程序必須負責數據傳送的整個過程。DMA方式的通信仍然建立在段(Segment)概念的基礎之上,在編程方面與共享內存方式的區別主要體現在Client節點,具體過程如下:
(1)創建本地段,SCICreateSegment(&localsegC);(2)映射本地段,返回本地數據指針(void*)SCIMapLocalSegment(&localmapC);
(3)將本地段映射至SCI全局地址空間,SCIPrepare-Segment(localsegC);
(4)創建DMA隊列,SCICreateDMAQueue(&dmaqueue);(5)連接Server節點本地段,SCIConnectSegment(&remotesegS);
(6)利用本地數據指針完成本地數據載入;
(7)將數據發送到DMA隊列,SCIEnqueueDMATransfer(dmaqueue,localsegC,remotesegS);
(8)啟動DMA傳輸,SCIPostDMAQueue(dmaqueue);
(9)等待DMA傳輸完畢,SCIWaitForDMAQueue(dmaqueue);
(10)確認DMA傳輸正常完成,SCIDMAQueueState(dmaqueue);
(11)刪除DMA隊列,SCIRemoveDMAQueue(dmaqueue)。從上述過程可見,DMA方式適合較大量數據的傳輸,而不適合少量數據的傳輸,否則不能充分利用DMA方式具有的一次傳送大量數據的優點。
3.3中斷方式
要完成通信雙方的數據傳遞,通信過程中必須進行協調,SCI提供了中斷方式專門用于實現SCI節點間的事件通知。與上述兩種數據方式相同,中斷分為本地中斷(localinterruptt)和遠程中斷(remoteinterruptt)。遠程中斷是Server節點;本地中斷在Client節點的映像。中斷也是面向連接的,使用前必須建立連接;不同的是,中斷方式并不傳送任何數據,它只是作為事先定義好的某種事件(利用中斷標志)的通知手段,使用中斷完成通信協調的過程如圖4所示。
4SCI數據通信軟件的設計
上面我們詳細討論了SCI數據通信的幾種方法,最后結合我們開發的SCI通信延遲測試系統的負載注入軟件,說明SCI數據通信軟件的設計過程。SCI負載注入軟件是根據各個節點的通信表文件,向SCI網絡中注入數據流,設定網絡負載,同時配合網絡端端延遲測試儀測定特點消息的傳輸延遲,從而實現對SCI網絡通信性能細節的把握。通信表指定了數據流源節點、目的節點、長度以及更新速率等參數。
測試系統要求在四個SCI節點之間根據通信表的設定發送和接收數據流,我們的軟件設計采用共享內存的發送方式,利用多線程技術,配合SCI的中斷完成數據的接收。為了降低通信開銷,在程序的開始,首先建立四個節點之間的單向網狀虛擬數據通道(即兩兩節點之間建立內存段與中斷的映射關系),然后利用虛擬數據通道完成消息流的發送和接收,實際測試表明軟件運行正常。軟件發送消息和接收消息的處理流程如圖5所示。
綜上所述,由于SCI目前只提供了同步通信方式的支持,實際應用中,可以利用WindowsNT的多線程技術結合SCI的中斷方式實現異步通信:針對各個節點建立監聽線程,線程中等待相應節點的中斷事件的發生,如果Client節點觸發中斷,則說明對應的消息已經發送到Server節點的本地內存。對于具有多個節點的數據通信軟件,應該事先建立各個節點的虛擬數據通道:在軟件初始化階段,建立本地內存段和遠程內存段、本地中斷和遠程中斷之間的連接關系。