專利名稱:一種高可靠性的高速報文轉(zhuǎn)發(fā)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)應(yīng)用中實現(xiàn)報文的高速可靠地轉(zhuǎn)發(fā)的方法。
背景技術(shù):
在諸如路由器、媒體網(wǎng)關(guān)等的網(wǎng)絡(luò)應(yīng)用中,經(jīng)常需要實現(xiàn)高速的報文轉(zhuǎn)發(fā),從而達(dá)到提高吞吐率的目的。為了實現(xiàn)這一目的,常見的轉(zhuǎn)發(fā)方式包括采用專用芯片,例如專用集成電路(ASIC),或者采用網(wǎng)絡(luò)處理器,來實現(xiàn)報文的高速轉(zhuǎn)發(fā)。
出于對成本、業(yè)務(wù)靈活性等的考慮,很多情況下需要在普通CPU上既處理上層協(xié)議或者其他必要的應(yīng)用軟件,又處理報文的快速轉(zhuǎn)發(fā),從而達(dá)到降低成本,增加業(yè)務(wù)靈活性等的目的。
在這種情況下,是將報文的快速轉(zhuǎn)發(fā)與上層協(xié)議或者其他應(yīng)用軟件一樣作為一個任務(wù)來處理。利用操作系統(tǒng)的任務(wù)調(diào)度能力,實現(xiàn)快速轉(zhuǎn)發(fā)和其他任務(wù)共享同一個CPU。
但是,上述現(xiàn)有技術(shù)具有如下的缺點1、對于不支持搶占式調(diào)度的系統(tǒng),這種設(shè)置會造成快速轉(zhuǎn)發(fā)任務(wù)不能及時得到合理的調(diào)度,造成轉(zhuǎn)發(fā)的延時、抖動偏大,甚至不可接受。另外,這還要求其他任務(wù)要主動、及時地釋放CPU,實際上增加了不同模塊之間的耦合,增加了整個系統(tǒng)的難度。
2、對于支持搶占式調(diào)度的系統(tǒng),雖然可以把快速轉(zhuǎn)發(fā)作為一個高優(yōu)先級任務(wù)來調(diào)度,但調(diào)度的粒度一般是受限的。因為抖動大小基本上和調(diào)度粒度呈線性相關(guān)。對于媒體網(wǎng)關(guān)等要求報文抖動很小的場合,勢必要求很高的調(diào)度粒度,例如1毫秒。如此頻繁的調(diào)度,極大地增加了CPU的開銷,造成了處理能力的大量浪費(fèi),從而增加了系統(tǒng)成本。
在現(xiàn)有技術(shù)中,另一種報文快速轉(zhuǎn)發(fā)方式是采用報文中斷方式的快速轉(zhuǎn)發(fā)。
在這種方法中,快速轉(zhuǎn)發(fā)模塊在中斷服務(wù)程序中進(jìn)行。當(dāng)接收到的報文達(dá)到一定數(shù)量(假設(shè)為x個),或者接收到至少一個報文,在后續(xù)的一段時間內(nèi)(假設(shè)為y毫秒,可利用超時定時器設(shè)置)沒有接收到新的報文,則由硬件產(chǎn)生中斷,從而觸發(fā)快速轉(zhuǎn)發(fā)模塊的處理。因為中斷的優(yōu)先級很高,所以,快速轉(zhuǎn)發(fā)模塊的優(yōu)先級得到了保證,減少了和其他任務(wù)的偶合,而不論操作系統(tǒng)是否采用否搶占式任務(wù)調(diào)度。另外,通過控制產(chǎn)生中斷的報文數(shù)量x,以及超時定時器的設(shè)置值y,即可以大致控制CPU的中斷頻度,從而在保證快速轉(zhuǎn)發(fā)性能的基礎(chǔ)上,提高CPU的利用率。
這種方法的缺點在于,CPU的占用率和網(wǎng)絡(luò)報文流量模型密切相關(guān)。在網(wǎng)絡(luò)上存在大量突發(fā)報文的情況下,尤其是發(fā)生惡意攻擊時,CPU的占用率會達(dá)到極限,造成系統(tǒng)行為不可預(yù)期,甚至死機(jī)。
發(fā)明內(nèi)容
為了解決上述現(xiàn)有技術(shù)的問題,本發(fā)明的目的是提供一種可靠而又快速地進(jìn)行報文轉(zhuǎn)發(fā)的方法。
為了實現(xiàn)上述目的,本發(fā)明的報文快速轉(zhuǎn)發(fā)方法包括按照預(yù)先設(shè)定的定時器中斷頻度啟動定時器中斷;在定時器中斷處理中,從網(wǎng)絡(luò)接口接收報文;和對接收的報文進(jìn)行轉(zhuǎn)發(fā)處理。
在上述方法中,可進(jìn)一步包括在對從網(wǎng)絡(luò)接口接收的報文進(jìn)行轉(zhuǎn)發(fā)處理后,判斷是否結(jié)束當(dāng)前中斷處理。其中判斷是否結(jié)束中斷處理的步驟可包括根據(jù)對CPU的占用率,確定定時器中斷處理的結(jié)束時刻;在對從網(wǎng)絡(luò)接口接收的報文進(jìn)行轉(zhuǎn)發(fā)處理后,判斷當(dāng)前時刻是否到達(dá)定時器中斷處理的結(jié)束時刻;如果到達(dá)定時器中斷處理的結(jié)束時刻,則結(jié)束中斷處理。
根據(jù)本發(fā)明的一種實施方案,在有多個網(wǎng)絡(luò)接口的情況下,如果判斷當(dāng)前網(wǎng)絡(luò)接口的報文轉(zhuǎn)發(fā)處理結(jié)束后,尚未到達(dá)定時器中斷處理的結(jié)束時刻,則從下一網(wǎng)絡(luò)接口接收報文進(jìn)行轉(zhuǎn)發(fā)處理。
本發(fā)明可不依賴于操作系統(tǒng),保證快速轉(zhuǎn)發(fā)性能。而且,本發(fā)明對CPU的占用可預(yù)期,不與網(wǎng)絡(luò)上的報文流量相關(guān),可靠性高。
圖1是根據(jù)本發(fā)明的方法進(jìn)行報文快速轉(zhuǎn)發(fā)處理的流程圖。
具體實施例方式
以下參照附圖對本發(fā)明的實施例進(jìn)行詳細(xì)的描述。
本發(fā)明的方法是,在CPU上采用定時中斷的方式,實現(xiàn)報文的快速轉(zhuǎn)發(fā)。這種方式一方面在對操作系統(tǒng)幾乎沒有依賴的情況下實現(xiàn)報文的及時、快速轉(zhuǎn)發(fā),同時,避免了現(xiàn)有技術(shù)采用中斷服務(wù)程序的缺點,CPU的運(yùn)行模式、占用率總是可預(yù)知的,而不與網(wǎng)絡(luò)報文流量模型相關(guān),在提高CPU利用率的基礎(chǔ)上,大大增強(qiáng)了系統(tǒng)的可靠性。
本發(fā)明具體實施例可參見圖1所示的根據(jù)本發(fā)明的報文快速轉(zhuǎn)發(fā)處理的過程。首先,根據(jù)實際需要設(shè)置定時器中斷的頻度(例如1毫秒),根據(jù)設(shè)定的中斷頻度,在CPU上啟動定時器中斷。
在定時器中斷處理程序開始時,要獲取當(dāng)前系統(tǒng)的時刻(步驟S1)。
隨后,按照快速轉(zhuǎn)發(fā)模塊所期望的CPU占用率上限(例如60%),確定本次中斷必須結(jié)束處理的系統(tǒng)時刻Tend返回條件(步驟S2)。具體的方式可以是根據(jù)當(dāng)前中斷時的系統(tǒng)時刻T,得到Tend=T+(中斷間隔時間)×60%。
例如,對于采用1毫秒的中斷,Tend為中斷開始時刻T+0.6毫秒。
接下來,首先嘗試從一個網(wǎng)絡(luò)接口(例如網(wǎng)絡(luò)接口1)接收N個報文(步驟S3)。進(jìn)一步,判斷是否收到報文(步驟S4)。
如果判斷收到了預(yù)定的N個報文,則對這些報文進(jìn)行處理,例如進(jìn)行快速轉(zhuǎn)發(fā)、或者傳遞給系統(tǒng)其它軟件模塊;如果收到的報文個數(shù)P<N個,則只需要處理收到的P個報文即可(步驟S5)。
在處理完收到的報文后,獲取系統(tǒng)當(dāng)前時刻Tnow(步驟S6)。
判斷該當(dāng)前時刻Tnow是否超過或者等于Tend(步驟S7)。
如果當(dāng)前時刻Tnow超過或者等于Tend,則本次中斷結(jié)束,釋放CPU。
另外,在上述步驟S3中,如果在預(yù)定的時間內(nèi)未收到報文,或是在步驟S7中判斷出Tnow小于Tend,則嘗試從另一個網(wǎng)絡(luò)接口接收預(yù)定的M個報文(步驟S3’)。此后的步驟S4’-S7’與上述步驟S4-S7類似,不再贅述。
需要說明,上例中N和M的設(shè)立是為了進(jìn)一步提高軟件處理的效率。最簡單的情況下,可以將N、M均取值為1。這樣只要在收到一個報文后就可以進(jìn)行處理,可以加快報文的處理速度。
根據(jù)本發(fā)明的一種優(yōu)選實施方案,為了提高CPU利用率,可以增加一個退出本次中斷的判斷條件。即如果從最后的接口接收進(jìn)來的報文少于預(yù)定的M個,則直接退出中斷,釋放CPU,而不管Tnow此時可能還遠(yuǎn)小于Tend。這樣的好處是避免了CPU在中斷中無謂地掃描空的接口,浪費(fèi)處理能力。
另外,上述例子中只列舉了系統(tǒng)有兩個網(wǎng)絡(luò)接口的例子,實際應(yīng)用中顯然可以根據(jù)實際情況增減端口數(shù)量,或采用其他資源調(diào)度算法,實現(xiàn)需要的網(wǎng)絡(luò)接口處理優(yōu)先級。
雖然以上結(jié)合具體實施例描述了本發(fā)明,但這些具體說明并不是對本發(fā)明的限制。本領(lǐng)域技術(shù)人員在不脫離本發(fā)明的精神和范圍的情況下,可以對本發(fā)明做出各種修改和變換。它們均在所附的權(quán)利要求的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種報文快速轉(zhuǎn)發(fā)方法,其特征在于包括按照預(yù)先設(shè)定的定時器中斷頻度啟動定時器中斷;在定時器中斷處理中,從網(wǎng)絡(luò)接口接收報文;對接收到的報文進(jìn)行轉(zhuǎn)發(fā)處理。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括在對從網(wǎng)絡(luò)接口接收的報文進(jìn)行轉(zhuǎn)發(fā)處理后,判斷是否結(jié)束當(dāng)前中斷處理。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,判斷是否結(jié)束中斷處理的步驟包括根據(jù)對CPU的占用率,確定定時器中斷處理的結(jié)束時刻;在對從所述網(wǎng)絡(luò)接口接收的報文進(jìn)行轉(zhuǎn)發(fā)處理后,判斷當(dāng)前時刻是否到達(dá)定時器中斷處理的結(jié)束時刻;如果到達(dá)定時器中斷處理的結(jié)束時刻,則結(jié)束中斷處理。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,確定定時器中斷處理的結(jié)束時刻Tend的方法包括設(shè)當(dāng)前中斷時的系統(tǒng)時刻為T,則Tend=T+(中斷間隔時間)×CPU的占用率。
5.根據(jù)權(quán)利要求1-4任一項所述的方法,其特征在于,進(jìn)一步包括,如果判斷當(dāng)前網(wǎng)絡(luò)接口的報文轉(zhuǎn)發(fā)處理結(jié)束后,尚未到達(dá)定時器中斷處理的結(jié)束時刻,則從下一網(wǎng)絡(luò)接口接收報文進(jìn)行轉(zhuǎn)發(fā)處理。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,對接收到的報文進(jìn)行轉(zhuǎn)發(fā)處理的步驟包括如果收到了預(yù)定的N個報文,則對這些報文進(jìn)行轉(zhuǎn)發(fā);如果收到的報文個數(shù)P<N,則只處理收到的P個報文。
7.根據(jù)權(quán)利要求5所述的方法,其特征在于,對接收到的報文進(jìn)行轉(zhuǎn)發(fā)處理的步驟包括每當(dāng)收到一個報文時,就對該接收的報文進(jìn)行轉(zhuǎn)發(fā)處理。
8.根據(jù)權(quán)利要求5所述的方法,其特征在于,進(jìn)一步包括如果從最后的接口接收進(jìn)來的報文少于預(yù)定個數(shù),則直接退出中斷。
9.根據(jù)權(quán)利要求6所述的方法,其特征在于,進(jìn)一步包括如果從最后的接口接收進(jìn)來的報文少于預(yù)定個數(shù),則直接退出中斷。
10.根據(jù)權(quán)利要求7所述的方法,其特征在于,進(jìn)一步包括如果從最后的接口接收進(jìn)來的報文少于預(yù)定個數(shù),則直接退出中斷。
全文摘要
本發(fā)明公開了一種報文快速轉(zhuǎn)發(fā)方法,包括按照預(yù)先設(shè)定的定時器中斷頻度啟動定時器中斷;在定時器中斷處理中,從網(wǎng)絡(luò)接口接收報文;如果接收到報文,則對報文進(jìn)行轉(zhuǎn)發(fā)處理;在對從網(wǎng)絡(luò)接口接收的報文進(jìn)行轉(zhuǎn)發(fā)處理后,判斷當(dāng)前時刻是否到達(dá)定時器中斷處理的預(yù)定結(jié)束時刻,如果到達(dá)定時器中斷處理的結(jié)束時刻,則結(jié)束中斷處理。本發(fā)明可不依賴于操作系統(tǒng),保證快速轉(zhuǎn)發(fā)性能。而且,本發(fā)明對CPU的占用可預(yù)期,不與網(wǎng)絡(luò)上的報文流量相關(guān),可靠性高。
文檔編號G06F9/46GK1770730SQ20041008715
公開日2006年5月10日 申請日期2004年11月1日 優(yōu)先權(quán)日2004年11月1日
發(fā)明者吳向斌 申請人:華為技術(shù)有限公司