專利名稱:一種高效的面向長消息的計算機網(wǎng)絡通信方法
技術領域:
本發(fā)明涉及一種通信方法,尤其涉及一種高效的面向長消息的計算機網(wǎng)絡通信方法。
背景技術:
為了解決高速網(wǎng)絡傳輸大數(shù)據(jù)過程中需要很多次拷貝數(shù)據(jù)到通信緩沖區(qū)的問題, 目前多數(shù)系統(tǒng)采用用戶態(tài)通信機制與“零拷貝”技術。也就是在數(shù)據(jù)傳輸時把用戶態(tài)的虛擬地址轉(zhuǎn)變?yōu)閷奈锢淼刂罚⑶野阉i定,然后把物理地址傳遞給網(wǎng)卡,以便進行DMA (Direct Memory Access,直接內(nèi)存訪問)方式的數(shù)據(jù)傳輸。上述這種方式實現(xiàn)了通信過程中數(shù)據(jù)的零拷貝,去除了數(shù)據(jù)在內(nèi)存的拷貝時間。 但是,在系統(tǒng)負載很高的情況下(比如CPU與內(nèi)存利用率均達到90%以上),通信效率大約為72% 80%之間,達不到輕載時的數(shù)值(實驗測試表明,在兩個計算節(jié)點沒有運行大型任務的情況下,節(jié)點間帶寬效率最高可以達到90%以上,這實際上是在系統(tǒng)負載很低的情況下獲得的),該數(shù)值與系統(tǒng)的負載特別是內(nèi)存的利用率很有關系。通過進一步的仔細分析,我們發(fā)現(xiàn)在內(nèi)存利用率很高的情況下,如果發(fā)送的消息較長,則采用用戶態(tài)通信機制或 “零拷貝”技術通信時,需要多次啟動DMA,占用的時間很多。其原因在于當系統(tǒng)內(nèi)存利用率很高時,整個物理內(nèi)存的大塊連續(xù)物理內(nèi)存空間就非常少,多數(shù)是一些零散的頁面,這時如果應用程序發(fā)送的消息較長,則該消息在物理內(nèi)存的真實位置非常分散,也就是該消息所在的物理內(nèi)存頁面是不連續(xù)的,因此當網(wǎng)卡采用DMA方式發(fā)送該消息時,必然需要多次啟動DMA從內(nèi)存讀取數(shù)據(jù),這在發(fā)送方是很耗費時間的;同樣的道理,當系統(tǒng)內(nèi)存利用率很高并且接收的消息比較大時,接收方應用程序也只能提供給網(wǎng)卡絕大多數(shù)零散的物理內(nèi)存頁面,因此接受方的網(wǎng)卡也必然需要多次啟動DMA把數(shù)據(jù)寫入內(nèi)存,這在接收方也是很耗費時間的。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供了一種高效的面向長消息的計算機網(wǎng)絡通信方法,是為了解決長消息在傳輸過程中需要多次啟動DMA的難題,具體地說在操作系統(tǒng)啟動時預留一部分物理內(nèi)存區(qū);通信時,可由應用程序和網(wǎng)卡共享該物理內(nèi)存區(qū)。為了減小數(shù)據(jù)拷貝帶來的影響,應用程序與網(wǎng)卡對共享內(nèi)存區(qū)的操作采用了流水并行的技術,也就是讓應用程序數(shù)據(jù)拷貝的大部分時間與網(wǎng)卡DMA的時間重疊,因此整個長消息通信過程中,真正耗費在數(shù)據(jù)拷貝操作上的時間并不多,比“零拷貝”通信機制多次啟動DMA的開銷要小得多。本發(fā)明是這樣來實現(xiàn)的,一種高效的面向長消息的計算機網(wǎng)絡通信方法,其特征在于當不同計算機間的進程需要進行長消息傳遞時,進行如下步驟的操作
①為了預留物理內(nèi)存,在Linux操作系統(tǒng)啟動的配置文件中指定系統(tǒng)啟動時初始化物理內(nèi)存的數(shù)量,這樣在系統(tǒng)重啟后就可以預留部分物理內(nèi)存;
②發(fā)送方進程從預留的空閑物理內(nèi)存申請共享通信緩沖區(qū);③通信軟件從預留的物理內(nèi)存為發(fā)送方進程分配所需共享通信緩沖區(qū),并把分配的該段內(nèi)存映射到用戶空間,這樣發(fā)送方進程就可以獲得該內(nèi)存的虛擬地址并且訪問該共享通信緩沖區(qū),同時把網(wǎng)絡接口映射到用戶空間,使發(fā)送方進程能夠直接訪問網(wǎng)絡接口 ;
發(fā)送方進程把待發(fā)數(shù)據(jù)拷貝到 共享通信緩沖區(qū),在部分數(shù)據(jù)拷貝到共享通信緩沖
區(qū)后,啟動發(fā)送操作,這里我們采用了流水并行的技術,使待發(fā)數(shù)據(jù)到共享通信緩沖區(qū)的拷貝操作,與共享通信緩沖區(qū)數(shù)據(jù)到網(wǎng)卡發(fā)送緩沖區(qū)的寫入操作同時進行,這樣可以把用戶態(tài)數(shù)據(jù)拷貝的部分時間隱藏在網(wǎng)卡DMA把數(shù)據(jù)寫入網(wǎng)卡發(fā)送緩沖區(qū)的時間之中,由于物理內(nèi)存速度快于PCI速度,這樣不會出現(xiàn)速度不匹配的現(xiàn)象;
發(fā)送方網(wǎng)卡通過DMA把發(fā)送方共享通信緩沖區(qū)的數(shù)據(jù)寫入到網(wǎng)卡發(fā)送緩沖區(qū);
@接收方網(wǎng)卡通過DMA把網(wǎng)卡接收緩沖區(qū)的數(shù)據(jù)寫入接受方共享通信緩沖區(qū),在部分
數(shù)據(jù)寫入共享通信緩沖區(qū)后,向上層發(fā)送數(shù)據(jù)已接收到的信號,請求通信軟件處理;
(2)通信軟件對網(wǎng)卡發(fā)送的“數(shù)據(jù)已接收到的信號”作相應處理,然后向上層的接收方
進程發(fā)送數(shù)據(jù)已接收到的信號,請求接收方進程處理;
@接收方進程拷貝共享通信緩沖區(qū)中的數(shù)據(jù)到目的地址,類似于發(fā)送方,這里接收方
也采用了流水并行的技術,使共享通信緩沖區(qū)到目的地址的拷貝操作,與網(wǎng)卡接收緩沖區(qū)到共享通信緩沖區(qū)數(shù)據(jù)的寫入操作同時進行,這樣在接收方也可以把用戶態(tài)數(shù)據(jù)拷貝的部分時間隱藏在網(wǎng)卡通過DMA把數(shù)據(jù)寫入共享通信緩沖區(qū)的時間之中。在接收方,由于內(nèi)存速度快于PCI速度,因此需要仔細設計,計算好共享通信緩沖區(qū)到目的地址的拷貝時間與網(wǎng)卡通過DMA把數(shù)據(jù)寫入共享通信緩沖區(qū)的時間,以防止在并行操作過程中出現(xiàn)錯誤。本發(fā)明提出了一種物理內(nèi)存預留共享的通信方法,能夠提供通信過程中所需的大塊連續(xù)物理內(nèi)存,使分散在物理內(nèi)存中的長消息拷貝入連續(xù)的預留物理內(nèi)存空間,從而啟動一次或者少數(shù)幾次DMA,即可將長消息全部送入網(wǎng)卡,從而減少了網(wǎng)卡多次啟動DMA的開銷,顯著加快了長消息的通信速率。為了減小內(nèi)存拷貝的開銷,又采用用戶態(tài)內(nèi)存拷貝與網(wǎng)卡DMA流水并行的方法,用以減少內(nèi)存拷貝的代價。本發(fā)明的技術效果是該方法為了提高面向長消息的計算機網(wǎng)絡通信性能,提出了一種物理內(nèi)存預留共享的通信方法,在Linux操作系統(tǒng)啟動的配置文件中指定系統(tǒng)啟動時初始化物理內(nèi)存的數(shù)量,這樣在系統(tǒng)重啟后就可以保留小部分物理內(nèi)存,從而能夠提供通信過程中所需的大塊連續(xù)物理內(nèi)存,使分散在物理內(nèi)存中的長消息拷貝入連續(xù)的預留物理內(nèi)存空間,從而啟動一次或者少數(shù)幾次DMA,即可將長消息全部送入網(wǎng)卡。用內(nèi)存拷貝的代價,減少了網(wǎng)卡多次啟動DMA的開銷,顯著加快了長消息的通信速率;又采用用戶態(tài)內(nèi)存拷貝與網(wǎng)卡DMA流水并行的方法,減少內(nèi)存拷貝的代價。
圖1為本發(fā)明的面向長消息的計算機網(wǎng)絡通信方法的數(shù)據(jù)傳輸過程。
具體實施例方式
本發(fā)明是這樣實現(xiàn)的,圖1說明了在長消息通信過程中,從發(fā)送方到接收方的傳輸過程(雙方事先必須建立連接),主要包括以下幾個步驟
1)發(fā)送方進程從預留的空閑物理內(nèi)存申請共享通信緩沖區(qū);
2)通信軟件從預留的物理內(nèi)存分配所需內(nèi)存,并把分配的該段內(nèi)存映射到用戶空間, 這樣發(fā)送方進程就可以獲得該內(nèi)存的虛擬地址并且訪問該共享通信緩沖區(qū)。同時把網(wǎng)絡接口映射到用戶空間,使發(fā)送方進程能夠直接訪問網(wǎng)絡接口;
3)發(fā)送方進程把待發(fā)數(shù)據(jù)拷貝到共享通信緩沖區(qū),在部分數(shù)據(jù)拷貝到共享通信緩沖區(qū)后,啟動發(fā)送操作。這里我們采用了流水并行的技術,使待發(fā)數(shù)據(jù)到共享通信緩沖區(qū)的拷貝操作與共享通信緩沖區(qū)數(shù)據(jù)到網(wǎng)卡發(fā)送緩沖區(qū)的寫入操作部分并行進行,這樣可以把用戶態(tài)數(shù)據(jù)拷貝的部分時間隱藏在網(wǎng)卡DMA把數(shù)據(jù)寫入網(wǎng)卡發(fā)送緩沖區(qū)的時間之中。由于物理內(nèi)存速度快于PCI速度(在我們測試的系統(tǒng)上,DDR266的內(nèi)存理論帶寬為2100MB/s,而32 位33Mhz的PCI理論帶寬為133MB/S),這樣不會出現(xiàn)速度不匹配的現(xiàn)象。4)發(fā)送方網(wǎng)卡通過DMA把發(fā)送方共享通信緩沖區(qū)的數(shù)據(jù)寫入網(wǎng)卡發(fā)送緩沖區(qū);
5)接收方網(wǎng)卡通過DMA把網(wǎng)卡接收緩沖區(qū)的數(shù)據(jù)寫入接受方共享通信緩沖區(qū);
6)接收方網(wǎng)卡在部分數(shù)據(jù)寫入共享通信緩沖區(qū)后,向上層發(fā)送數(shù)據(jù)已接收到的信號, 請求通信軟件處理;
7)通信軟件對網(wǎng)卡發(fā)送的數(shù)據(jù)已接收到的信號作相應處理,然后向接收方進程發(fā)送數(shù)據(jù)已接收到的信號,請求接收方進程處理;
接收方進程拷貝共享通信緩沖區(qū)中的數(shù)據(jù)到目的地址。這里接收方也采用了流水并行的技術,使共享通信緩沖區(qū)到目的地址的拷貝操作與網(wǎng)卡接收緩沖區(qū)到共享通信緩沖區(qū)數(shù)據(jù)的寫入操作部分并行進行,這樣在接收方也可以把用戶態(tài)數(shù)據(jù)拷貝的部分時間隱藏在網(wǎng)卡通過DMA把數(shù)據(jù)寫入共享通信緩沖區(qū)的時間之中。在接收方,由于內(nèi)存速度快于PCI速度,因此需要仔細設計,計算好共享通信緩沖區(qū)到接收方目的地址的拷貝時間與網(wǎng)卡通過 DMA把數(shù)據(jù)寫入共享通信緩沖區(qū)的時間,以防止在并行操作過程中出現(xiàn)錯誤。
權利要求
1.一種高效的面向長消息計算機網(wǎng)絡通信方法,其特征在于當不同計算機間的進程需要進行長消息傳遞時,進行如下步驟的操作①為了預留物理內(nèi)存,在Linux操作系統(tǒng)啟動的配置文件中指定系統(tǒng)啟動時初始化物理內(nèi)存的數(shù)量,這樣在系統(tǒng)重啟后就可以預留部分物理內(nèi)存;②發(fā)送方進程從預留的空閑物理內(nèi)存申請共享通信緩沖區(qū);③通信軟件從預留的物理內(nèi)存為發(fā)送方進程分配所需共享通信緩沖區(qū),并把分配的該段內(nèi)存映射到用戶空間,這樣發(fā)送方進程就可以獲得該內(nèi)存的虛擬地址并且訪問該共享通信緩沖區(qū),同時把網(wǎng)絡接口映射到用戶空間,使發(fā)送方進程能夠直接訪問網(wǎng)絡接口 ;④發(fā)送方進程把待發(fā)數(shù)據(jù)拷貝到共享通信緩沖區(qū),在部分數(shù)據(jù)拷貝到共享通信緩沖區(qū)后,啟動發(fā)送操作,這里我們采用了流水并行的技術,使待發(fā)數(shù)據(jù)到共享通信緩沖區(qū)的拷貝操作,與共享通信緩沖區(qū)數(shù)據(jù)到網(wǎng)卡發(fā)送緩沖區(qū)的寫入操作同時進行,這樣可以把用戶態(tài)數(shù)據(jù)拷貝的部分時間隱藏在網(wǎng)卡DMA把數(shù)據(jù)寫入網(wǎng)卡發(fā)送緩沖區(qū)的時間之中,由于物理內(nèi)存速度快于PCI速度,這樣不會出現(xiàn)速度不匹配的現(xiàn)象;⑤發(fā)送方網(wǎng)卡通過DMA把發(fā)送方共享通信緩沖區(qū)的數(shù)據(jù)寫入到網(wǎng)卡發(fā)送緩沖區(qū);⑥接收方網(wǎng)卡通過DMA把網(wǎng)卡接收緩沖區(qū)的數(shù)據(jù)寫入接受方共享通信緩沖區(qū),在部分數(shù)據(jù)寫入共享通信緩沖區(qū)后,向上層發(fā)送數(shù)據(jù)已接收到的信號,請求通信軟件處理;⑦通信軟件對網(wǎng)卡發(fā)送的“數(shù)據(jù)已接收到的信號”作相應處理,然后向上層的接收方進程發(fā)送數(shù)據(jù)已接收到的信號,請求接收方進程處理;③接收方進程拷貝共享通信緩沖區(qū)中的數(shù)據(jù)到目的地址,類似于發(fā)送方,這里接收方也采用了流水并行的技術,使共享通信緩沖區(qū)到目的地址的拷貝操作,與網(wǎng)卡接收緩沖區(qū)到共享通信緩沖區(qū)數(shù)據(jù)的寫入操作同時進行,這樣在接收方也可以把用戶態(tài)數(shù)據(jù)拷貝的部分時間隱藏在網(wǎng)卡通過DMA把數(shù)據(jù)寫入共享通信緩沖區(qū)的時間之中。
2.在接收方,由于內(nèi)存速度快于PCI速度,因此需要仔細設計,計算好共享通信緩沖區(qū)到目的地址的拷貝時間與網(wǎng)卡通過DMA把數(shù)據(jù)寫入共享通信緩沖區(qū)的時間,以防止在并行操作過程中出現(xiàn)錯誤。
全文摘要
一種高效的面向長消息計算機網(wǎng)絡通信方法,當不同計算機間的進程需要進行長消息傳遞時,進行如下步驟的操作①預留小部分物理內(nèi)存作為共享通信緩沖區(qū);②發(fā)送方進程從預留的空閑物理內(nèi)存申請共享通信緩沖區(qū);③把網(wǎng)絡接口映射到用戶空間,使發(fā)送方進程能夠直接訪問網(wǎng)絡接口;④發(fā)送方進程把待發(fā)數(shù)據(jù)拷貝到共享通信緩沖區(qū);⑤在發(fā)送方進程把部分待發(fā)數(shù)據(jù)拷貝到共享通信緩沖區(qū)后,發(fā)送方網(wǎng)卡通過DMA把發(fā)送方共享通信緩沖區(qū)的數(shù)據(jù)寫入到網(wǎng)卡發(fā)送緩沖區(qū);⑥接收方網(wǎng)卡在部分數(shù)據(jù)寫入共享通信緩沖區(qū)后,請求通信軟件處理;⑦通信軟件向上層的接收方進程發(fā)送數(shù)據(jù)已接收到的信號,請求接收方進程處理;⑧接收方進程拷貝共享通信緩沖區(qū)中的數(shù)據(jù)到目的地址。本發(fā)明的技術效果是減少了網(wǎng)卡多次啟動DMA的開銷,顯著加快了長消息的通信速率;又采用用戶態(tài)內(nèi)存拷貝與網(wǎng)卡DMA流水并行的方法,減少內(nèi)存拷貝的代價。
文檔編號G06F13/28GK102291298SQ20111022406
公開日2011年12月21日 申請日期2011年8月5日 優(yōu)先權日2011年8月5日
發(fā)明者馮萍, 冷明, 劉君瑞, 康繼昌, 徐烽濤, 曾國蓀, 曾小薈, 羅文浪 申請人:曾小薈