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