本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)轉(zhuǎn)發(fā)的方法及裝置。
背景技術(shù):
在網(wǎng)絡(luò)轉(zhuǎn)發(fā)系統(tǒng)中,從功能上主要分為兩部分,一部分是以實現(xiàn)快速轉(zhuǎn)發(fā)為目的的快速處理,即將接收到的報文直接轉(zhuǎn)發(fā),快速處理是在用戶態(tài)實現(xiàn)的;另一部分是功能復(fù)雜的慢速處理,慢速處理是在內(nèi)核態(tài)實現(xiàn)的,即接收到的報文需要先從用戶態(tài)轉(zhuǎn)發(fā)至內(nèi)核進行慢速處理,處理完成后再返回用戶態(tài)進行快速處理。
在實際的應(yīng)用中,對于一個連接中的報文,可能有一部分需要進入慢速處理,等慢速處理完成后的報文返回后,跟不需要進行慢速處理的報文按順序一起進行快速處理。然而由于慢速處理的速度相對于快速處理很慢,因此,在等待需要慢速處理的報文返回的過程中,快速處理單元可能會將其他的不需要進入慢速處理的報文送入內(nèi)核態(tài)進行慢速處理,最終等需要慢速處理的報文返回并將所有的報文發(fā)出時,會出現(xiàn)報文亂序的現(xiàn)象。比如,若一個連接有5個有序的報文,分別記作報文1、報文2、報文3、報文4、報文5,假設(shè)該連接中只有報文1需要進入慢速處理,則當(dāng)報文1進入慢速處理后,由于慢速處理的速度很慢,則可能會導(dǎo)致在報文1返回之前,快速處理單元又將多個報文送入內(nèi)核態(tài)進行慢速處理,假設(shè)又將報文2和報文3送入慢速處理。而當(dāng)報文1回到快速處理后,快速處理若將所有的報文直接發(fā)出,而此時報文2和報文3還沒有從慢速處理中返回,這樣就會導(dǎo)致最終報文發(fā)出的順序為報文1、報文4、報文5、報文2、報文3的亂序現(xiàn)象。
因此,在網(wǎng)絡(luò)轉(zhuǎn)發(fā)系統(tǒng)中,在快速處理與慢速處理之間的交互會導(dǎo)致報文亂序的問題。
技術(shù)實現(xiàn)要素:
鑒于上述問題,本發(fā)明提供一種數(shù)據(jù)轉(zhuǎn)發(fā)方法及裝置,用以解決現(xiàn)有網(wǎng)絡(luò)轉(zhuǎn)發(fā)系統(tǒng)中,在快速處理與慢速處理之間的交互會導(dǎo)致報文亂序的問題。
為解決上述技術(shù)問題,本發(fā)明提供了一種數(shù)據(jù)轉(zhuǎn)發(fā)的方法,所述方法包括:
快速處理報文方接收到報文后,查找所述報文對應(yīng)的連接的報文緩存隊列,所述連接和所述報文緩存隊列一一對應(yīng);
若所述報文緩存隊列的狀態(tài)是進入慢速處理,則將所述報文緩存至所述報文緩存隊列中,所述進入慢速處理表示所述報文緩存隊列中已經(jīng)有進入內(nèi)核進行慢速處理的報文;
若所述報文緩存隊列的狀態(tài)不是進入慢速處理,則將所述報文直接發(fā)給上級應(yīng)用。
可選的,所述查找所述報文對應(yīng)的連接的報文緩存隊列,包括:
若存在與所述報文對應(yīng)的連接的會話表,則查找所述報文對應(yīng)的會話表中的會話表報文緩存隊列;或者,
若不存在與所述報文對應(yīng)的連接的會話表,則查找所述連接對應(yīng)的獨立資源報文緩存隊列。
可選的,所述方法進一步包括:
接收內(nèi)核返回的慢速處理的結(jié)果;
若所述慢速處理的結(jié)果為drop,則將所述報文緩存隊列中的下一個需要送入慢速處理的報文送入內(nèi)核進行慢速處理;或者,
若所述慢速處理的結(jié)果不是drop,則將所述報文緩存隊列中的下一個需要送入慢速處理之前的報文直接發(fā)給上級應(yīng)用。
可選的,所述方法進一步包括:
當(dāng)有報文發(fā)送至內(nèi)核進行慢速處理后,通過定時器監(jiān)測內(nèi)核返回的慢速處理結(jié)果;
若超過預(yù)設(shè)時長后,所述內(nèi)核未返回慢速處理的結(jié)果,則將報文緩存隊列中的下一個需要送入慢速處理的報文送入內(nèi)核進行慢速處理。
可選的,所述方法進一步包括:
在建立所述報文對應(yīng)的連接的會話表之后,將與所述報文對應(yīng)的連接的獨立資源報文緩存隊列刪除。
可選的,若所述方法應(yīng)用于多核處理器CPU計算機系統(tǒng)中,所述方法進一步包括:
將需要進行慢速處理的報文送入唯一對應(yīng)的內(nèi)核CPU進行慢速處理。
本發(fā)明還提供了一種數(shù)據(jù)轉(zhuǎn)發(fā)的裝置,所述裝置包括:
查找單元,用于快速處理報文方接收到報文后,查找所述報文對應(yīng)的連接的報文緩存隊列,所述連接和所述報文緩存隊列一一對應(yīng);
緩存單元,用于若所述報文緩存隊列的狀態(tài)是進入慢速處理,則將所述報文緩存至所述報文緩存隊列中,所述進入慢速處理表示所述報文緩存隊列中已經(jīng)有進入內(nèi)核進行慢速處理的報文;
發(fā)送單元,用于若所述報文緩存隊列的狀態(tài)不是進入慢速處理,則將所述報文直接發(fā)給上級應(yīng)用。
可選的,所述查找單元,包括:
第一查找模塊,用于若存在與所述報文對應(yīng)的連接的會話表,則查找所述報文對應(yīng)的會話表中的會話表報文緩存隊列;
第二查找模塊,用于若不存在與所述報文對應(yīng)的連接的會話表,則查找所述連接對應(yīng)的獨立資源報文緩存隊列。
可選的,所述裝置進一步包括:
接收單元,用于接收內(nèi)核返回的慢速處理的結(jié)果;
送入單元,用于若所述慢速處理的結(jié)果為drop,則將所述報文緩存隊列中的下一個需要送入慢速處理的報文送入內(nèi)核進行慢速處理;
所述發(fā)送單元,還用于若所述慢速處理的結(jié)果不是drop,則將所述報文緩存隊列中的下一個需要送入慢速處理之前的報文直接發(fā)給上級應(yīng)用。
可選的,所述裝置進一步包括:
監(jiān)測單元,用于當(dāng)有報文發(fā)送至內(nèi)核進行慢速處理后,通過定時器監(jiān)測內(nèi)核返回的慢速處理結(jié)果;
所述送入單元,還用于若超過預(yù)設(shè)時長后,所述內(nèi)核未返回慢速處理的結(jié)果,則將報文緩存隊列中的下一個需要送入慢速處理的報文送入內(nèi)核進行慢速處理。
可選的,所述裝置進一步包括:
刪除單元,用于在建立所述報文對應(yīng)的連接的會話表之后,將與所述報文對應(yīng)的連接的獨立資源報文緩存隊列刪除。
可選的,所述裝置進一步包括:
所述送入單元,還用于若所述裝置應(yīng)用于多核處理器CPU計算機系統(tǒng)中,將需要進行慢速處理的報文送入唯一對應(yīng)的內(nèi)核CPU進行慢速處理。
借由上述技術(shù)方案,本發(fā)明提供的數(shù)據(jù)轉(zhuǎn)發(fā)的方法及裝置,能夠由快速處理報文方接收到報文后,查找報文對應(yīng)的連接的報文緩存隊列,連接和報文緩存隊列一一對應(yīng);若報文緩存隊列的狀態(tài)是進入慢速處理,則將報文緩存至報文緩存隊列中,進入慢速處理表示報文緩存隊列中已經(jīng)有進入內(nèi)核進行慢速處理的報文;若報文緩存隊列的狀態(tài)不是進入慢速處理,則將報文直接發(fā)給上級應(yīng)用。與現(xiàn)有技術(shù)相比,在快速處理報文方中設(shè)置有基于連接建立的緩存報文的緩存隊列,當(dāng)緩存隊列中有需要進行慢速處理的報文時,會將接收到的報文放置在緩存隊列中進行等待;并且快速處理報文方是按序?qū)彺骊犃兄械膱笪倪M行慢速處理或者直接發(fā)給上級應(yīng)用,因此在等待需要進入慢速處理的報文返回的過程中不會有不需要進行慢速處理的報文進入內(nèi)核進行慢速處理,所以,在快速處理和慢速處理之間交互時不會導(dǎo)致報文亂序的現(xiàn)象。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了本發(fā)明實施例提供的一種數(shù)據(jù)轉(zhuǎn)發(fā)的方法的流程圖;
圖2示出了本發(fā)明實施例提供的一種數(shù)據(jù)轉(zhuǎn)發(fā)的裝置的組成框圖;
圖3示出了本發(fā)明實施例提供的另一種數(shù)據(jù)轉(zhuǎn)發(fā)的裝置的組成框圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
為解決現(xiàn)有網(wǎng)絡(luò)轉(zhuǎn)發(fā)系統(tǒng)中,在快速處理與慢速處理之間的交互會導(dǎo)致報文亂序的問題,本發(fā)明實施例提供了一種數(shù)據(jù)轉(zhuǎn)發(fā)的方法,如圖1所示,該方法包括:
101、快速處理報文方接收到報文后,查找報文對應(yīng)的連接的報文緩存隊列。
本實施例中快速處理報文方為DPDK程序,DPDK是一種進行快速數(shù)據(jù)包處理的庫和驅(qū)動程序,DPDK快速收發(fā)包程序在用戶態(tài)實現(xiàn),快速處理報文方是從網(wǎng)卡中接收報文。本實施例中的緩存報文的報文緩存隊列是基于連接建立的,即一個連接對應(yīng)一個報文緩存隊列,具體的是以連接對應(yīng)的五元組為key以及報文緩存隊列的地址為value建立的對應(yīng)連接的報文緩存隊列。因此,在接收到報文后需要查找報文對應(yīng)的連接對應(yīng)的報文緩存隊列。需要說明的是,本實施例中報文包括一個或者多個報文;五元組包括連接對應(yīng)的源網(wǎng)間協(xié)議(Internet Protocol,IP)地址,源端口,目的IP地址,目的端口和傳輸層協(xié)議。
102、若所述報文緩存隊列的狀態(tài)是進入慢速處理,則將所述報文緩存至所述報文緩存隊列中。
其中進入慢速處理表示當(dāng)前報文緩存隊列中對應(yīng)有進入內(nèi)核進行慢速處理的報文。
在實際應(yīng)用中,快速處理報文方接收到的報文中有的可以直接發(fā)出給上級應(yīng)用,有的需要送入內(nèi)核進行慢速處理。而慢速處理的速度遠遠低于快速處理的速度,因此為避免出現(xiàn)亂序的現(xiàn)象,若當(dāng)前報文緩存隊列中有報文進入內(nèi)核進行慢速處理,則需要等待進入慢速處理的報文從內(nèi)核中返回后再按序?qū)笪木彺骊犃兄械膱笪霓D(zhuǎn)發(fā)給上級應(yīng)用。
因此當(dāng)接收到報文后,需要判斷對應(yīng)的報文緩存隊列的狀態(tài),報文緩存隊列的狀態(tài)能夠表示報文緩存隊列中是否有報文進入內(nèi)核進行慢速處理。然后根據(jù)報文緩存隊列的狀態(tài)來判斷對報文的處理方式。
若報文緩存隊列的狀態(tài)是進入慢速處理,即需要等待進入慢速處理的報文返回后再進行報文緩存隊列中報文的發(fā)出,因此需要將報文緩存至報文緩存隊列中等待,具體的是將報文緩存至報文緩存隊列的尾部,這樣可以保證先進先出。
103、若報文緩存隊列的狀態(tài)不是進入慢速處理,則將報文直接發(fā)給上級應(yīng)用。
若報文緩存隊列的狀態(tài)不是進入慢速處理,則表示當(dāng)前報文緩存隊列中沒有進入內(nèi)核進行慢速處理的報文,則可以將收到的報文直接發(fā)給上級應(yīng)用。由于快速處理報文方進行報文轉(zhuǎn)發(fā)的速度很快,若當(dāng)前緩存隊列中沒有需要進行慢速處理的報文,則在報文緩存隊列中通常不會留下緩存的報文,因此可以將接收到的報文直接發(fā)出,不會產(chǎn)生亂序的現(xiàn)象。在實際應(yīng)用中,若報文緩存隊列還留有沒有發(fā)出的報文,則可以將接收到的的報文在留下的報文后發(fā)給上級應(yīng)用。
本發(fā)明實施例提供的數(shù)據(jù)轉(zhuǎn)發(fā)的方法,能夠由快速處理報文方接收到報文后,查找報文對應(yīng)的連接的報文緩存隊列,連接和報文緩存隊列一一對應(yīng);若報文緩存隊列的狀態(tài)是進入慢速處理,則將報文緩存至報文緩存隊列中,進入慢速處理表示報文緩存隊列中已經(jīng)有進入內(nèi)核進行慢速處理的報文;若報文緩存隊列的狀態(tài)不是進入慢速處理,則將報文直接發(fā)給上級應(yīng)用。與現(xiàn)有技術(shù)相比,在快速處理報文方中設(shè)置有基于連接建立的緩存報文的緩存隊列,當(dāng)緩存隊列中有需要進行慢速處理的報文時,會將接收到的報文放置在緩存隊列中進行等待;并且快速處理報文方是按序?qū)彺骊犃兄械膱笪倪M行慢速處理或者直接發(fā)給上級應(yīng)用,因此在等待需要進入慢速處理的報文返回的過程中不會有不需要進行慢速處理的報文進入內(nèi)核進行慢速處理,所以,在快速處理和慢速處理之間交互時不會導(dǎo)致報文亂序的現(xiàn)象。
進一步的,對圖1所示的方法進行細化和擴展,如下所述:
對于步驟101中查找所述報文對應(yīng)的連接的報文緩存隊列,具體還包括:
先查找報文對應(yīng)的連接是否已經(jīng)建立會話表,若建立了會話表,則從對應(yīng)的會話表中查找是否已經(jīng)建立了對應(yīng)的會話表報文緩存隊列,若沒有建立,則在會話表中一個空間地址作為會話表報文緩存隊列的基地址。
若報文對應(yīng)的連接還未建立會話表,則需要在處理器CPU中建立獨立資源報文緩存隊列。另外當(dāng)建立對應(yīng)的會話表之后需要將之前建立的獨立資源報文緩存隊列刪除。將獨立資源報文緩存隊列刪除的目的為及時釋放內(nèi)存資源,防止內(nèi)存泄漏問題。
給出具體的示例,對獨立資源報文緩存隊列的刪除過程進行說明:假設(shè)在建立會話表之前接收到5個報文,分別為報文1、報文2、報文3、報文4、報文5,其中報文1需要進入內(nèi)核進行慢速處理,若報文1送入內(nèi)核進行慢速處理后,4個報文被緩存在獨立資源報文緩存隊列中,若在報文1經(jīng)過慢速處理并返回慢速處理結(jié)果后,快速處理報文方建立了對應(yīng)連接的會話表,此時若報文2需要送入內(nèi)核進行慢速處理,則會將報文2送入內(nèi)核進行慢速處理,然后將剩下的報文3、報文4、報文5轉(zhuǎn)移到會話表中建立的會話表報文緩存隊列中,然后將獨立資源報文緩存隊列刪除;若報文2、報文3、報文4、報文5都不需要進入內(nèi)核進行慢速處理,則將報文2、報文3、報文4、報文5直接基于連接發(fā)送給上級應(yīng)用,并在發(fā)送給上級應(yīng)用后,將獨立資源報文緩存隊列刪除。
進一步的,將報文添加到對應(yīng)的報文緩存隊列中,則需要等待接收內(nèi)核返回的慢速處理的結(jié)果,并根據(jù)等待的結(jié)果對緩存隊列中的報文進行對應(yīng)的處理。具體的處理過程為:若在預(yù)設(shè)時長內(nèi)接收到內(nèi)核返回的慢速處理的結(jié)果,并且慢速處理的結(jié)果為drop,則將報文緩存隊列中的下一個需要進行慢速處理的報文送入內(nèi)核進行慢速處理;若在預(yù)設(shè)時長內(nèi)接收到內(nèi)核返回的慢速處理的結(jié)果,并且慢速處理的結(jié)果不是drop,而是accept、queue等結(jié)果,則將報文緩存隊列中下一個需要慢速處理的報文之前的所有報文直接發(fā)出給上級應(yīng)用;若在預(yù)設(shè)時長內(nèi)沒有接收到內(nèi)核返回的慢速處理的結(jié)果,則表示進入內(nèi)核進行慢速處理的報文有可能死在內(nèi)核中,無法返回,這時需要將緩存隊列中的下一個需要慢速處理的報文送入內(nèi)核進行慢速處理,然后繼續(xù)等待內(nèi)核返回慢速處理的結(jié)果。需要說明的是,對于是否超過預(yù)設(shè)時長是由定時器監(jiān)測的。其中預(yù)設(shè)時長可以根據(jù)實際的需求設(shè)置,比如可以設(shè)置為100ms等。定時器在每一次有報文送入內(nèi)核進行慢速處理時,進行狀態(tài)的更新,即以此刻為起點計算返回慢速處理結(jié)果的時長。
進一步的,上述圖1所述的數(shù)據(jù)轉(zhuǎn)發(fā)的方法可以應(yīng)用于單核CPU或者多核CPU計算機系統(tǒng)中,對于多核CPU計算機系統(tǒng),為了將多核的競爭對數(shù)據(jù)轉(zhuǎn)發(fā)的性能的影響降到最低,使數(shù)據(jù)轉(zhuǎn)發(fā)的性能可以隨CPU的增加線性增長。本實施例將快速處理報文方將接收的報文發(fā)送給唯一對應(yīng)的內(nèi)核CPU進行慢速處理,即快速處理報文方對應(yīng)的CPU與慢速處理的內(nèi)核對應(yīng)的CPU一一對應(yīng),即單生產(chǎn)者對應(yīng)單消費者的形式。另外,上述定時器也是每核資源。
進一步的,由于慢速處理上下文為軟中斷上下文,因此需要由快速處理報文方向內(nèi)核發(fā)送核間中斷,該核間中斷的處理函數(shù)即為內(nèi)核接收報文函數(shù),通過這種方式可以使內(nèi)核接收用戶態(tài)實現(xiàn)的快速處理報文發(fā)送的報文。另外為了提高內(nèi)核態(tài)接收報文的效率,在一次核間中斷時,內(nèi)核對快速處理報文方中對應(yīng)的報文緩存隊列進行多次輪詢,并且根據(jù)報文緩存隊列中的報文數(shù)量來確定輪詢接收報文的次數(shù),這樣可以達到一次核間中斷可以收取更多的報文;而快速處理報文方接收內(nèi)核返回報文的方式為持續(xù)輪詢的方式與內(nèi)核接收報文的核間中斷結(jié)合輪詢的方式不同。需要說明的是,快速處理報文方發(fā)送核間中斷的機制為定時發(fā)送,或者根據(jù)報文緩存隊列中的報文的數(shù)量發(fā)送,當(dāng)報文緩存隊列中的報文較多時發(fā)送核間中斷。
進一步的,由于對于傳輸控制協(xié)議(Transmission Control Protocol,TCP)報文,不存在發(fā)包亂序的現(xiàn)象,本實施例主要是針對非TCP報文,比如用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol,UDP)報文。因此在實際應(yīng)用中,在對接收到的報文查找報文緩存隊列之前,還需要判斷是否為非TCP報文,若為非TCP報文在進行后續(xù)的處理。
進一步的,對于現(xiàn)有技術(shù)中沒有報文緩存隊列時,在進行UDP吞吐性能測試時,由于報文轉(zhuǎn)發(fā)性能十分快,可能會導(dǎo)致大量報文突然進入快慢速交互通道而產(chǎn)生通道堵塞丟失報文的現(xiàn)象,而當(dāng)建立報文緩存隊列后可以避免大量的報文突然進入快慢速交互通道的現(xiàn)象,從而避免UDP吞吐性能測試時不會因為快速處理與慢速處理之間的交互而導(dǎo)致首輪測試大量丟失報文的現(xiàn)象。
進一步的,作為對上述各實施例的實現(xiàn),本發(fā)明實施例的另一實施例還提供了一種數(shù)據(jù)轉(zhuǎn)發(fā)的裝置,用于實現(xiàn)上述圖1所述的方法。如圖2所示,該裝置包括:查找單元21、緩存單元22以及發(fā)送單元23。
查找單元21,用于快速處理報文方接收到報文后,查找報文對應(yīng)的連接的報文緩存隊列,連接和報文緩存隊列一一對應(yīng)。
其中,快速處理報文方為DPDK程序,DPDK是一種進行快速數(shù)據(jù)包處理的庫和驅(qū)動程序,DPDK快速收發(fā)包程序在用戶態(tài)實現(xiàn),快速處理報文方是從網(wǎng)卡中接收報文。本實施例中的緩存報文的報文緩存隊列是基于連接建立的,即一個連接對應(yīng)一個報文緩存隊列,具體的是以連接對應(yīng)的五元組為key以及報文緩存隊列的地址為value建立的對應(yīng)連接的報文緩存隊列。因此,在接收到報文后需要查找報文對應(yīng)的連接對應(yīng)的報文緩存隊列。需要說明的是,本實施例中報文包括一個或者多個報文;五元組包括連接對應(yīng)的源IP地址,源端口,目的IP地址,目的端口和傳輸層協(xié)議。
緩存單元22,用于若報文緩存隊列的狀態(tài)是進入慢速處理,則將報文緩存至報文緩存隊列中,進入慢速處理表示報文緩存隊列中已經(jīng)有進入內(nèi)核進行慢速處理的報文。
其中進入慢速處理表示當(dāng)前報文緩存隊列中對應(yīng)有進入內(nèi)核進行慢速處理的報文。
在實際應(yīng)用中,快速處理報文方接收到的報文中有的可以直接發(fā)出給上級應(yīng)用,有的需要送入內(nèi)核進行慢速處理。而慢速處理的速度遠遠低于快速處理的速度,因此為避免出現(xiàn)亂序的現(xiàn)象,若當(dāng)前報文緩存隊列中有報文進入內(nèi)核進行慢速處理,則需要等待進入慢速處理的報文從內(nèi)核中返回后再按序?qū)笪木彺骊犃兄械膱笪霓D(zhuǎn)發(fā)給上級應(yīng)用。
因此當(dāng)接收到報文后,需要判斷對應(yīng)的報文緩存隊列的狀態(tài),報文緩存隊列的狀態(tài)能夠表示報文緩存隊列中是否有報文進入內(nèi)核進行慢速處理。然后根據(jù)報文緩存隊列的狀態(tài)來判斷對報文的處理方式。
若報文緩存隊列的狀態(tài)是進入慢速處理,即需要等待進入慢速處理的報文返回后再進行報文緩存隊列中報文的發(fā)出,因此需要將報文緩存至報文緩存隊列中等待,具體的是將報文緩存至報文緩存隊列的尾部,這樣可以保證先進先出。
發(fā)送單元23,用于若報文緩存隊列的狀態(tài)不是進入慢速處理,則將報文直接發(fā)給上級應(yīng)用。
若報文緩存隊列的狀態(tài)不是進入慢速處理,則表示當(dāng)前報文緩存隊列中沒有進入內(nèi)核進行慢速處理的報文,則可以將收到的報文直接發(fā)給上級應(yīng)用。由于快速處理報文方進行報文轉(zhuǎn)發(fā)的速度很快,若當(dāng)前緩存隊列中沒有需要進行慢速處理的報文,則在報文緩存隊列中通常不會留下緩存的報文,因此可以將接收到的報文直接發(fā)出,不會產(chǎn)生亂序的現(xiàn)象。在實際應(yīng)用中,若報文緩存隊列還留有沒有發(fā)出的報文,則可以將接收到的的報文在留下的報文后發(fā)給上級應(yīng)用。
進一步的,如圖3所示,查找單元21,包括:
第一查找模塊211,用于若存在與報文對應(yīng)的連接的會話表,則查找報文對應(yīng)的會話表中的會話表報文緩存隊列;
第二查找模塊212,用于若不存在與報文對應(yīng)的連接的會話表,則查找連接對應(yīng)的獨立資源報文緩存隊列。
先查找報文對應(yīng)的連接是否已經(jīng)建立會話表,若建立了會話表,則從對應(yīng)的會話表中查找是否已經(jīng)建立了對應(yīng)的會話表報文緩存隊列,若沒有建立,則在會話表中一個空間地址作為會話表報文緩存隊列的基地址。
若報文對應(yīng)的連接還未建立會話表,則需要在處理器CPU中建立獨立資源報文緩存隊列。
進一步的,如圖3所示,裝置進一步包括:
接收單元24,用于接收內(nèi)核返回的慢速處理的結(jié)果;
送入單元25,用于若慢速處理的結(jié)果為drop,則將報文緩存隊列中的下一個需要送入慢速處理的報文送入內(nèi)核進行慢速處理;
發(fā)送單元23,還用于若慢速處理的結(jié)果不是drop,則將報文緩存隊列中的下一個需要送入慢速處理之前的報文直接發(fā)給上級應(yīng)用。
慢速處理的結(jié)果不是drop,而是accept、queue等結(jié)果,則將報文緩存隊列中下一個需要慢速處理的報文之前的所有報文直接發(fā)出給上級應(yīng)用。
進一步的,如圖3所示,裝置進一步包括:
監(jiān)測單元26,用于當(dāng)有報文發(fā)送至內(nèi)核進行慢速處理后,通過定時器監(jiān)測內(nèi)核返回的慢速處理結(jié)果;
送入單元25,還用于若超過預(yù)設(shè)時長后,內(nèi)核未返回慢速處理的結(jié)果,則將報文緩存隊列中的下一個需要送入慢速處理的報文送入內(nèi)核進行慢速處理。
其中預(yù)設(shè)時長可以根據(jù)實際的需求設(shè)置,比如可以設(shè)置為100ms等。定時器在每一次有報文送入內(nèi)核進行慢速處理時,進行狀態(tài)的更新,即以此刻為起點計算返回慢速處理結(jié)果的時長。
進一步的,如圖3所示,裝置進一步包括:
刪除單元27,用于在建立報文對應(yīng)的連接的會話表之后,將與報文對應(yīng)的連接的獨立資源報文緩存隊列刪除。
另外當(dāng)建立對應(yīng)的會話表之后需要將之前建立的獨立資源報文緩存隊列刪除。將獨立資源報文緩存隊列刪除的目的為及時釋放內(nèi)存資源,防止內(nèi)存泄漏問題。
給出具體的示例,對獨立資源報文緩存隊列的刪除過程進行說明:假設(shè)在建立會話表之前接收到5個報文,分別為報文1、報文2、報文3、報文4、報文5,其中報文1需要進入內(nèi)核進行慢速處理,若報文1送入內(nèi)核進行慢速處理后,4個報文被緩存在獨立資源報文緩存隊列中,若在報文1經(jīng)過慢速處理并返回慢速處理結(jié)果后,快速處理報文方建立了對應(yīng)連接的會話表,此時若報文2需要送入內(nèi)核進行慢速處理,則會將報文2送入內(nèi)核進行慢速處理,然后將剩下的報文3、報文4、報文5轉(zhuǎn)移到會話表中建立的會話表報文緩存隊列中,然后將獨立資源報文緩存隊列刪除;若報文2、報文3、報文4、報文5都不需要進入內(nèi)核進行慢速處理,則將報文2、報文3、報文4、報文5直接基于連接發(fā)送給上級應(yīng)用,并在發(fā)送給上級應(yīng)用后,將獨立資源報文緩存隊列刪除。
進一步的,如圖3所示,裝置進一步包括:
送入單元25,還用于若裝置應(yīng)用于多核處理器CPU計算機系統(tǒng)中,將需要進行慢速處理的報文送入唯一對應(yīng)的內(nèi)核CPU進行慢速處理。
將快速處理報文方將接收的報文發(fā)送給唯一對應(yīng)的內(nèi)核CPU進行慢速處理,即快速處理報文方對應(yīng)的CPU與慢速處理的內(nèi)核對應(yīng)的CPU一一對應(yīng),即單生產(chǎn)者對應(yīng)單消費者的形式。另外,上述定時器也是每核資源。
本發(fā)明實施例提供的數(shù)據(jù)轉(zhuǎn)發(fā)的裝置,能夠由快速處理報文方接收到報文后,查找報文對應(yīng)的連接的報文緩存隊列,連接和報文緩存隊列一一對應(yīng);若報文緩存隊列的狀態(tài)是進入慢速處理,則將報文緩存至報文緩存隊列中,進入慢速處理表示報文緩存隊列中已經(jīng)有進入內(nèi)核進行慢速處理的報文;若報文緩存隊列的狀態(tài)不是進入慢速處理,則將報文直接發(fā)給上級應(yīng)用。與現(xiàn)有技術(shù)相比,在快速處理報文方中設(shè)置有基于連接建立的緩存報文的緩存隊列,當(dāng)緩存隊列中有需要進行慢速處理的報文時,會將接收到的報文放置在緩存隊列中進行等待;并且快速處理報文方是按序?qū)彺骊犃兄械膱笪倪M行慢速處理或者直接發(fā)給上級應(yīng)用,因此在等待需要進入慢速處理的報文返回的過程中不會有不需要進行慢速處理的報文進入內(nèi)核進行慢速處理,所以,在快速處理和慢速處理之間交互時不會導(dǎo)致報文亂序的現(xiàn)象。
在上述實施例中,對各個實施例的描述都各有側(cè)重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關(guān)描述。
可以理解的是,上述方法及裝置中的相關(guān)特征可以相互參考。另外,上述實施例中的“第一”、“第二”等是用于區(qū)分各實施例,而并不代表各實施例的優(yōu)劣。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權(quán)利要求書由此明確地并入該具體實施方式,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的發(fā)明名稱(如數(shù)據(jù)轉(zhuǎn)發(fā)的裝置)中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。