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