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