一種報文接收方法及網絡設備的制造方法
【技術領域】
[0001] 本發明實施例涉及通信技術領域,尤其涉及一種報文接收方法及網絡設備。
【背景技術】
[0002] 隨著多核技術的發展,具有多個中央處理器(Central Processing Unit,CPU)內 核的網絡設備,可以通過分流功能將從外部設備接收到的數據報文分流到接收接口的多個 接收隊列中,使得每個CPU內核對應接收一個接收隊列的報文,從而達到多核接收同一接 收接口的報文的目的。通常,每個接收隊列對應一種類型的報文,當某種類型報文的流量持 續突發時,通過單個CPU內核從當前接收隊列接收該類型的報文時,容易出現丟包現象,很 難滿足網絡設備對接收性能的要求,因而需要通過多核來接收該接收隊列的報文。
[0003] 任一 CPU內核從某一接收隊列接收報文時都需要訪問該接收隊列的緩沖區描述 符(Buffer Description,BD)構成的BD環數據結構,該BD環屬于臨界資源,可以通過自旋 鎖進行保護。在任一 CPU內核訪問BD環之前,可以通過獲取自旋鎖來阻止其它CPU內核對 BD環的訪問,并在完成報文接收后釋放自旋鎖,以解除對BD環的鎖定。為了加快報文接收, 網絡設備通常采用軟件輪詢方式從接收隊列接收報文,在該種情況下,參見圖1所示的多 核競爭自旋鎖的示意圖,各CPU內核通過競爭自旋鎖來訪問BD環以從接收隊列接收報文; 并且,當其中一個CPU內核獲取到自旋鎖并進行報文接收時,其它CPU內核仍會頻繁地競爭 自旋鎖,從而使得系統資源開銷較大,導致系統性能下降。
【發明內容】
[0004] 本發明實施例提供一種報文接收方法及網絡設備,能夠解決現有技術中通過多個 CPU內核從同一接收隊列接收報文時,由于頻繁競爭自旋鎖導致的系統資源開銷大,系統性 能下降的問題。
[0005] 為達到上述目的,本發明的實施例采用如下技術方案:
[0006] 第一方面,提供一種報文接收方法,網絡設備的中央處理器CPU內核包括宿主核 和輔助核,任一報文接收隊列對應一個宿主核和至少一個輔助核,所述方法包括:
[0007] 通過所述宿主核從所述接收隊列接收報文,所述宿主核持有自旋鎖;
[0008] 在所述宿主核完成本輪報文的接收并進行報文處理時,若確定滿足預設條件,則 由所述輔助核競爭持有所述自旋鎖,并通過獲取到所述自旋鎖的輔助核從所述接收隊列接 收報文;
[0009] 在所述宿主核完成報文處理后,由所述宿主核優先競爭并持有所述自旋鎖。
[0010] 結合第一方面,在第一方面的第一種可能的實現方式中,所述確定滿足預設條件 包括:
[0011] 預設參考值;
[0012] 根據所述宿主核本輪從所述接收隊列接收到的報文數量確定檔位;
[0013] 根據所述檔位以及狀態機的當前狀態,確定所述狀態機的將來狀態并結合預設步 長機制調整所述參考值;
[0014] 若所述參考值落入預設范圍,則確定滿足預設條件。
[0015] 結合第一方面的第一種可能的實現方式,在第一方面的第二種可能的實現方式 中,所述根據所述宿主核本輪從所述接收隊列接收到的報文數量確定檔位包括:
[0016]當所述宿主核本輪從所述接收隊列接收到的報文數量小于第一預設值時,確定所 述檔位為第一檔;
[0017]當所述宿主核本輪從所述接收隊列接收到的報文數量大于或者等于所述第一預 設值且小于第二預設值時,確定所述檔位為第二檔;
[0018]當所述宿主核本輪從所述接收隊列接收到的報文數量大于或者等于所述第二預 設值且小于第三預設值時,確定所述檔位為第三檔;
[0019]當所述宿主核本輪從所述接收隊列接收到的報文數量大于或者等于第三預設值 且小于或者等于第四預設值時,確定所述檔位為第四檔。
[0020] 結合第一方面的第二種可能的實現方式,在第一方面的第三種可能的實現方式 中,所述根據所述宿主核本輪從所述接收隊列接收到的報文數量確定的檔位以及狀態機的 當前狀態,確定所述狀態機的將來狀態包括:
[0021] 當所述檔位為第一檔時,確定所述狀態機的將來狀態為空閑;
[0022] 當所述檔位為第二檔時,確定所述狀態機的將來狀態與所述狀態機的當前狀態一 致;
[0023]當所述檔位為第三檔時,若所述狀態機的當前狀態為繁忙,則確定所述狀態機的 將來狀態為趨向空閑;若所述狀態機的當前狀態為保持、空閑、趨向繁忙或趨向空閑,則確 定所述狀態機的當前狀態為空閑;
[0024]當所述檔位為第四檔時,若所述狀態機的當前狀態為空閑,則確定所述狀態機的 將來狀態為趨向繁忙;若所述狀態機的當前狀態為保持、繁忙、趨向繁忙、或趨向空閑,則確 定所述狀態機的將來狀態為繁忙。
[0025] 結合第一方面的第二或第三種可能的實現方式,在第一方面的第四種可能的實現 方式中,根據所述宿主核本輪從所述接收隊列接收到的報文數量確定的檔位以及狀態機的 當前狀態,并結合預設步長機制調整所述參考值包括:
[0026]當所述檔位為第一檔時,將所述參考值增加第一預設步長;
[0027]當所述檔位為第二檔時,保持所述參考值不變;
[0028]當所述檔位為第三檔時,若所述狀態機的當前狀態為保持或空閑,則將所述參考 值增加第二預設步長;若所述狀態機的當前狀態為繁忙、趨向繁忙或趨向空閑,則保持所述 參考值不變;
[0029]當所述檔位為第四檔時,若所述狀態機的當前狀態為保持、繁忙或趨向繁忙,則將 所述參考值減小第三預設步長;若所述狀態機的當前狀態為空閑或趨向空閑,則保持所述 參考值不變;
[0030] 對所述參考值進行校正;
[0031] 其中,所述第一預設步長、所述第二預設步長和所述第三預設步長為正數,所述第 四預設步長大于所述第一預設步長和所述第二預設步長。
[0032] 第二方面,提供一種網絡設備,所述網絡設備的中央處理器CPU內核包括宿主核 和輔助核,任一報文接收隊列對應一個宿主核和至少一個輔助核,所述網絡設備包括:
[0033] 接收單元,用于通過所述宿主核從所述接收隊列接收報文,所述宿主核持有自旋 鎖;
[0034] 處理單元,用于在所述宿主核完成本輪報文的接收并進行報文處理時,若確定滿 足預設條件,則由所述輔助核競爭持有所述自旋鎖,并通過獲取到所述自旋鎖的輔助核從 所述接收隊列接收報文;
[0035] 所述處理單元還用于,在所述宿主核完成報文處理后,由所述宿主核優先競爭并 持有所述自旋鎖。
[0036] 結合第二方面,在第二方面的第一種可能的實現方式中,所述處理單元具體用 于:
[0037] 預設參考值;
[0038] 根據所述宿主核本輪從所述接收隊列接收到的報文數量確定檔位;
[0039] 根據所述檔位以及狀態機的當前狀態,確定所述狀態機的將來狀態并結合預設步 長機制調整所述參考值;
[0040] 若所述參考值落入預設范圍,則確定滿足預設條件。
[0041] 結合第二方面的第一種可能的實現方式,在第二方面的第二種可能的實現方式 中,所述處理單元具體用于:
[0042]當所述宿主核本輪從所述接收隊列接收到的報文數量小于第一預設值時,確定所 述檔位為第一檔;
[0043]當所述宿主核本輪從所述接收隊列接收到的報文數量大于或者等于所述第一預 設值且小于第二預設值時,確定所述檔位為第二檔;
[0044]當所述宿主核本輪從所述接收隊列接收到的報文數量大于或者等于所述第二預 設值且小于第三預設值時,確定所述檔位為第三檔;
[0045]當所述宿主核本輪從所述接收隊列接收到的報文數量大于或者等于第三預設值 且小于或者等于第四預設值時,確定所述檔位為第四檔。
[0046] 結合第二方面的第二種可能的實現方式,在第二方面的第三種可能的實現方式 中,所述處理單元具體用于:
[0047]當所述檔位為第一檔時,確定所述狀態機的將來狀態為空閑;
[0048]當所述檔位為第二檔時,確定所述狀態機的將來狀態與所述狀態機的當前狀態一 致;
[0049]當所述檔位為第三檔時,若所述狀態機的當前狀態為繁忙,則確定所述狀態機的 將來狀態為趨向空閑;若所述狀態機的當前狀態為保持、空閑、趨向繁忙或趨向空閑,則確 定所述狀態機的當前狀態為空閑;
[0050]當所述檔位為第四檔時,若所述狀態機的當前狀態為空閑,則確定所述