欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種實時環(huán)境下的零拷貝通信方法

文檔序號:7612723閱讀:199來源:國知局
專利名稱:一種實時環(huán)境下的零拷貝通信方法
技術(shù)領(lǐng)域
本方法屬于計算機應(yīng)用領(lǐng)域的網(wǎng)絡(luò)通信技術(shù),具體涉及一種實時環(huán)境下的零拷貝通信方法。
背景技術(shù)
隨著集群系統(tǒng)的出現(xiàn),計算機系統(tǒng)能夠提供的處理能力大大加強,可以滿足許多新的應(yīng)用需求,但相對較高的通信延遲限制了集群環(huán)境下應(yīng)用的發(fā)展。在用于科學(xué)計算的集群系統(tǒng)中,節(jié)點之間的通信效率對并行計算的整體性能具有關(guān)鍵的影響。在不提高節(jié)點間通信性能的情況下,單處理器節(jié)點CPU的性能提高32倍,系統(tǒng)整體性能的提高不到10倍。特別是對于那些運算量不是很大的程序而言,網(wǎng)絡(luò)通信時間在程序運行的總時間中占了相當大的比例。因此,如何降低通信所消耗的時間是網(wǎng)格集群發(fā)展的重要組成部分。
網(wǎng)絡(luò)通信處理時間主要產(chǎn)生在系統(tǒng)、網(wǎng)絡(luò)接口等各個層次的數(shù)據(jù)拷貝及數(shù)據(jù)傳輸上。減少數(shù)據(jù)拷貝和共享總線操作的次數(shù),消除通信數(shù)據(jù)在存儲器之間不必要的中間拷貝過程,可以有效地提高通信效率,這就是所謂的零拷貝技術(shù)。零拷貝技術(shù)是減小通信延遲的重要技術(shù)之一。
現(xiàn)有的零拷貝實現(xiàn)方法主要有如下三種。
第一種方式在發(fā)送端拷貝一次,接收端也拷貝一次。這是零拷貝最初的幾種實現(xiàn)方式之一。不具有直接內(nèi)存存取(DMA)功能或其它直接控制內(nèi)存能力的網(wǎng)卡都是采用這種零拷貝方式。在發(fā)送端,將用戶即將發(fā)送的數(shù)據(jù)通過重映射方式映射到內(nèi)核的數(shù)據(jù)空間,網(wǎng)卡再將這些數(shù)據(jù)拷貝到網(wǎng)卡緩沖區(qū),然后從緩沖區(qū)將數(shù)據(jù)發(fā)送出去。接收端先將數(shù)據(jù)接收到網(wǎng)卡緩沖區(qū),然后直接對網(wǎng)卡緩沖區(qū)的數(shù)據(jù)進行處理,找到其對應(yīng)的用戶程序,然后將數(shù)據(jù)拷貝過去。其優(yōu)點是對硬件設(shè)備要求很低,并行傳輸時可以進行流水線操作,實現(xiàn)簡單。其缺點是通信中時間延遲仍然較長,不能滿足實時通信系統(tǒng)的要求。
另一種比較簡單實用的零拷貝方式是發(fā)送端不拷貝,接收端拷貝一次。這種方案也被稱為單拷貝方案。本方案要求網(wǎng)卡具有DMA功能。發(fā)送過程基本類似上述方案,不過網(wǎng)卡直接將內(nèi)核區(qū)的數(shù)據(jù)空間作為發(fā)送緩沖。接收端則將數(shù)據(jù)接收到主存中的DMA緩沖后通過映射機制將數(shù)據(jù)交給用戶,用戶按照需要將數(shù)據(jù)拷貝到相應(yīng)位置。這種方案的優(yōu)點是并行傳輸時可以進行流水線操作,實現(xiàn)比較簡單,通信效率優(yōu)于上述的單拷貝方案。其缺點是還是在接收端進行了一次拷貝,在傳送大數(shù)據(jù)包的時候?qū)νㄐ叛舆t有著明顯的影響。
還有一種主要零拷貝通信方式是遠程存儲訪問(RMA)(RemoteMemory Access)方式。它適合于大數(shù)據(jù)包發(fā)送,其主要實現(xiàn)方式為遠端直接內(nèi)存存取(RDMA)(Remote Direct Memory Access)和直接數(shù)據(jù)放置DDP(Direct Data Placement)方式。這種方案減少了接收端的一次拷貝,而且對于數(shù)據(jù)包的大小沒有要求,但是由于每次數(shù)據(jù)傳送之前硬件都要進行一次信息交互,需要消耗一定的時間,增加了通信延遲,所以采用這種方案需要數(shù)據(jù)包拷貝所消耗的時間長于數(shù)據(jù)飛行的時間時才對系統(tǒng)效率有促進作用,不適合用于小數(shù)據(jù)包的發(fā)送。有些協(xié)議通過將小數(shù)據(jù)包拼接為大數(shù)據(jù)包再發(fā)送的方式來避免RMA方式的不利之處,發(fā)揮其長處,但是在實時通信中采用這種方案會延長通信響應(yīng)時間,違反實時性要求。

發(fā)明內(nèi)容
本方法的目的在于提供一種實時環(huán)境下的零拷貝通信方法,該方法在實時環(huán)境下具有相對較短的時間延遲。
本方法提供的一種實時環(huán)境下的零拷貝通信方法,其步驟為(1)發(fā)送端對待發(fā)送數(shù)據(jù)進行寫保護;(2)發(fā)送端將靜態(tài)系統(tǒng)緩沖作為用戶發(fā)送緩沖;(3)發(fā)送端判斷上述待發(fā)送數(shù)據(jù)的長度Ldata是否大于k,其中k為單片包內(nèi)數(shù)據(jù)的最大長度,如果大于k,進入步驟(4),否則進入步驟(5);(4)發(fā)送端和接收端采用握手應(yīng)答方式發(fā)送和接收需要分片的待發(fā)送數(shù)據(jù),處理完畢后通信結(jié)束;(5)發(fā)送端和接收端采用直接映射方式發(fā)送和接收數(shù)據(jù),處理完畢后通信結(jié)束。
本方法針對目前尚不存在實時環(huán)境下專用的零拷貝通信協(xié)議的情況,利用網(wǎng)卡的DMA功能實現(xiàn)通信時間性能優(yōu)秀的零拷貝通信方式。本方法的主要思想是在保證實時性的基礎(chǔ)上,對不同情況的數(shù)據(jù)包采用通信延遲最小的方案進行傳遞。與現(xiàn)有的零拷貝方案相比,本方法主要有如下特點(1)實時性。本方案能夠同時處理實時數(shù)據(jù)包和非實時數(shù)據(jù)包,在兩種數(shù)據(jù)包同時到達時可以保證實時數(shù)據(jù)包優(yōu)先完成,保證實時通信效率和只接收實時數(shù)據(jù)包時基本一致。
(2)較短的通信延遲?,F(xiàn)有的零拷貝方案主要有RMA方式和單拷貝方案。RMA方案在通信之間要進行一次消息交互,使收發(fā)雙方了解對方與通信有關(guān)的信息。單拷貝方案中發(fā)送端數(shù)據(jù)包都按照映射方式以零拷貝方式發(fā)送出去,在接收端則采用通用的數(shù)據(jù)報協(xié)議(UDP)協(xié)議處理,還是進行了一次拷貝。綜合說來,本方法與這兩種方式相比在實時環(huán)境下具有更短的通信延遲。在處理不分片包的時候,本方法比起單拷貝方式節(jié)約了接收端的一次拷貝,比起RMA方式則少了消息的一次交互。在處理分片包的情況下,本方法效率基本與RMA方式一致,比起單拷貝方式節(jié)省了接收端的一次拷貝,但是多了一次信息的交互。測試表明,在一般實時通信系統(tǒng)中,分片包一次拷貝的時間大于一次信息交互的時間。所以在處理分片包的時候,本方法在處理分片包的時候在最佳情況下與RMA方式效率一致,好于單拷貝方案??紤]到各種大小的數(shù)據(jù)包在通信中所占的比例,本方法的綜合時間延遲在一般情況下比其它協(xié)議要小。
(3)硬件要求較低比起其他的零拷貝通信協(xié)議,本方案對于硬件的基本要求較低——只對網(wǎng)卡的DMA功能有要求。如果硬件能夠達到RDMA方式的要求,則能夠進一步降低通信延遲,降低CPU占用率,但這不是硬性要求。


圖1為本方法流程示意圖;圖2為圖1中握手應(yīng)答方式的一種具體實施方式
的流程示意圖;圖3為圖1中直接映射方式的一種具體實施方式
的流程示意圖;圖4為本發(fā)明優(yōu)化方案的流程示意圖;圖5為圖4中0/1拷貝方式的流程示意圖。
具體實施例方式
本方法的硬件環(huán)境要求網(wǎng)卡具有DMA功能,軟件環(huán)境為Linux環(huán)境下的UDP/IP(數(shù)據(jù)報協(xié)議/網(wǎng)際協(xié)議)方式通信。本方法的原理介紹如下設(shè)單片包內(nèi)數(shù)據(jù)的最大長度為k,則分片包的第一片中數(shù)據(jù)的最大長度為k,其它片中數(shù)據(jù)的最大長度為k+8;設(shè)總的待發(fā)送數(shù)據(jù)包的長度為Ldata,尚未發(fā)送的數(shù)據(jù)長度為Lleft,指針p指向通信套接口(socket接口)對應(yīng)的內(nèi)核緩沖開始地址。
下面結(jié)合附圖和實例對本發(fā)明作進一步詳細的說明。如圖1所示,本發(fā)明方法的步驟如下(1)發(fā)送端對要發(fā)送的數(shù)據(jù)進行寫保護,使其它程序不能對這段數(shù)據(jù)進行讀以外的操作;(2)發(fā)送端通過系統(tǒng)調(diào)用申請一個socket接口,并從系統(tǒng)的全局緩沖池分配一個合適大小的內(nèi)核緩存塊給該接口,同時為該接口初始化一個具有一定數(shù)目網(wǎng)絡(luò)緩沖的實時網(wǎng)絡(luò)緩沖池,定義為rtskb_pool,網(wǎng)絡(luò)緩沖塊定義為rtskb。這樣,數(shù)據(jù)發(fā)送過程中需要的網(wǎng)絡(luò)緩沖資源就直接從rtskb_pool取用而不需要動態(tài)申請,同時該網(wǎng)絡(luò)緩沖相關(guān)的內(nèi)核緩沖空間也不需要動態(tài)申請,而是直接指向該實時socket接口的內(nèi)核緩存塊中合適的位置;(3)發(fā)送端判斷上述待發(fā)送數(shù)據(jù)Ldata是否大于k,如果大于k,則需要分片發(fā)送。如果需要分片,進入步驟(4),否則進入步驟(5);(4)發(fā)送端和接收端采用握手應(yīng)答方式對需要分片的待發(fā)送數(shù)據(jù)進行收發(fā)處理,圖2列舉了一種實現(xiàn)方式,其步驟具體如下(4.1)發(fā)送端從rtskb_pool中申請一個空白網(wǎng)絡(luò)緩沖塊rtskb,在發(fā)送過程中用來存放相關(guān)數(shù)據(jù)結(jié)構(gòu)。將硬件頭部、IP頭部、UDP頭部依次裝入指針p開始的內(nèi)核緩沖區(qū)內(nèi),形成待發(fā)送總數(shù)據(jù)包,令Lleft=Ldata;(4.2)發(fā)送端將要發(fā)送的數(shù)據(jù)對應(yīng)的用戶程序、每個分片包的大小和分片包個數(shù)這些信息放到一起,組成一個小數(shù)據(jù)包,將該數(shù)據(jù)包稱為“消息”,將消息發(fā)送給接收端;(4.3)接收端收到消息后,讀取其中的數(shù)據(jù),根據(jù)數(shù)據(jù)得知發(fā)送端要發(fā)送數(shù)據(jù)的對應(yīng)用戶程序;(4.4)接收端找到對應(yīng)的用戶程序后,將要接收數(shù)據(jù)對應(yīng)的內(nèi)存空間作為網(wǎng)卡的DMA接收緩沖,然后向發(fā)送端發(fā)送一個數(shù)據(jù)包,稱為“可以發(fā)送”的消息,在接收完這段數(shù)據(jù)前不向其它發(fā)送端發(fā)送“可以發(fā)送”消息;(4.5)發(fā)送端收到“可以發(fā)送”的消息后通過DMA方式將從p開始的k+36個字節(jié)作為網(wǎng)卡的DMA緩沖,然后網(wǎng)卡通過DMA方式將這段數(shù)據(jù)發(fā)送出去。發(fā)送成功后,令Lleft=Lleft-k,同時p向后移動k個字節(jié);(4.6)接收端用DMA方式接收數(shù)據(jù),即將數(shù)據(jù)用DMA方式放到內(nèi)存中的DMA緩沖后,也就是放入對應(yīng)的用戶程序的內(nèi)存空間后,接收端的DMA緩沖向后移動k字節(jié);(4.7)發(fā)送端再從rtskb_pool中申請一個空白rtskb塊,發(fā)送端分別將硬件頭部和IP頭部依次裝入指針p開始的內(nèi)核緩沖區(qū)內(nèi);(4.8)發(fā)送端將從p開始的k+36個字節(jié)作為網(wǎng)卡的DMA緩沖,然后網(wǎng)卡通過DMA方式將這段數(shù)據(jù)發(fā)送出去。發(fā)送成功后,令Lleft=Lleft-k-8,同時p向后移動k+8個字節(jié)。接收端用DMA方式接收數(shù)據(jù),接收端的DMA緩沖向后移動k+8字節(jié);(4.9)如果Lleft>k+8,轉(zhuǎn)步驟(4.7),否則進入步驟(4.10);(4.10)發(fā)送端將從p開始的Lleft+36個字節(jié)作為網(wǎng)卡的DMA緩沖,然后網(wǎng)卡通過DMA方式將這段數(shù)據(jù)發(fā)送出去。發(fā)送完畢后,修改用戶發(fā)送緩沖標記,使待發(fā)送數(shù)據(jù)可以被改寫或刪除,使對應(yīng)的網(wǎng)卡緩沖可以被重新使用;
(4.11)接收端用DMA方式接收數(shù)據(jù)包完畢,通過callback方式通知用戶數(shù)據(jù)可以使用,同時網(wǎng)卡可以向其它發(fā)送端發(fā)送“可以發(fā)送”的消息;其中如果網(wǎng)卡具有SCSI功能,能夠?qū)?shù)據(jù)進行一部分控制操作。若網(wǎng)卡同時具有編程功能,則步驟(4.2)-(4.5)由發(fā)送端和接收端的網(wǎng)卡通過交互完成,不需要收發(fā)兩端的CPU參與,整個分片包收發(fā)過程采用RDMA方式。若網(wǎng)卡不具備上述功能,則由收發(fā)兩端的CPU完成,CPU占用率較多,通信延遲較大。
(5)發(fā)送端和接收端采用直接映射方式發(fā)送和接收數(shù)據(jù),圖3列舉了一種實現(xiàn)方式,其具體步驟為(5.1)發(fā)送端從rtskb_pool中申請一個空白網(wǎng)絡(luò)緩沖塊rtskb,在發(fā)送過程中用來存放相關(guān)數(shù)據(jù)結(jié)構(gòu)。將硬件頭部、IP頭部、UDP頭部依次裝入指針p開始的內(nèi)核緩沖區(qū)內(nèi);(5.2)發(fā)送端將指針p開始的長度為Ldata+36字節(jié)的數(shù)據(jù)作為網(wǎng)卡的DMA發(fā)送緩沖,然后網(wǎng)卡用DMA方式將其發(fā)送出去;(5.3)接收端將收到的數(shù)據(jù)接收到網(wǎng)卡的DMA緩沖區(qū)中,對網(wǎng)卡接收端上鎖,使其暫時不能接收新的數(shù)據(jù)包;(5.4)接收端檢查新收到的數(shù)據(jù)所對應(yīng)的用戶程序,如果發(fā)現(xiàn)接收到的單片包是放在正確的位置——即網(wǎng)卡接收緩沖中的空閑緩沖塊中,轉(zhuǎn)步驟(5.6),否則進入步驟(5.5);(5.5)從網(wǎng)卡接收緩沖中分配一個rtksb結(jié)構(gòu)的空閑數(shù)據(jù)包,將數(shù)據(jù)拷貝過去;(5.6)解除網(wǎng)卡接收端的鎖,通過callback方式通知用戶,同時斷開該數(shù)據(jù)包和網(wǎng)卡的聯(lián)系,分配一個新的rtskb包交由網(wǎng)卡管理。
本方法兼容Linux的一般通信方式。在采用本方法的時候,在接收端,如果收到非實時數(shù)據(jù)包,則用對待不分片包的方式進行接收,然后將數(shù)據(jù)包交由Linux進行處理。
在一般的實時網(wǎng)絡(luò)環(huán)境中,數(shù)據(jù)在收發(fā)兩端傳輸?shù)臅r間不長,所以在處理分片包的時候可以全部使用RMA方式。如果在特殊情況下,網(wǎng)絡(luò)延遲比較大,一次消息交互耗時比較長。則RMA方式中可能出現(xiàn)對于較小的分片數(shù)據(jù)包一次信息交互的時間大于一次數(shù)據(jù)拷貝的時間,這樣采用RMA方案反而會降低系統(tǒng)效率。系統(tǒng)在初始化時測試各種大小數(shù)據(jù)包的通信延遲,得到該系統(tǒng)的延遲范圍,在該范圍中存在一個分界點j,當數(shù)據(jù)包大小Ldata大于j時,握手應(yīng)答方案傳輸數(shù)據(jù)通信延遲小于接收端拷貝方案;當數(shù)據(jù)包大小Ldata小于j時接收端拷貝方案傳輸數(shù)據(jù)通信延遲小于握手應(yīng)答方案。當j>k或j≥k時,本方法將0/1拷貝方式作為一種通信方案的補充,總體結(jié)構(gòu)如圖4所示,其步驟如下在上述步驟(4)之前,先對待發(fā)送數(shù)據(jù)包的大小Ldata進行判斷,如果Ldata>j或Ldata≥j時,發(fā)送端按步驟(4.1)-(4.12)對待發(fā)送數(shù)據(jù)進行處理,否則發(fā)送端按步驟(A.1-A.9)對待發(fā)送數(shù)據(jù)進行處理(A.1)發(fā)送端從rtskb_pool中申請一個空白網(wǎng)絡(luò)緩沖塊rtskb,在發(fā)送過程中用來存放相關(guān)數(shù)據(jù)結(jié)構(gòu)。將硬件頭部、IP頭部、UDP頭部依次裝入指針p開始的內(nèi)核緩沖區(qū)內(nèi),形成待發(fā)送總數(shù)據(jù)包,令Lleft=Ldata;(A.2)發(fā)送端將p開始的k+36個字節(jié)作為網(wǎng)卡的DMA緩沖,然后網(wǎng)卡通過DMA方式將這段數(shù)據(jù)發(fā)送出去。發(fā)送成功后,令Lleft=Lleft-k,同時p向后移動k個字節(jié)。接收端用DMA方式接收數(shù)據(jù)后,用通用的UDP協(xié)議處理接收數(shù)據(jù);(A.3)發(fā)送端再從rtskb_pool中申請一個空白rtskb數(shù)據(jù)塊,發(fā)送端分別將硬件頭部和IP頭部依次裝入指針p開始的內(nèi)核緩沖區(qū)內(nèi);(A.4)發(fā)送端將p開始的k+36個字節(jié)作為網(wǎng)卡的DMA緩沖,然后網(wǎng)卡通過DMA方式將這段數(shù)據(jù)發(fā)送出去。發(fā)送成功后令Lleft=Lleft-k-8,同時p向后移動k+8個字節(jié)。
(A.5)接收端用DMA方式接收數(shù)據(jù)后,用通用的UDP協(xié)議處理接收數(shù)據(jù);(A.6)如果Lleft>k+8,轉(zhuǎn)步驟(A.3),否則進入步驟(A.7);(A.7)發(fā)送端將p開始的Lleft+36個字節(jié)作為網(wǎng)卡的DMA緩沖,然后網(wǎng)卡通過DMA方式將這段數(shù)據(jù)發(fā)送出去;(A.8)發(fā)送端發(fā)送數(shù)據(jù)包完畢,修改用戶發(fā)送緩沖標記,使待發(fā)送數(shù)據(jù)可以被改寫或刪除,使對應(yīng)的網(wǎng)卡緩沖可以被重新使用。
(A.9)接收端接收數(shù)據(jù)包完畢,通過callback方式通知用戶數(shù)據(jù)可以使用,同時網(wǎng)卡可以向其它發(fā)送端發(fā)送“可以發(fā)送”的消息。
實例設(shè)背景技術(shù)中三種通信方案分別為通信方案一,通信方案二和通信方案三。由于通信方案一是在realtek8139等比較簡單的百兆網(wǎng)卡上實現(xiàn)的,帶寬上不能突破100M/s,所以不予測試。
利用本方案在實時網(wǎng)絡(luò)通信協(xié)議上進行了實施,本發(fā)明使用前需要停止Linux的網(wǎng)卡驅(qū)動模塊,然后加載本發(fā)明修改后的Rtnet模塊和修改后的網(wǎng)卡驅(qū)動模塊及RTAI實時進程調(diào)度模塊。同時在Rtnet上實現(xiàn)背景技術(shù)中的后兩種零拷貝方式。測試硬件環(huán)境為CPU為Intel 2.0G,256M內(nèi)存,IntelPro1000網(wǎng)卡。軟件環(huán)境為Linux 9.0操作系統(tǒng),RTAI3.0r4實時內(nèi)核模塊和RTNET-0.7.1實時網(wǎng)絡(luò)通信模塊。測試方案為從客戶端向服務(wù)器端發(fā)送數(shù)據(jù),服務(wù)器端接收到數(shù)據(jù)后向客戶端回發(fā)數(shù)據(jù),即ping-pong測試,客戶端取兩次時間之差即一次循環(huán)往返之差(Round-Trip Time)作為測試時間數(shù)據(jù)。一般情況下可以認為Round-Trip Time為通信延遲的2倍。經(jīng)測試,k值為1472,j值為1024,所以不采用補充方案。測試結(jié)果如下

可見,通信延遲小于原來的Rtnet實時調(diào)度算法和背景技術(shù)中的第二種通信方式,在數(shù)據(jù)包大小小于4k時通信延遲比RMA通信方式小得多,在數(shù)據(jù)包大小大于4k時和RMA通信方式差不多,在數(shù)據(jù)包大于8k時通信延遲略大于RMA方式。考慮各種大小的數(shù)據(jù)包在實時通信中的比例,可以認為本方法在實時環(huán)境下具有較好的通信延遲。
權(quán)利要求
1.一種實時環(huán)境下的零拷貝通信方法,其步驟為(1)發(fā)送端對待發(fā)送數(shù)據(jù)進行寫保護;(2)發(fā)送端將靜態(tài)系統(tǒng)緩沖作為用戶發(fā)送緩沖;(3)發(fā)送端判斷上述待發(fā)送數(shù)據(jù)的長度Ldata是否大于k,其中k為單片包內(nèi)數(shù)據(jù)的最大長度,如果大于k,進入步驟(4),否則進入步驟(5);(4)發(fā)送端和接收端采用握手應(yīng)答方式發(fā)送和接收需要分片的待發(fā)送數(shù)據(jù),處理完畢后通信結(jié)束;(5)發(fā)送端和接收端采用直接映射方式發(fā)送和接收數(shù)據(jù),處理完畢后通信結(jié)束。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于進入步驟(4)之前,發(fā)送端對待發(fā)送數(shù)據(jù)包的長度Ldata進行判斷,當Ldata>j或Ldata≥j時,進入步驟(4),其中j為系統(tǒng)通信延遲分界點,否則采用0/1拷貝方式對數(shù)據(jù)進行處理,處理完畢后通信結(jié)束。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于0/1拷貝方式的步驟為(A.1)發(fā)送端申請一個空白網(wǎng)絡(luò)緩沖塊,將硬件頭部、IP頭部、UDP頭部依次裝入指針p開始的內(nèi)核緩沖區(qū)內(nèi),形成待發(fā)送總數(shù)據(jù)包,令尚未發(fā)送的數(shù)據(jù)長度Lleft=Ldata;(A.2)發(fā)送端將p開始的k+36個字節(jié)作為網(wǎng)卡的DMA緩沖,然后網(wǎng)卡通過DMA方式發(fā)送該段數(shù)據(jù),發(fā)送成功后,令Lleft=Lleft-k,同時p向后移動k個字節(jié),接收端采用DMA方式接收數(shù)據(jù)后,采用UDP協(xié)議處理接收數(shù)據(jù);(A.3)發(fā)送端再申請一個空白網(wǎng)絡(luò)緩沖塊,發(fā)送端分別將硬件頭部和IP頭部依次裝入指針p開始的內(nèi)核緩沖區(qū)內(nèi);(A.4)發(fā)送端將p開始的k+36個字節(jié)作為網(wǎng)卡的DMA緩沖,然后網(wǎng)卡通過DMA方式發(fā)送該段數(shù)據(jù),發(fā)送成功后令Lleft=Lleft-k-8,同時p向后移動k+8個字節(jié);(A.5)接收端用DMA方式接收數(shù)據(jù)后,采用UDP協(xié)議處理接收數(shù)據(jù);(A.6)如果Lleft>k+8,轉(zhuǎn)步驟(A.3),否則進入步驟(A.7);(A.7)發(fā)送端將p開始的Lleft+36個字節(jié)作為網(wǎng)卡的DMA緩沖,然后網(wǎng)卡通過DMA方式將這段數(shù)據(jù)發(fā)送出去;(A.8)發(fā)送端發(fā)送數(shù)據(jù)包完畢,修改用戶發(fā)送緩沖標記;(A.9)接收端接收數(shù)據(jù)包完畢,接收完畢后通知用戶。
4.根據(jù)權(quán)利要求1、2或3所述的方法,其特征在于步驟(4)為(4.1)發(fā)送端申請一個空白網(wǎng)絡(luò)緩沖塊,將硬件頭部、IP頭部、UDP頭部依次裝入指針p開始的內(nèi)核緩沖區(qū)內(nèi),形成待發(fā)送總數(shù)據(jù)包,令尚未發(fā)送的數(shù)據(jù)長度為Lleft=Ldata;(4.2)發(fā)送端將有要發(fā)送的數(shù)據(jù)對應(yīng)的用戶程序、每個分片包的大小和分片包個數(shù)的“消息”發(fā)送給接收端;(4.3)接收端從接收到的“消息”中分析找到上述用戶程序;(4.4)接收端將要接收數(shù)據(jù)對應(yīng)的內(nèi)存空間作為網(wǎng)卡的DMA接收緩沖,向發(fā)送端發(fā)送“可以發(fā)送”的信息;(4.5)發(fā)送端收到“可以發(fā)送”的信息后通過DMA方式將p開始的k+36個字節(jié)作為網(wǎng)卡的DMA緩沖,然后網(wǎng)卡通過DMA方式發(fā)送該段數(shù)據(jù),發(fā)送成功后,令Lleft=Lleft-k,同時p向后移動k個字節(jié);(4.6)接收端用DMA方式接收數(shù)據(jù),接收端的DMA緩沖向后移動k字節(jié);(4.7)發(fā)送端再申請一個空白網(wǎng)絡(luò)緩沖塊,分別將硬件頭部和IP頭部依次裝入指針p開始的內(nèi)核緩沖區(qū)內(nèi);(4.8)發(fā)送端將p開始的k+36個字節(jié)作為網(wǎng)卡的DMA緩沖,然后網(wǎng)卡通過DMA方式發(fā)送該段數(shù)據(jù),發(fā)送成功后,令Lleft=Lleft-k-8,同時p向后移動k+8個字節(jié),接收端采用DMA方式接收數(shù)據(jù),接收端的DMA緩沖向后移動k+8字節(jié);(4.9)如果Lleft>k+8,轉(zhuǎn)步驟(4.7),否則進入步驟(4.10);(4.10)發(fā)送端將p開始的Lleft+36個字節(jié)作為網(wǎng)卡的DMA緩沖,然后網(wǎng)卡通過DMA方式將這段數(shù)據(jù)發(fā)送出去;發(fā)送完畢后,修改用戶發(fā)送緩沖標記;(4.11)接收端用DMA方式接收數(shù)據(jù)包,接收完畢后通知用戶。
5.根據(jù)權(quán)利要求1、2或3所述的方法,其特征在于步驟(5)為(5.1)發(fā)送申請一個空白網(wǎng)絡(luò)緩沖塊,將硬件頭部、IP頭部和UDP頭部依次裝入指針p開始的內(nèi)核緩沖區(qū)內(nèi);(5.2)發(fā)送端將指針p開始的長度為Ldata+36字節(jié)的數(shù)據(jù)作為網(wǎng)卡的DMA發(fā)送緩沖,然后網(wǎng)卡用DMA方式發(fā)送;(5.3)接收端將收到的數(shù)據(jù)接收到網(wǎng)卡的DMA緩沖區(qū)中,對網(wǎng)卡接收端上鎖;(5.4)接收端檢查新收到的數(shù)據(jù)對應(yīng)的用戶程序是否存放在網(wǎng)卡接收緩沖中的空閑緩沖塊中,如果是,轉(zhuǎn)步驟(5.6),否則進入步驟(5.5);(5.5)從網(wǎng)卡接收緩沖中分配一個空閑數(shù)據(jù)包,拷貝數(shù)據(jù);(5.6)解除網(wǎng)卡接收端的鎖,通知用戶。
全文摘要
本發(fā)明公開了一種實時環(huán)境下的零拷貝通信方法,步驟為①發(fā)送端對待發(fā)送數(shù)據(jù)進行寫保護;②發(fā)送端將靜態(tài)系統(tǒng)緩沖作為用戶發(fā)送緩沖;③發(fā)送端判斷上述待發(fā)送數(shù)據(jù)的長度L
文檔編號H04L12/56GK1801806SQ20051001978
公開日2006年7月12日 申請日期2005年11月11日 優(yōu)先權(quán)日2005年11月11日
發(fā)明者金海 , 李勝利, 袁平鵬, 張明虎, 徐力 申請人:華中科技大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
精河县| 石渠县| 鲜城| 岱山县| 和田市| 彭水| 屯昌县| 许昌市| 海兴县| 汶上县| 凯里市| 焦作市| 嵊泗县| 惠州市| 兴城市| 湖南省| 延庆县| 德安县| 岳普湖县| 绥芬河市| 富川| 洞口县| 民和| 霍州市| 三门县| 抚顺县| 浦城县| 孝昌县| 舞钢市| 荣成市| 大同市| 隆化县| 万源市| 富宁县| 高清| 沾化县| 淅川县| 丹东市| 抚州市| 岫岩| 康平县|