亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于雙網卡的通信方法

文檔序號:7589172閱讀:337來源:國知局
專利名稱:一種基于雙網卡的通信方法
技術領域
本發(fā)明涉及計算機通信的方法,特別是涉及一種基于Myrinet技術的雙網卡通訊的方法。
背景技術
Myrinet是美國Myricom公司設計的一個高性能局域網,由于它具有高帶寬、低延遲以及很低的開銷,所以非常適合機群系統(tǒng)的通信網絡。
Myrinet由網絡接口、網絡鏈路和交換器組成。Myrinet交換器采用Cut-through尋徑策略,多個交換器組合可構成復雜拓撲結構的互聯(lián)網絡。Myrinet網絡接口包括一塊稱為LANai的可編程控制器、兩個DMA引擎和一塊靜態(tài)內存區(qū)域SRAM。其中LANai通過執(zhí)行駐留在其中的網卡控制程序MCP,控制DMA引擎來處理消息收發(fā)以及和主機、網絡的數(shù)據(jù)交換。SRAM用于緩存消息數(shù)據(jù)、存儲網卡控制程序。用戶可以根據(jù)需要靈活設計控制程序以滿足特定需求。
圖1是Myrinet網絡硬件結構和數(shù)據(jù)通信流圖。數(shù)據(jù)在首先通過DMA方式從用戶內存區(qū)域(主存)經PCI總線傳送到網卡內存區(qū)域(SRAM)緩存,此后再由網卡啟動DMA引擎將緩存的數(shù)據(jù)發(fā)送到網絡上,在接收方進行的數(shù)據(jù)傳送過程則相反。
GM(Glenn’s Message)協(xié)議是Myricom公司設計的適用于Myrinet網絡的用戶態(tài)通信協(xié)議,它可以為上層通信系統(tǒng)或用戶應用程序提供高性能、高可靠的通信服務。GM的設計思想就是要實現(xiàn)一種高帶寬、低延遲、主機開銷極少的通信方式。GM的高效率除了采用用戶層通信機制以外,關鍵在于充分配合Myrinet在硬件架構上的特性。GM在Myrinet網卡的LANai芯片上運行MCP,承擔了大部分的通信處理工作,大大減輕了主機的通信開銷??偟膩碚f,GM具有如下特點 在所有體系結構上,每個數(shù)據(jù)包只消耗主機大約1μs的處理時間; 可在不可靠網絡環(huán)境中提供可靠、有序的數(shù)據(jù)傳輸服務;
提供高低兩種通信優(yōu)先級以避免通信死鎖; 支持超過10000個節(jié)點的機群系統(tǒng); 理論上支持的消息長度可達231-1字節(jié),實際上受限于主機DMA內存大??; 自動映射整個Myrinet網絡結構,解決路由問題。
GM由Myrine控制程序MCP、驅動程序DIRVER、GM函數(shù)庫LIBGM三部分構成。這三部分之間的關系可以用圖2來描述。
LIBGM為用戶程序提供編程接口,其中最重要的是發(fā)送和接收函數(shù)。此外,還提供一整套通用函數(shù),如初始化、DMA內存管理、令牌管理、哈希管理、CRC校驗等。
DRIVER是GM中的一個重要部分。其最主要的功能是完成MCP的初始化。其次還要將網絡接口的內存區(qū)域和寄存器映射到用戶層和實現(xiàn)一些輔助函數(shù)。
MCP是GM最關鍵的部分,GM的其他功能都是在MCP的基礎上構架起來的。MCP運行在Myrinet的網卡的LANai芯片上,它由DRIVER加載到LANai上。MCP借助LANai上的CPU和SRAM承擔了大部分的通信處理工作,包括在主機內存和LANaiSRAM之間的數(shù)據(jù)DMA傳送、數(shù)據(jù)包的拆分和組裝、CRC校驗、通信的應答管理、端口和令牌資源的分配、調度管理等。因此,主機方面的通信開銷很小。
為了利用GM的高帶寬和低延遲,Myricom公司設計了基于GM的MPICH,即MPICH-GM。MPICH-GM的最大帶寬是230MB/s左右。

發(fā)明內容
本發(fā)明要解決的技術問題是提出一種基于雙網卡的通訊方法,采用本發(fā)明所述方法,可提高了大消息通信的帶寬,大大降低了大消息通信的延遲。
本發(fā)明所述基于雙網卡的通訊方法,把兩塊Myrinet網卡綁定,虛擬成一塊網卡;在GM目錄中增加兩個文件,即用于實現(xiàn)包裹函數(shù)的my_gm.c和gm_bond.c;還包括如下步驟打開一個數(shù)據(jù)結構,記錄了相應進程所擁有的數(shù)據(jù)資源和所能訪問的內存區(qū)域;在包裹函數(shù)中調用兩次gm_open函數(shù),在兩個網卡上分別打開一個通信端口;
申請內存區(qū)域在包裹函數(shù)中調用兩次存儲注冊函數(shù),在緩沖區(qū)中針對兩個網卡分別注冊;發(fā)送方發(fā)送消息通過包裹函數(shù)調用兩次帶有回執(zhí)的發(fā)送函數(shù)gm_send_with_callback,第一次發(fā)送消息的前一半,第二次發(fā)送消息的后一半;接收方接收消息調用兩次提供接收緩沖區(qū)函數(shù)gm_provide_receive_buffer,分別針對兩個網卡提供兩個接收令牌,第一個接收令牌與接收緩沖區(qū)的前一半相關聯(lián),第二個接收令牌與接收緩沖區(qū)的后一半相關聯(lián);接收到消息的兩個分片,產生兩個接收事件后,確認一個消息接收成功。
發(fā)送/接收方還有不需要用接收令牌的方式即采用帶有回執(zhí)的發(fā)送函數(shù)gm_directed_send_with_callback發(fā)送數(shù)據(jù),將數(shù)據(jù)直接發(fā)往接收方的指定緩沖區(qū)中,在接收方不需要提供接收令牌。這種方式數(shù)據(jù)接收完成后,在接收方也不產生事件。發(fā)送完成后,在發(fā)送方要產生事件,數(shù)據(jù)分片后,發(fā)送一個消息產生兩個事件。
采用本發(fā)明,提高了大消息通信的帶寬,使最大帶寬從單塊網卡的230MB/s提高到330MB/s。大大降低了大消息通信的延遲。


圖1是Myrinet網絡硬件結構和數(shù)據(jù)通信示意圖;圖2是用戶態(tài)通訊協(xié)議GM的結構和調用關系示意圖;圖3是用戶態(tài)通訊協(xié)議GM發(fā)送/接收數(shù)據(jù)的原理示意圖;圖4是本發(fā)明雙網卡通信方法的發(fā)送/接收數(shù)據(jù)示意圖。
具體實施例方式
圖1和圖2已經在前面敘述過,故不贅述。
圖3給出的是用戶態(tài)通訊協(xié)議GM發(fā)送/接收數(shù)據(jù)的原理示意圖;本發(fā)明所述方法是在圖3的原理基礎上,為了提高大消息通信的帶寬,降低大消息通信的延遲,而發(fā)展起來的。圖3的基本原理是這樣的發(fā)送數(shù)據(jù)時,首先打開一個通信端口,然后申請DMA緩沖區(qū),把數(shù)據(jù)從DMA緩沖區(qū)中傳輸?shù)骄W卡緩沖區(qū)中,最后把數(shù)據(jù)從網卡緩沖區(qū)中發(fā)送到網絡上,發(fā)送完成后,產生一個事件交給上層應用,應用通過捕捉這個事件來確定發(fā)送是否成功。
接收數(shù)據(jù)時,首先也要打開一個通信端口,然后申請DMA緩沖區(qū),還需要申請接收令牌。有數(shù)據(jù)到達時,把數(shù)據(jù)從網卡緩沖區(qū)傳輸?shù)较鄳慕邮樟钆扑鶚酥镜挠脩艟彌_區(qū)中,然后產生一個事件來通知應用有新的數(shù)據(jù)到達。
為了提高通信的帶寬,特別是提高大消息的帶寬,本發(fā)明所述方法的基本思路是,將兩塊Myrinet網卡綁定,虛擬成一塊網卡。在發(fā)送數(shù)據(jù)的時候,把每一個消息分成兩片,分別通過兩塊不同的網卡發(fā)送,在接收方則通過不同的網卡接收,這樣不僅提高了通信的帶寬,而且降低了延遲。
盡管MPICH-GM的帶寬已經達到230MB/s,但是隨著應用的需求不斷提高,可能需要更高帶寬的網絡。為了滿足這種需求,可以把兩塊Myrinet網卡綁定起來,虛擬成一塊網卡,同樣,需要把要發(fā)送的消息分成兩片,分別發(fā)送到對方的兩個網卡,這樣就提高了網絡帶寬,也降低了延遲。
具體地說,第一是數(shù)據(jù)分片,在雙網卡通信協(xié)議中,消息的發(fā)送是通過不同的網卡進行的,每一塊網卡發(fā)送不同的消息分片。這樣就需要對消息數(shù)據(jù)進行分片,但是過于細的粒度的數(shù)據(jù)分片,會使每一次傳輸?shù)臄?shù)據(jù)包的長度變小,不利于提高通信的帶寬。目前選定的是否分片的界限為16K,即大于16K的消息分成兩片,小于16K的消息不分片,這個值也可以由用戶自己來指定。
第二個需要解決的問題是數(shù)據(jù)的同步問題。數(shù)據(jù)同步是指消息的不同分片如何保證同步到達消息接收方,并組裝成完整的消息。由于是GM基于事件機制,消息到達或者消息發(fā)送完成都通過事件通知應用。消息分片以后,產生兩個消息到達的事件才意味著接收到一個完整的消息;同樣,發(fā)送方,接收到兩個發(fā)送完成的事件才算是整個消息發(fā)送完成。這需要修改MPI。
第三個問題是如何把接收到的消息放到緩沖區(qū)的特定位置。實際上是在哪個網卡上分配相應的接收令牌的問題。利用MPI的三路握手協(xié)議可以很巧妙的解決這個問題。對于大于16K的消息,MPI使用三路握手的協(xié)議。因為三路握手協(xié)議是在接收方先分配好緩沖區(qū)和接收令牌后,發(fā)送方才開始發(fā)送真正的數(shù)據(jù)。這樣我們就可以在向發(fā)送方返回應答消息時,在消息里面包含標志接收網卡的順序的信息。發(fā)送方根據(jù)這個標志就可以向正確的網卡發(fā)送消息。
本發(fā)明所述基于雙網卡的通信方法,具體地包括兩個方面,一是對GM層的修改,主要是通過包裹函數(shù)實現(xiàn)的;二是對MPI(Massage Passing Interface)層的修改。
對GM層的修改通過包裹函數(shù)實現(xiàn),所以并不直接修改GM原有的文件,只是增加了兩個文件。GM目錄中增加兩個文件my_gm.c和gm_bond.c。
my_gm.c用來實現(xiàn)了包裹函數(shù),gm_bond.c中主要是用來輔助實現(xiàn)包裹函數(shù)的一些輔助的函數(shù)。
GM通信在稱為“端口”的通信端點之間進行,提供可靠有序的消息傳遞。
GM通信過程包括初始化通信端口;申請DMA內存區(qū)域;消息發(fā)送和接收等幾個過程。
進程初始化時,首先打開一個數(shù)據(jù)結構,記錄了相應進程所擁有的數(shù)據(jù)資源和所能訪問的內存區(qū)域。由于是通過兩個網卡通信,所以在包裹函數(shù)中調用兩次gm_open函數(shù),在兩個網卡上分別打開一個通信端口。
GM要求進程收發(fā)消息的緩沖區(qū)必須是一塊可以用來DMA的內存區(qū)域。該區(qū)域可以通過直接申請得到(gm_dma_malloc),或將當前已有的用戶緩沖區(qū)注冊得到(gm_register_memory)。MPICH-GM中,小消息用gm_dma_malloc方式,大消息用gm_register_memory方式。本發(fā)明所述基于雙網卡的通信方法只對大消息起作用,大消息被分成兩片經過兩個網卡來傳送,因此在包裹函數(shù)中調用兩次gm_register_memory函數(shù),在緩沖區(qū)中針對兩個網卡分別注冊。
圖4是本發(fā)明基于雙網卡的通信方法發(fā)送/接收數(shù)據(jù)示意圖。發(fā)送時,針對兩個網卡,需要在包裹函數(shù)里調用兩次帶有回執(zhí)的發(fā)送函數(shù)gm_send_with_callback,第一次發(fā)送消息的前一半,第二次發(fā)送消息的后一半。用gm_send_with_callback發(fā)送數(shù)據(jù),每發(fā)送一次完成后產生一個事件,用來表示該次發(fā)送是否成功,用gm_receive可以接收這個事件,在gm_unknown處調用了callback函數(shù)。對gm_receive要針對兩個網卡輪詢調用。gm_unknown要和gm_receive使用的端口保持一致。
由于GM是基于事件機制,發(fā)送成功一個消息,都會產生一個事件來通知應用。消息分成兩片以后,每個分片發(fā)送成功后都會產生一個事件,相當于發(fā)送原來未分片的消息成功以后,產生了兩個發(fā)送成功的事件。因此需要修改MPICH-GM,使得接收到兩個事件后,才算一個消息發(fā)送成功,才能處理發(fā)送消息成功以后應該做的事情。
本發(fā)明所述方法中,接收數(shù)據(jù)要調用gm_provide_receive_buffer提供接收令牌,接收令牌決定了接收到的數(shù)據(jù)應該放到哪個緩沖區(qū)中。接收數(shù)據(jù)的緩沖區(qū)同樣針對兩個網卡分別進行注冊。修改MPICH-GM,對大消息調用兩次接收緩沖區(qū)函數(shù)gm_provide_receive_buffer,分別針對兩個網卡提供兩個接收令牌,第一個接收令牌與接收緩沖區(qū)的前一半相關聯(lián),第二個接收令牌與接收緩沖區(qū)的后一半相關聯(lián)。這樣也決定了消息的第一個分片必須發(fā)送到第一個接收令牌所對應的網卡,消息的第二個分片必須發(fā)送到第二個接收令牌所對應的網卡。由于MPI發(fā)送大于16K的消息時,使用三路握手協(xié)議。對于大于16K的消息,使用三路握手的協(xié)議。發(fā)送方首先發(fā)送“你準備好了嗎”,對方在收到這個消息后,分配相應的接收緩沖區(qū)和接收令牌,然后應答“準備好了,現(xiàn)在可以發(fā)送了”,最后再發(fā)出所有的數(shù)據(jù)。利用MPI的三路握手協(xié)議可以很巧妙的解決這個問題。因為三路握手協(xié)議是在接收方先分配好緩沖區(qū)和接收令牌后,發(fā)送方才開始發(fā)送真正的數(shù)據(jù)。這樣接收方就可以在向發(fā)送方返回應答消息時,在消息里面包含標志接收網卡的順序的信息。發(fā)送方根據(jù)這個標志就可以向正確的網卡發(fā)送消息。
接收與發(fā)送相似,接收到消息的兩個分片以后,才算是一個消息接收成功,但這產生了兩個接收成功的事件。因此需要修改MPICH-GM,使得接收到兩個事件后,才算一個消息接收成功,才能處理接收消息成功以后應該做的事情。
如果使用gm_directed_send_with_callback函數(shù)發(fā)送數(shù)據(jù),數(shù)據(jù)會直接被發(fā)往接收方的指定緩沖區(qū)中,在接收方不需要提供接收令牌。這種方式數(shù)據(jù)接收完成后,在接收方也不產生事件。發(fā)送完成后,在發(fā)送方要產生事件,數(shù)據(jù)分片后,發(fā)送一個消息產生兩個事件。
在MPICH-GM中,還需要添加一個頭文件,使得調用GM的API時,實際上是調用了包裹函數(shù);頭文件如下所示。
#define gm_openmy_gm_open#define gm_close my_gm_close#define gm_sendmy_gm_send……最后所應說明的是以上實施例僅用以說明而非限制本發(fā)明的技術方案,盡管參照上述實施例對本發(fā)明進行了詳細說明,本領域的普通技術人員應當理解依然可以對本發(fā)明進行修改或者等同替換,而不脫離本發(fā)明的精神和范圍的任何修改或局部替換,其均應涵蓋在本發(fā)明的權利要求范圍當中。
權利要求
1.一種基于雙網卡的通訊方法,其特征在于,包括如下步驟把兩塊Myrinet網卡綁定,虛擬成一塊網卡;在GM目錄中增加兩個文件,即用于實現(xiàn)包裹函數(shù)的my_gm.c和gm_bond.c;在兩個網卡上分別打開一個通信端口;申請內存區(qū)域;發(fā)送方發(fā)送消息,第一次發(fā)送消息的前一分片,第二次發(fā)送消息的后一分片;接收方接收到消息的兩個分片,產生兩個接收事件后,確認一個消息接收成功。
2.根據(jù)權利要求1所述的基于雙網卡的通訊方法,其特征在于,所述在兩個網卡上分別打開一個通信端口,是通過打開一個數(shù)據(jù)結構,記錄相應進程所擁有的數(shù)據(jù)資源和所能訪問的內存區(qū)域;在包裹函數(shù)中調用兩次打開函數(shù)來實現(xiàn)。
3.根據(jù)權利要求1所述的基于雙網卡的通訊方法,其特征在于,所述申請內存區(qū)域,包括在包裹函數(shù)中調用兩次存儲注冊函數(shù),在緩沖區(qū)中針對兩個網卡分別注冊。
4.根據(jù)權利要求1、2或3所述的基于雙網卡的通訊方法,其特征在于,所述發(fā)送方通過包裹函數(shù)調用兩次帶有回執(zhí)的發(fā)送函數(shù)發(fā)送消息。
5.根據(jù)權利要求4所述的基于雙網卡的通訊方法,其特征在于,調用兩次提供接收緩沖區(qū)的函數(shù),分別針對兩個網卡提供兩個接收令牌,第一個接收令牌與接收緩沖區(qū)的前一分片相關聯(lián),第二個接收令牌與接收緩沖區(qū)的后一分片相關聯(lián)。
6.一種基于雙網卡的通訊方法,其特征在于,包括如下步驟把兩塊Myrinet網卡綁定,虛擬成一塊網卡;在GM目錄中增加兩個文件,即用于實現(xiàn)包裹函數(shù)的my_gm.c和gm_bond.c;在兩個網卡上分別打開一個通信端口;申請直接存儲內存區(qū)域;發(fā)送方將數(shù)據(jù)分成兩片后直接發(fā)往接收方的指定緩沖區(qū)中。
7.根據(jù)權利要求6所述的基于雙網卡的通訊方法,其特征在于,還包括一個消息發(fā)送完成后,在發(fā)送方產生兩個事件。
8.根據(jù)權利要求6或7所述的基于雙網卡的通訊方法,其特征在于,是采用直接發(fā)送帶有回執(zhí)的函數(shù)將數(shù)據(jù)直接發(fā)往接收方的指定緩沖區(qū)中的。
9.根據(jù)權利要求8所述的基于雙網卡的通訊方法,其特征在于,所述在兩個網卡上分別打開一個通信端口,是通過打開一個數(shù)據(jù)結構,記錄相應進程所擁有的數(shù)據(jù)資源和所能訪問的內存區(qū)域;在包裹函數(shù)中調用兩次打開函數(shù)來實現(xiàn)。
10.根據(jù)權利要求6、7或9所述的基于雙網卡的通訊方法,其特征在于,所述申請內存區(qū)域,包括在包裹函數(shù)中調用兩次存儲注冊函數(shù),在緩沖區(qū)中針對兩個網卡分別注冊。
全文摘要
本發(fā)明公開了一種基于雙網卡的通訊方法,包括把兩塊網卡綁定,虛擬成一塊網卡;在GM目錄中增加用于實現(xiàn)包裹函數(shù)的兩個文件;在兩個網卡上分別打開一個通信端口;申請內存區(qū)域,在包裹函數(shù)中調用兩次存儲注冊函數(shù),在緩沖區(qū)中針對兩個網卡分別注冊;發(fā)送方發(fā)送消息,第一次發(fā)送消息的前一分片,第二次發(fā)送消息的后一分片;接收方接收到消息的兩個分片,產生兩個接收事件后,確認一個消息接收成功;還可以采用另一種發(fā)送機制,即發(fā)送方將數(shù)據(jù)分成兩片后直接發(fā)往接收方的指定緩沖區(qū)中。采用本發(fā)明,提高了大消息通信的帶寬,使最大帶寬從單塊網卡的230MB/s提高到330MB/s,大大降低了大消息通信的延遲。
文檔編號H04L12/24GK1567858SQ03137369
公開日2005年1月19日 申請日期2003年6月19日 優(yōu)先權日2003年6月19日
發(fā)明者王加森 申請人:聯(lián)想(北京)有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1