狀態(tài)機(jī)的 將來狀態(tài)為趨向繁忙;若所述狀態(tài)機(jī)的當(dāng)前狀態(tài)為保持、繁忙、趨向繁忙、或趨向空閑,則確 定所述狀態(tài)機(jī)的將來狀態(tài)為繁忙。
[0051] 結(jié)合第二方面的第二種或第三種可能的實現(xiàn)方式,在第二方面的第四種可能的實 現(xiàn)方式中,所述處理單元具體用于:
[0052]當(dāng)所述檔位為第一檔時,將所述參考值增加第一預(yù)設(shè)步長;
[0053]當(dāng)所述檔位為第二檔時,保持所述參考值不變;
[0054]當(dāng)所述檔位為第三檔時,若所述狀態(tài)機(jī)的當(dāng)前狀態(tài)為保持或空閑,則將所述參考 值增加第二預(yù)設(shè)步長;若所述狀態(tài)機(jī)的當(dāng)前狀態(tài)為繁忙、趨向繁忙或趨向空閑,則保持所述 參考值不變;
[0055]當(dāng)所述檔位為第四檔時,若所述狀態(tài)機(jī)的當(dāng)前狀態(tài)為保持、繁忙或趨向繁忙,則將 所述參考值減小第三預(yù)設(shè)步長;若所述狀態(tài)機(jī)的當(dāng)前狀態(tài)為空閑或趨向空閑,則保持所述 參考值不變;
[0056] 對所述參考值進(jìn)行校正;
[0057] 其中,所述第一預(yù)設(shè)步長、所述第二預(yù)設(shè)步長和所述第三預(yù)設(shè)步長為正數(shù),所述第 四預(yù)設(shè)步長大于所述第一預(yù)設(shè)步長和所述第二預(yù)設(shè)步長。
[0058] 本發(fā)明實施例提供一種報文接收方法及網(wǎng)絡(luò)設(shè)備,當(dāng)網(wǎng)絡(luò)設(shè)備通過多個CPU內(nèi)核 從同一接收隊列接收報文時,持有自旋鎖的宿主核從接收隊列接收報文,當(dāng)宿主核完成本 輪報文的接收并進(jìn)行報文處理時,若滿足預(yù)設(shè)條件,則允許輔助核通過競爭持有自旋鎖從 接收隊列接收報文,并在宿主核完成報文處理后,由宿主核優(yōu)先競爭并持有自旋鎖。因此, 與現(xiàn)有技術(shù)中無論是否有CPU內(nèi)核獲取到自旋鎖各CPU內(nèi)核均頻繁競爭自旋鎖不同,本發(fā) 明實施例中的輔助核只有在宿主核處理報文期間且滿足預(yù)設(shè)條件的情況下,才會出現(xiàn)輔助 核競爭自旋鎖的情況,而在其它情況下均不會競爭自旋鎖,因而能解決現(xiàn)有技術(shù)中通過多 核CPU從同一接收隊列接收報文時,由于多核頻繁競爭自旋鎖導(dǎo)致的系統(tǒng)資源開銷大,系 統(tǒng)性能下降的問題。
【附圖說明】
[0059] 為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中 所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實 施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖 獲得其他的附圖。
[0060]圖1為現(xiàn)有技術(shù)中多核競爭自旋鎖的示意圖;
[0061] 圖2a)為本發(fā)明實施例提供的一種BD環(huán)結(jié)構(gòu)示意圖;
[0062] 圖2b)為本發(fā)明實施例提供的另一種BD環(huán)結(jié)構(gòu)示意圖;
[0063] 圖2c)為本發(fā)明實施例提供的又一種BD環(huán)結(jié)構(gòu)示意圖;
[0064]圖3為本發(fā)明實施例提供的一種報文接收方法流程示意圖;
[0065]圖4為本發(fā)明實施例提供的多核競爭自旋鎖的示意圖;
[0066]圖5為本發(fā)明實施例提供的一種狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換示意圖;
[0067]圖6為本發(fā)明實施例提供的一種網(wǎng)絡(luò)設(shè)備結(jié)構(gòu)示意圖。
【具體實施方式】
[0068] 下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;?本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護(hù)的范圍。
[0069]自旋鎖:為了保護(hù)多個CPU內(nèi)核間的共享資源而提出的一種鎖機(jī)制,通過讓鎖獲 取者執(zhí)行一段緊湊的循環(huán)指令,從而不斷地查詢鎖持有者是否已經(jīng)釋放自旋鎖。自旋鎖的 特點是不會引起自旋鎖獲取者的睡眠,且使用自旋鎖的開銷比較大。
[0070] 鎖競爭:多個核為了獲取鎖而不斷地查詢鎖持有者是否已經(jīng)釋放自旋鎖的過程, 該過程使得系統(tǒng)資源的開銷很大,對系統(tǒng)的性能影響比較明顯。
[0071] BD環(huán):一種常用的高級軟硬件數(shù)據(jù)交互的數(shù)據(jù)結(jié)構(gòu)。這里以長度為8的BD環(huán)為 例,對網(wǎng)絡(luò)設(shè)備通過某個CPU內(nèi)核從接收隊列的BD環(huán)接收報文的流程進(jìn)行說明:
[0072] I、網(wǎng)絡(luò)設(shè)備的硬件設(shè)計了分別由硬件和軟件操作BD環(huán)的指針:HEAD(硬件使用) 和TAIL(軟件使用),初始狀態(tài)時線路上沒有報文,BD環(huán)為空,HEAD和TAIL都指向第0個 BD,如圖2a)所示。
[0073] II、網(wǎng)絡(luò)中的報文通過網(wǎng)絡(luò)設(shè)備的網(wǎng)卡到達(dá)某一接收隊列時,由硬件將合法的報 文直接存儲(Direct Memory Access,DMA)至內(nèi)存,將對應(yīng)的BD狀態(tài)置為滿,并向前移動 HEAD指針,如圖2b)所示。直到HEAD指針遇到TAIL指針時,硬件認(rèn)為沒有空的BD 了,此時 停止將報文DMA到內(nèi)存。
[0074] III、軟件進(jìn)入一次報文接收循環(huán),該循環(huán)的操作為從TAIL處開始遍歷BD環(huán),將被 硬件置為滿的BD指向的報文收走,并將對應(yīng)的BD置為空,同時將TAIL指針向前移動。當(dāng) TAIL指針遇到空BD時即認(rèn)為沒有報文可以接收,如圖2c)所示。
[0075] IV、通過上述軟硬件交互,可以實現(xiàn)持續(xù)的收包。但當(dāng)報文量很大的時候,硬件DMA 的速度很快,TAIL指針將一直遇不到空BD,從而會一直持續(xù)的在BD環(huán)上收包,此時可能會 引發(fā)死循環(huán)。為了防止死循環(huán)的發(fā)生,通常需要一個合理的預(yù)設(shè)閾值T (該預(yù)設(shè)閾值T是一 個經(jīng)驗值,不同系統(tǒng)對應(yīng)的預(yù)設(shè)閾值可以不同,具體可以根據(jù)實際情況進(jìn)行設(shè)置),軟件檢 查收包數(shù)目達(dá)到閾值時則停止接收,完成一輪報文的接收,并進(jìn)行報文處理,并在報文處理 完成后進(jìn)行下一輪的報文接收。
[0076] 本發(fā)明實施例提供一種報文接收方法,網(wǎng)絡(luò)設(shè)備的中央處理器CPU內(nèi)核包括宿主 核和輔助核,任一報文接收隊列對應(yīng)一個宿主核和至少一個輔助核,參見圖3,該方法可以 包括:
[0077] 101、網(wǎng)絡(luò)設(shè)備通過宿主核從接收隊列接收報文,宿主核持有自旋鎖。
[0078] 其中,網(wǎng)絡(luò)設(shè)備可以是路由器、交換機(jī)、網(wǎng)關(guān)等通信網(wǎng)絡(luò)中的各種設(shè)備。宿主核是 網(wǎng)絡(luò)設(shè)備多個CPU內(nèi)核中的一個,網(wǎng)絡(luò)設(shè)備可以給每個接收隊列綁定一個宿主核。對于某 一接收隊列來說,宿主核以外的所有其它CPU內(nèi)核均為該接收隊列的輔助核。本發(fā)明實施 例以下內(nèi)容中的接收隊列均為綁定宿主核后的接收隊列。自旋鎖用于保護(hù)接收隊列的BD 環(huán)(臨界資源),宿主核通過持有的自旋鎖優(yōu)先訪問接收隊列的BD環(huán),從而優(yōu)先從接收隊列 接收報文。宿主核從接收隊列接收報文的過程可以參見上述步驟I-IV中的具體描述。
[0079] 102、在宿主核完成本輪報文的接收并進(jìn)行報文處理時,若確定滿足預(yù)設(shè)條件,則 網(wǎng)絡(luò)設(shè)備由輔助核競爭持有自旋鎖,并通過獲取到自旋鎖的輔助核從接收隊列接收報文。
[0080] 根據(jù)上述步驟I-IV中的描述可知,宿主核完成本輪報文的接收可能包括以下兩 種情況:TAIL指針遇到空BD,或者,已接收報文數(shù)量大于或者等于預(yù)設(shè)閾值T,則結(jié)束本輪 報文的接收。在宿主核完成本輪報文的接收后,可以對接收到的報文進(jìn)行處理。
[0081] 宿主核完成本輪報文的接收并進(jìn)行報文處理時,可以確定是否滿足預(yù)設(shè)條件,若 滿足預(yù)設(shè)條件,則在宿主核進(jìn)行報文處理期間,可以由輔助核競爭持有自旋鎖,并通過獲取 到自旋鎖的輔助核從接收隊列接收報文;若不滿足預(yù)設(shè)條件,則輔助核不會像現(xiàn)有技術(shù)中 那樣競爭自旋鎖,從而節(jié)省了系統(tǒng)資源的開銷。
[0082]其中,預(yù)設(shè)條件可以根據(jù)需要進(jìn)行設(shè)定,本發(fā)明實施例不做具體限定。
[0083] 103、在宿主核完成報文處理后,網(wǎng)絡(luò)設(shè)備由宿主核優(yōu)先競爭并持有自旋鎖。
[0084] 在宿主核完成報文處理后,由宿主核優(yōu)先競爭并持有自旋鎖,從而優(yōu)先通過宿主 核進(jìn)行下一輪報文接收,具體可以包括以下兩種情況:
[0085] 情況1 :若在宿主核處理報文期間,輔助核通過競爭自旋鎖從接收隊列接收報文, 則在宿主核完成報文處理后,由宿主核優(yōu)先競爭并持有自旋鎖,從而優(yōu)先通過宿主核進(jìn)行 下一輪報文的接收。
[0086] 情況2:若在宿主核處理報文期間,輔助核沒有競爭自旋鎖,則在宿主核完成報文 處理后,宿主核仍然持有自旋鎖,并進(jìn)行下一輪報文的接收。
[0087] 通常,CPU內(nèi)核從接收隊列接收報文時持有自旋鎖,完成本輪報文接收后釋放自旋 鎖。在本發(fā)明實施例中,宿主核可以采用現(xiàn)有技術(shù)中的機(jī)制釋放自旋鎖,并在宿主核完成報 文處理后,網(wǎng)絡(luò)設(shè)備由宿主核優(yōu)先競爭并持有自旋鎖。當(dāng)然,在本發(fā)明實施例中,宿主核也 可以一直持有自旋鎖直到滿足預(yù)設(shè)條件時才釋放自旋鎖,這樣以來,在情況2中當(dāng)宿主核 完成報文處理后,由于宿主核并未釋放自旋鎖因而自旋鎖仍由宿主核持有。
[0088