国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)及方法

      文檔序號:6548065閱讀:163來源:國知局
      多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)及方法
      【專利摘要】本發(fā)明公開了一種多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)及方法,該方法采用控制面和數(shù)據(jù)面相分離的軟件架構(gòu)模型,通過內(nèi)核線程實(shí)現(xiàn)數(shù)據(jù)面操作,利用內(nèi)核函數(shù)綁定數(shù)據(jù)面的內(nèi)核線程到單獨(dú)的CPU,最后利用內(nèi)核參數(shù)屏蔽其他程序,以防占用數(shù)據(jù)面CPU資源,利用上述三點(diǎn)實(shí)現(xiàn)控制面和數(shù)據(jù)面相分離的網(wǎng)絡(luò)設(shè)備軟件架構(gòu)。根據(jù)本發(fā)明,可以在保證各個數(shù)據(jù)面執(zhí)行效率的前提下,提高報文處理能力和設(shè)備吞吐性能,且方法實(shí)現(xiàn)簡單,通用性強(qiáng),靈活穩(wěn)定,便于移植。
      【專利說明】多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)及方法

      【技術(shù)領(lǐng)域】
      [0001] 本發(fā)明涉及到一種多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)及方法,特別的,涉及到控制 面和數(shù)據(jù)面相分離的網(wǎng)絡(luò)設(shè)備軟件架構(gòu),進(jìn)而能夠提高報文處理和設(shè)備吞吐性能的方法。

      【背景技術(shù)】
      [0002] 隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,對防火墻技術(shù)的要求也越來越高,防火墻設(shè)備的處理器由 單核處理器已經(jīng)發(fā)展到多核處理器,如Broadcom公司的XLP832處理器,為8核MIPS處理 器,每個核由4個硬件線程,這樣可以理解為32核處理器。如何合理的使用多核處理器資 源,充分發(fā)揮多核處理器的優(yōu)勢,盡量提高設(shè)備的吞吐性能,已成為各個廠商非常關(guān)注的問 題。
      [0003] 傳統(tǒng)的防火墻設(shè)備對多核處理器的使用多采用控制和數(shù)據(jù)轉(zhuǎn)發(fā)分離的模型,比如 32核處理器,各個核編號為CPUO -CPU31,那么幾個CPU專門做控制相關(guān)的處理,如命令配 置、路由維護(hù)、地址管理、網(wǎng)頁展示等業(yè)務(wù),這幾個CPU稱之為"控制平面",剩下的CPU全部 做數(shù)據(jù)轉(zhuǎn)發(fā)處理,如報文收發(fā),查路由,VPN,攻擊防護(hù)等業(yè)務(wù),這幾個CPU稱之為"數(shù)據(jù)平 面"。通過這種控制面和數(shù)據(jù)面相分離的模型,來提高報文處理的性能。
      [0004] 但這種控制面和數(shù)據(jù)面分離的模型,通常實(shí)現(xiàn)都很復(fù)雜,需要很大的軟件編碼去 實(shí)現(xiàn)上述模型,也需要很強(qiáng)的技術(shù)積累。同時,因?yàn)橐獏^(qū)分處理各個處理器,需要對處理器 做很多強(qiáng)相關(guān)的底層編碼,如果設(shè)備換了一種處理器后,要想實(shí)現(xiàn)這種控制面-數(shù)據(jù)面模 型,可能還需要重新編碼,費(fèi)時費(fèi)力。
      [0005] 因此,有必要在保證報文處理能力和設(shè)備吞吐性能的前提下,提供一種控制面和 數(shù)據(jù)面實(shí)現(xiàn)方法簡單、通用性強(qiáng)的多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)及方法。


      【發(fā)明內(nèi)容】

      [0006] 本發(fā)明的目的是提供一種多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)及方法,其采用控制面 和數(shù)據(jù)面相分離的控制架構(gòu),通過內(nèi)核線程實(shí)現(xiàn)數(shù)據(jù)面操作,利用內(nèi)核函數(shù)綁定數(shù)據(jù)面的 內(nèi)核線程到單獨(dú)的CPU,最后利用內(nèi)核參數(shù)屏蔽其他程序,以防占用數(shù)據(jù)面CPU資源,實(shí)現(xiàn) 控制面和數(shù)據(jù)面相分離的網(wǎng)絡(luò)設(shè)備控制系統(tǒng)及方法。根據(jù)本發(fā)明,可以在保證各個數(shù)據(jù)面 執(zhí)行效率的前提下,提高報文處理和設(shè)備吞吐性能,且方法實(shí)現(xiàn)簡單,通用性強(qiáng),靈活穩(wěn)定, 便于移植。
      [0007] 根據(jù)本發(fā)明的一個方面,提供了一種多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng),包括:控制 面單元11,用于提供系統(tǒng)綜合控制;數(shù)據(jù)面單元12,用于控制數(shù)據(jù)面的線程運(yùn)行;用戶態(tài)單 元13,用于在指定的CPU上運(yùn)行用戶態(tài)的線程,以避免這些線程干擾數(shù)據(jù)面的CPU。
      [0008] 其中,所述控制面單元11以Linux的SMP方式運(yùn)行于內(nèi)核態(tài),控制命令配置、路由 維護(hù)、地址管理、網(wǎng)頁展示業(yè)務(wù)的調(diào)度分配;所述數(shù)據(jù)面單元12運(yùn)行于內(nèi)核態(tài),其中的多個 內(nèi)核線程分別綁定在不同的CPU上運(yùn)行;以及所述用戶態(tài)單元13的所有線程在所述控制面 單元11指定的CPU上執(zhí)行。
      [0009] 優(yōu)選的,所述數(shù)據(jù)面單元12還包括:內(nèi)核線程控制模塊100,用于創(chuàng)建并設(shè)置數(shù)據(jù) 面的線程;數(shù)據(jù)面執(zhí)行模塊200,用于執(zhí)行數(shù)據(jù)面的線程;以及進(jìn)程隔離模塊300,用于隔離 數(shù)據(jù)面的線程,以隔離控制面和用戶態(tài)的線程,使其不會在數(shù)據(jù)面的CPU上運(yùn)行。
      [0010] 優(yōu)選的,所述內(nèi)核線程控制模塊100進(jìn)一步包括:線程創(chuàng)建模塊110,用于通過 kthread_create函數(shù)創(chuàng)建線程;和線程控制模塊120,用于通過kthread_bind函數(shù)控制線 程運(yùn)行于特定CPU上。
      [0011] 優(yōu)選的,所述數(shù)據(jù)面執(zhí)行模塊200通過kthread_create函數(shù)創(chuàng)建數(shù)據(jù)面的執(zhí)行函 數(shù)dataplane_process,倉ij建方式表示為:
      [0012] for (cpu = dp.-cpu-start; cpu < dp -cpu -end; cpu++) { dp-thread [cpu」=kihread-creaie (datap 1ane_process, datap!ane_dat.a Lcpu], "dalaplane/%d", cpu); if (TS-ERR (dp-thread [cpu])) return NOTIFY-BAD; k lhread-bind (dp_ thread[cpu], cpu); wake - up-process (dp-thread[cpu]); }
      [0013] 其中,dataplane_process表示數(shù)據(jù)面要執(zhí)行的線程,參數(shù)dp_cpu_start表示數(shù) 據(jù)面線程運(yùn)行的起始CPU,參數(shù)dp_cpu_end表示數(shù)據(jù)面線程運(yùn)行的結(jié)尾CPU, dataplane_ data[cpu]為該cpu私有的數(shù)據(jù),用于dataplane_proces內(nèi)核線程執(zhí)行時該內(nèi)核線程使 用;dataplane/x為數(shù)據(jù)面內(nèi)核線程的名稱,dp_thread[cpu]用于存儲內(nèi)核線程創(chuàng)建后的 結(jié)構(gòu)。
      [0014] 優(yōu)選的,所述進(jìn)程隔離模塊300通過isolcpus函數(shù)指定數(shù)據(jù)面的線程只運(yùn)行于規(guī) 定范圍的CPU。
      [0015] 優(yōu)選的,所述kthread_create函數(shù)表示為:
      [0016] struct lask-strucl *kihread-creale (int (*ihreadfn) (void *dala), void *daia, const char namefmt [], ..·),
      [0017] 上述函數(shù)的參數(shù)含義為:
      [0018] threadfn:內(nèi)核線程的執(zhí)行函數(shù),
      [0019] data :傳遞給threadfn函數(shù)的數(shù)據(jù)指針,
      [0020] namefmt :內(nèi)核線程的別名。
      [0021] 優(yōu)選的,所述kthread_bind函數(shù)表示為:
      [0022] kthread_bind(dp_thread[cpu],cpu),
      [0023] 其中,dp_thread[cpu]表示數(shù)據(jù)面單元中存儲的內(nèi)核線程,綁定在由變量cpu指 定的cpu上執(zhí)行。
      [0024] 根據(jù)本發(fā)明的另一方面,提供了一種多核處理器網(wǎng)絡(luò)設(shè)備的控制方法,包括下 述步驟:步驟S101,在控制面調(diào)度控制面線程;步驟S102,在數(shù)據(jù)面創(chuàng)建內(nèi)核線程;步驟 S103,控制數(shù)據(jù)面的預(yù)定線程運(yùn)行于特定CPU ;以及步驟S104,執(zhí)行數(shù)據(jù)面的線程。
      [0025] 優(yōu)選的,在步驟S102之后還包括下述步驟:步驟S105,隔離數(shù)據(jù)面的線程,使其運(yùn) 行在指定范圍的CPU上;步驟S106,喚醒線程。
      [0026] 本發(fā)明的多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)及方法,采用控制面和數(shù)據(jù)面相分離 的控制架構(gòu),通過內(nèi)核線程實(shí)現(xiàn)數(shù)據(jù)面操作,利用內(nèi)核函數(shù)綁定數(shù)據(jù)面的內(nèi)核線程到單獨(dú) 的CPU,最后利用內(nèi)核參數(shù)屏蔽其他程序,以防占用數(shù)據(jù)面CPU資源,實(shí)現(xiàn)控制面和數(shù)據(jù)面 相分離的控制目的。根據(jù)本發(fā)明,可以在保證各個數(shù)據(jù)面執(zhí)行效率的前提下,提高報文處理 和設(shè)備吞吐性能,且方法實(shí)現(xiàn)簡單,通用性強(qiáng),靈活穩(wěn)定,便于移植。

      【專利附圖】

      【附圖說明】
      [0027] 圖1顯示了現(xiàn)有技術(shù)中一種的多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)結(jié)構(gòu)示意圖;
      [0028] 圖2顯示了現(xiàn)有技術(shù)中另一種多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)的結(jié)構(gòu)示意圖;
      [0029] 圖3顯示了本發(fā)明優(yōu)選實(shí)施例的多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)的結(jié)構(gòu)示意圖;
      [0030] 圖4顯示了本發(fā)明的多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)中數(shù)據(jù)面單元的內(nèi)部結(jié)構(gòu) 示意圖;
      [0031] 圖5顯示了本發(fā)明優(yōu)選實(shí)施例的多核處理器網(wǎng)絡(luò)設(shè)備的控制方法的流程圖;
      [0032] 圖6顯示了本發(fā)明優(yōu)選實(shí)施例的多核處理器網(wǎng)絡(luò)設(shè)備的控制方法的流程示意圖。

      【具體實(shí)施方式】
      [0033] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明了,下面結(jié)合【具體實(shí)施方式】并參 照附圖,對本發(fā)明進(jìn)一步詳細(xì)說明。應(yīng)該理解,這些描述只是示例性的,而并非要限制本發(fā) 明的范圍。此外,在以下說明中,省略了對公知結(jié)構(gòu)和技術(shù)的描述,以避免不必要地混淆本 發(fā)明的概念。
      [0034] 本發(fā)明的目的是提供一種多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)及方法,其通過控制面 和數(shù)據(jù)面相分離的軟件架構(gòu)模型,采用內(nèi)核線程實(shí)現(xiàn)數(shù)據(jù)面操作,利用內(nèi)核函數(shù)綁定數(shù)據(jù) 面的內(nèi)核線程到單獨(dú)的CPU,最后利用內(nèi)核參數(shù)屏蔽其他程序,以防占用數(shù)據(jù)面CPU資源。 該方法可以在保證各個數(shù)據(jù)面執(zhí)行效率的前提下,提高報文處理和設(shè)備吞吐性能,且方法 實(shí)現(xiàn)簡單,通用性強(qiáng),靈活穩(wěn)定,便于移植。
      [0035] 圖1顯示了現(xiàn)有技術(shù)中的多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)結(jié)構(gòu)示意圖。
      [0036] 如圖1所示,在現(xiàn)有技術(shù)的一種多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)中,采用Linux操 作系統(tǒng)和非Linux操作系統(tǒng)分別實(shí)現(xiàn)控制面和數(shù)據(jù)面。其中,控制面的CPU0, 1運(yùn)行Linux 內(nèi)核,Linux內(nèi)核以SMP方式運(yùn)行于CPU0, 1。另一方面,數(shù)據(jù)面的CPU2 - CPU31等其他CPU 運(yùn)行其他的操作系統(tǒng)0S,報文直接由CPU2-CPU31收發(fā)處理。
      [0037] 可見,在上述現(xiàn)有技術(shù)的控制系統(tǒng)中,控制面采用Linux操作系統(tǒng),數(shù)據(jù)面采用另 外單獨(dú)的操作系統(tǒng)或者不采用操作系統(tǒng),直接形成為一個死循環(huán)的函數(shù),永不退出,這個函 數(shù)一直輪詢收包,進(jìn)行收包-處理操作。這種實(shí)現(xiàn)需單獨(dú)對數(shù)據(jù)面的CPU做初始化操作,如 CPU cache初始化,中斷異常初始化,TLB映射等,需要耗費(fèi)大量的人力勞動和程序代碼,如 果后續(xù)處理器換了,這種模型還需重新對數(shù)據(jù)面進(jìn)行適配。
      [0038] 上述現(xiàn)有技術(shù)的主要缺陷在于,需要單獨(dú)對數(shù)據(jù)面CPU進(jìn)行初始化,通用性不強(qiáng), 如果后續(xù)處理器更換,還行重新對數(shù)據(jù)面進(jìn)行移植,并且代碼修改量很大。
      [0039] 圖2顯示了現(xiàn)有技術(shù)中另一種多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)的結(jié)構(gòu)示意圖。
      [0040] 如圖2所示,在現(xiàn)有技術(shù)的另一種多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)中,控制面和 數(shù)據(jù)面均采用Linux操作系統(tǒng)實(shí)現(xiàn)。具體的,全部處理器都運(yùn)行于Linux操作系統(tǒng),控制面 和數(shù)據(jù)面在用戶態(tài)實(shí)現(xiàn),控制面和數(shù)據(jù)面可以是一個程序的多個線程,也可以是多進(jìn)程方 式。數(shù)據(jù)面多采用多線程Pthread模型,每個數(shù)據(jù)面都綁定到專門的CPU,這種系統(tǒng)方案需 將內(nèi)核的收發(fā)包屏蔽,用戶態(tài)的數(shù)據(jù)面負(fù)責(zé)收發(fā)包,需要修改網(wǎng)卡驅(qū)動,將網(wǎng)卡收發(fā)包在用 戶態(tài)實(shí)現(xiàn),這樣方案需要很大的代碼修改了,對每種網(wǎng)卡都得重新適配用戶態(tài)收發(fā)包。
      [0041] 圖2的系統(tǒng)架構(gòu)中,Linux內(nèi)核運(yùn)行于所有的CPU上,數(shù)據(jù)面和控制面作為用戶 態(tài)的程序運(yùn)行于Linux系統(tǒng),控制面和數(shù)據(jù)面常是一個大程序,數(shù)據(jù)面作為該程序的線程 執(zhí)行。報文收發(fā)直接由用戶態(tài)的數(shù)據(jù)面線程收發(fā),即數(shù)據(jù)面線程直接和網(wǎng)卡驅(qū)動打交道, Linux內(nèi)核不處理報文收發(fā)。
      [0042] 上述現(xiàn)有技術(shù)的主要缺陷在于存在性能瓶頸。因?yàn)閿?shù)據(jù)面在用戶態(tài)實(shí)現(xiàn),用戶態(tài) 程序何時執(zhí)行時間上不易保證。另外,因?yàn)槭怯脩魬B(tài)收發(fā)包,需要適配網(wǎng)卡驅(qū)動到用戶態(tài), 需要很大的開發(fā)量。如果后續(xù)換一種網(wǎng)卡,還需重新適配網(wǎng)卡收發(fā)包到用戶態(tài)。網(wǎng)卡適配 這塊通用性不強(qiáng)。
      [0043] 圖3顯示了本發(fā)明優(yōu)選實(shí)施例的多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)的結(jié)構(gòu)示意圖。
      [0044] 如圖3所示,本發(fā)明優(yōu)選實(shí)施例的多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)包括以下三個 單元:控制面單元11,數(shù)據(jù)面單元12,用戶態(tài)單元13。其中,控制面單元11,數(shù)據(jù)面單元12 運(yùn)行于內(nèi)核態(tài),用戶態(tài)單元13運(yùn)行于用戶態(tài)。
      [0045] 控制面單元11用于提供系統(tǒng)綜合控制,例如命令配置、路由維護(hù)、地址管理、網(wǎng)頁 展示業(yè)務(wù)等。本發(fā)明中,控制面單元11優(yōu)選的運(yùn)行于Linux的SMP方式,即Linux負(fù)責(zé)控 制面線程的調(diào)度分配。
      [0046] 數(shù)據(jù)面單元12用于控制數(shù)據(jù)面的線程運(yùn)行,例如報文收發(fā),查看路由,VPN, 攻擊防護(hù)業(yè)務(wù)等。如圖3所示,數(shù)據(jù)面單元12設(shè)置有N個內(nèi)核線程,分別運(yùn)行在CPU Y - CPU(Y+N-1)上,不同的內(nèi)核線程綁定到不同的CPU上運(yùn)行,以確保數(shù)據(jù)面指定的CPU可 以專注于執(zhí)行數(shù)據(jù)面包處理。本發(fā)明中,數(shù)據(jù)面單元12優(yōu)選的運(yùn)行于內(nèi)核線程的方式,即 將數(shù)據(jù)面的處理都放到一個大函數(shù)里。
      [0047] 不同的內(nèi)核線程綁定不同的CPU,以確保數(shù)據(jù)面指定的CPU可以專注于執(zhí)行數(shù)據(jù) 包處理。通過內(nèi)核線程實(shí)現(xiàn)數(shù)據(jù)面操作,利用內(nèi)核函數(shù)綁定數(shù)據(jù)面的內(nèi)核線程到單獨(dú)的 CPU,最后利用內(nèi)核參數(shù)屏蔽其他程序,以防占用數(shù)據(jù)面CPU資源,實(shí)現(xiàn)控制面和數(shù)據(jù)面相 分離的多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)。
      [0048] 用戶態(tài)單元13用于在指定的CPU上運(yùn)行用戶態(tài)的線程,以避免這些線程干擾數(shù)據(jù) 面的CPU。
      [0049] 用戶態(tài)空間的模塊,如圖例中的WEBD(網(wǎng)頁服務(wù)器守護(hù)),Qugga(動態(tài)路由守護(hù) 進(jìn)程),CLI (命令配置程序)等模塊,只會在控制面單元11指定的CPU0--CPU X上執(zhí)行, 不會干擾數(shù)據(jù)面CPU。在控制面內(nèi),控制面內(nèi)核態(tài)程序的X個內(nèi)核線程,運(yùn)行在CPU0-- CPU(X-1)上;在數(shù)據(jù)面內(nèi),數(shù)據(jù)面程序綁定N個內(nèi)核線程,運(yùn)行在CPU Y--CPU(Y+N-1)上, 不同的內(nèi)核線程綁定不同的CPU,以確保數(shù)據(jù)面指定的CPU可以專注于執(zhí)行數(shù)據(jù)面包處理。 在用戶態(tài)內(nèi),用戶態(tài)空間的其他程序,如圖例中的WEBD(網(wǎng)頁服務(wù)器守護(hù)),Qugga(動態(tài)路 由守護(hù)進(jìn)程),CLI (命令配置程序)等模塊,只會在控制面指定的CPU0--CPU X上執(zhí)行, 不會干擾數(shù)據(jù)面CPU。
      [0050] 圖4顯示了本發(fā)明的多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)中數(shù)據(jù)面單元的內(nèi)部結(jié)構(gòu) 示意圖。
      [0051] 如圖4所示,本發(fā)明優(yōu)選實(shí)施例的數(shù)據(jù)面單元12包括下述模塊:內(nèi)核線程控制模 塊100、數(shù)據(jù)面執(zhí)行模塊200、進(jìn)程隔離模塊300。
      [0052] 內(nèi)核線程控制模塊100用于創(chuàng)建并設(shè)置數(shù)據(jù)面的線程,優(yōu)選的通過kthread函數(shù) 實(shí)現(xiàn),包括線程創(chuàng)建模塊110和線程控制模塊120。
      [0053] 線程創(chuàng)建模塊110用于創(chuàng)建內(nèi)核線程,優(yōu)選的通過kthread_create函數(shù)實(shí)現(xiàn),通 過kthread_create函數(shù)創(chuàng)建N個內(nèi)核線程,執(zhí)行數(shù)據(jù)面的處理線程。kthread_create函數(shù) 原型如下:
      [0054] struct task -struct *kthread-create (int (*threadfn) (void *data), void *dala, const chd namefnn [], ...)
      [0055] 上述函數(shù)的參數(shù)含義為:
      [0056] threadfn:內(nèi)核線程的執(zhí)行函數(shù)。
      [0057] data :傳遞給threadfn函數(shù)的數(shù)據(jù)指針
      [0058] namefmt :內(nèi)核線程的別名,方便管理記憶。
      [0059] 線程控制模塊120用于控制線程運(yùn)行于特定CPU上,優(yōu)選的通過kthread_bind函 數(shù),kthread_bind函數(shù)的作用是限定特定的內(nèi)核線程只能在特定的CPU上運(yùn)行,該內(nèi)核線 程不受內(nèi)核的任務(wù)CPU均衡機(jī)制管理,不會遷移到其他CPU上去執(zhí)行。即內(nèi)核線程和CPU 綁定。kthread_bind函數(shù)的模型如下:
      [0060] kthread_bind(dp_thread[cpu],cpu);
      [0061] 其中,dp_thread[cpu]表示數(shù)據(jù)面單元中存儲的內(nèi)核線程,只能綁定在由變量 cpu指定的cpu上執(zhí)行。Linux內(nèi)核有任務(wù)負(fù)載均衡調(diào)度機(jī)制,如果數(shù)據(jù)面內(nèi)核線程不綁定 CPU,則可能運(yùn)行的過程中遷移到其他CPU上去執(zhí)行了,這種CPU間切換需要重新刷新CPU 的cache,因而切換代價很大。通過上述線程控制模塊120,可以避免這種不確定的遷移和 切換。
      [0062] 數(shù)據(jù)面執(zhí)行模塊200用于執(zhí)行數(shù)據(jù)面的線程,優(yōu)選的采用執(zhí)行函數(shù)為dataplane_ process實(shí)現(xiàn)。數(shù)據(jù)面單元的所有線程處理都由dataplane_process函數(shù)實(shí)現(xiàn),該函數(shù)一直 循環(huán),直至系統(tǒng)停止。
      [0063] 在創(chuàng)建dataplane_process函數(shù)時,將dataplane_process函數(shù)作為參數(shù)填入到 kthread_create函數(shù)中,然后將數(shù)據(jù)面單元的數(shù)據(jù)指針填入data,名稱填入namefmt,然后 調(diào)用kthread_create,即可創(chuàng)建執(zhí)行函數(shù)為dataplane_process的內(nèi)核線程。創(chuàng)建該內(nèi)核 線程后,可以調(diào)用wake_up_process函數(shù)啟動內(nèi)核線程運(yùn)行。
      [0064] 例如,如果將數(shù)據(jù)面單元設(shè)置為運(yùn)行于CPU Y-CPU (Y+N-1)上,Y存于dp_cpu_ start, Y+N存于dp_cpu_end,則創(chuàng)建dataplane_process函數(shù)的代碼執(zhí)行如下:
      [0065] for (cpu = dp-cpu-start; cpu < dp-cpu-end; cpu++) { dp-thread [cpu] = k thread-.create (da tap lane-process, dataplane-data [cpu], "dataplane/°/〇d", cpu); if (TS-ERR(dp-thread [cpu])) return NOTIFY-.BAD; kthread-bind (dp-thread [cpu], cpu); wake - up-process (dp-thread [cpu]); }
      [0066] 其中,dataplane_process表示數(shù)據(jù)面要執(zhí)行的線程,dataplane_data[cpu]為該 cpu私有的數(shù)據(jù),用于dataplane_proces內(nèi)核線程執(zhí)行時該內(nèi)核線程使用;dataplane/x為 數(shù)據(jù)面內(nèi)核線程的名稱。dp_thread[cpu]用于存儲內(nèi)核線程創(chuàng)建后的結(jié)構(gòu),例如cpu4創(chuàng) 建的內(nèi)核線程,返回的結(jié)構(gòu)通過dp_thread[4]可以取到。wake_up_process函數(shù)執(zhí)行后,該 內(nèi)核線程就開始運(yùn)行了,即dataplane_pr 〇CeSS函數(shù)開始運(yùn)行了。
      [0067] 進(jìn)程隔離模塊300用于隔離數(shù)據(jù)面的線程,以限定用戶態(tài)單元13和其他線程不會 在數(shù)據(jù)面單元12上的CPU執(zhí)行,其優(yōu)選的通過isolcpus函數(shù)實(shí)現(xiàn)。isolcpus函數(shù)可以指 定數(shù)據(jù)面線程運(yùn)行的CPU起止范圍,該范圍內(nèi)的CPU,不受Linux內(nèi)核任務(wù)負(fù)載均衡機(jī)制的 管理,相當(dāng)于從Linux系統(tǒng)中"隔離"了。
      [0068] 例如,如果數(shù)據(jù)面單元設(shè)置為運(yùn)行在CPU Y-CPU(Y+N_1),并且要設(shè)置為使得這部 分CPU只運(yùn)行數(shù)據(jù)面單元的模塊,不運(yùn)行其他模塊,可以將isolcpus函數(shù)設(shè)置為:isolcpus =Y-(Y+N-1)。
      [0069] 上式中,例如Y為2, N為30,即限定為CPU2-CPU31運(yùn)行在數(shù)據(jù)面單元,則 isolcpus 參數(shù)為:isolcpus = 2-31。
      [0070] 進(jìn)一步,將該參數(shù)加入到內(nèi)核的啟動參數(shù)上,就可以將CPU Y-CPU(Y+N_1)從 Linux內(nèi)核的任務(wù)負(fù)載均衡的機(jī)制中隔離開,達(dá)到保護(hù)數(shù)據(jù)面CPU資源的目的,使數(shù)據(jù)面 CPU可以專注的執(zhí)行數(shù)據(jù)面內(nèi)核線程指定的報文收發(fā)任務(wù),不受干擾。
      [0071] 這樣,通過進(jìn)程隔離模塊300,除了強(qiáng)制指定在isolcpus上執(zhí)行的程序外,其他程 序,不管是內(nèi)核態(tài)的內(nèi)核線程還是用戶態(tài)的程序,都不會自動運(yùn)行到isolcpus指定的CPU 上去。
      [0072] 通常來說,數(shù)據(jù)面負(fù)責(zé)報文轉(zhuǎn)發(fā),對CPU的消耗是很大的,如果數(shù)據(jù)面內(nèi)核線程在 執(zhí)行的過程中,該執(zhí)行的CPU還需執(zhí)行其他的程序,則會打斷當(dāng)前的數(shù)據(jù)面處理流程,這對 網(wǎng)絡(luò)設(shè)備吞吐性能極為不利。鑒于網(wǎng)絡(luò)設(shè)備需要優(yōu)先保證數(shù)據(jù)報文轉(zhuǎn)發(fā)即數(shù)據(jù)面的執(zhí)行效 率,通過本發(fā)明的系統(tǒng),能夠保護(hù)數(shù)據(jù)面的CPU執(zhí)行不受其他任務(wù)的干擾,可以專用于執(zhí)行 數(shù)據(jù)面處理。
      [0073] 此外,數(shù)據(jù)面單元12優(yōu)選的還設(shè)置有線程喚醒模塊400,其優(yōu)選的采用wake_Up_ process函數(shù)實(shí)現(xiàn),通過調(diào)用線程喚醒模塊,可以喚醒內(nèi)核線程運(yùn)行。
      [0074] 如上所述,通過采用本發(fā)明的系統(tǒng)架構(gòu),由于處于控制面單元的Linux內(nèi)核已經(jīng) 適配完成,可以不用修改網(wǎng)卡驅(qū)動和CPU適配程序,系統(tǒng)的大部分CPU資源只需要專注于數(shù) 據(jù)面的報文收發(fā)處理。此外,由于Linux系統(tǒng)的報文收發(fā)主要在內(nèi)核實(shí)現(xiàn),數(shù)據(jù)面的應(yīng)用模 塊可直接利用Linux內(nèi)核的網(wǎng)絡(luò)代碼,直接在Linux內(nèi)核的netfilter框架上實(shí)現(xiàn)更復(fù)雜的 報文處理功能。這樣,當(dāng)需要更換成其他型號的CPU或網(wǎng)卡時,CPU適配和網(wǎng)卡驅(qū)動都能得 到Linux內(nèi)核的支持,而數(shù)據(jù)面應(yīng)用模塊的處理代碼無需修改,通用性很強(qiáng)。
      [0075] 圖5顯示了本發(fā)明優(yōu)選實(shí)施例的多核處理器網(wǎng)絡(luò)設(shè)備的控制方法的流程圖。
      [0076] 如圖5所示,本發(fā)明優(yōu)選實(shí)施例的多核處理器網(wǎng)絡(luò)設(shè)備的控制方法主要用于實(shí)現(xiàn) 控制面和數(shù)據(jù)面相分離的網(wǎng)絡(luò)設(shè)備系統(tǒng)架構(gòu),所述方法包括下述步驟:
      [0077] 步驟S101,在控制面調(diào)度控制面線程。
      [0078] 本步驟中,通過控制面單元實(shí)現(xiàn)控制面的線程調(diào)度分配,例如包括下述中的一種 或多種:命令配置、路由維護(hù)、地址管理、網(wǎng)頁展示業(yè)務(wù)。
      [0079] 步驟S102,在數(shù)據(jù)面創(chuàng)建內(nèi)核線程。
      [0080] 本步驟中,優(yōu)選的通過kthread_create函數(shù)創(chuàng)建內(nèi)核線程,通過kthread_create 函數(shù)創(chuàng)建N個內(nèi)核線程,執(zhí)行數(shù)據(jù)面的處理線程。kthreacLcreate函數(shù)具體模型參見前文 描述。
      [0081] 步驟S103,控制數(shù)據(jù)面的預(yù)定線程運(yùn)行于特定CPU。
      [0082] 本步驟中,優(yōu)選的通過kthread_bind函數(shù)限定特定的內(nèi)核線程只能在特定的CPU 上運(yùn)行,該內(nèi)核線程不受內(nèi)核的任務(wù)CPU均衡機(jī)制管理,不會遷移到其他CPU上去執(zhí)行。即 內(nèi)核線程和CPU綁定。kthread_bind函數(shù)的模型參見前文描述。
      [0083] 步驟S104,執(zhí)行數(shù)據(jù)面的線程。
      [0084] 本步驟中,優(yōu)選的通過dataplane_process函數(shù)實(shí)現(xiàn)數(shù)據(jù)面所有線程的處理,該 函數(shù)一直循環(huán),直至系統(tǒng)停止。
      [0085] 圖6顯示了本發(fā)明優(yōu)選實(shí)施例的多核處理器網(wǎng)絡(luò)設(shè)備的控制方法的流程示意圖。
      [0086] 如圖6所示,優(yōu)選的,在步驟S102之后還包括步驟S105,隔離數(shù)據(jù)面的線程。
      [0087] 本步驟中,通過isolcpus函數(shù)指定數(shù)據(jù)面的線程運(yùn)行的CPU起止范圍。進(jìn)一步,通 過將上述函數(shù)加入到內(nèi)核的啟動參數(shù)上,就可以將isolcpus函數(shù)指定的CPU范圍從Linux 內(nèi)核的任務(wù)負(fù)載均衡的機(jī)制中隔離開,達(dá)到保護(hù)數(shù)據(jù)面CPU資源的目的,使數(shù)據(jù)面CPU可以 專注的執(zhí)行數(shù)據(jù)面內(nèi)核線程指定的報文收發(fā)任務(wù),不受干擾。這樣,isolcpus函數(shù)指定范 圍內(nèi)的CPU,可以不受Linux內(nèi)核任務(wù)負(fù)載均衡機(jī)制的管理,相當(dāng)于從Linux系統(tǒng)中"隔離" 了。從而可以限定用戶態(tài)單元13和其他線程不會在數(shù)據(jù)面單元12上的CPU執(zhí)行。
      [0088] 可選的,在步驟S102之后還包括步驟S106,喚醒線程。
      [0089] 本步驟優(yōu)選的采用wake_up_process函數(shù)實(shí)現(xiàn),通過調(diào)用該函數(shù),可以喚醒或調(diào) 用所創(chuàng)建的線程運(yùn)行。
      [0090] 如上所述,本發(fā)明的多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng)及方法中,采用控制面和數(shù) 據(jù)面相分離的軟件架構(gòu)模型,通過內(nèi)核線程實(shí)現(xiàn)數(shù)據(jù)面操作,利用內(nèi)核函數(shù)綁定數(shù)據(jù)面的 內(nèi)核線程到單獨(dú)的CPU,最后利用內(nèi)核參數(shù)屏蔽其他程序,以防占用數(shù)據(jù)面CPU資源,可以 在保證各個數(shù)據(jù)面執(zhí)行效率的前提下,提高報文處理和設(shè)備吞吐性能,且方法實(shí)現(xiàn)簡單,通 用性強(qiáng),靈活穩(wěn)定,便于移植。
      [0091] 應(yīng)當(dāng)理解的是,本發(fā)明的上述【具體實(shí)施方式】僅僅用于示例性說明或解釋本發(fā)明的 原理,而不構(gòu)成對本發(fā)明的限制。因此,在不偏離本發(fā)明的精神和范圍的情況下所做的任何 修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。此外,本發(fā)明所附權(quán)利要求旨 在涵蓋落入所附權(quán)利要求范圍和邊界、或者這種范圍和邊界的等同形式內(nèi)的全部變化和修 改例。
      【權(quán)利要求】
      1. 一種多核處理器網(wǎng)絡(luò)設(shè)備的控制系統(tǒng),包括: 控制面單元(11),用于提供系統(tǒng)綜合控制; 數(shù)據(jù)面單元(12),用于控制數(shù)據(jù)面的線程運(yùn)行; 用戶態(tài)單元(13),用于在指定的CPU上運(yùn)行用戶態(tài)的線程,以避免這些線程干擾數(shù)據(jù) 面的CPU。
      2. 根據(jù)權(quán)利要求1所述的控制系統(tǒng),其特征在于: 所述控制面單元(11)以Linux的SMP方式運(yùn)行于內(nèi)核態(tài),控制命令配置、路由維護(hù)、地 址管理、網(wǎng)頁展示業(yè)務(wù)的調(diào)度分配; 所述數(shù)據(jù)面單元(12)運(yùn)行于內(nèi)核態(tài),其中的多個內(nèi)核線程分別綁定在不同的CPU上運(yùn) 行;以及 所述用戶態(tài)單元(13)的所有線程在所述控制面單元(11)指定的CPU上執(zhí)行。
      3. 根據(jù)權(quán)利要求1所述的控制系統(tǒng),所述數(shù)據(jù)面單元(12)還包括: 內(nèi)核線程控制模塊(100),用于創(chuàng)建并設(shè)置數(shù)據(jù)面的線程; 數(shù)據(jù)面執(zhí)行模塊(200),用于執(zhí)行數(shù)據(jù)面的線程;以及 進(jìn)程隔離模塊(300),用于隔離數(shù)據(jù)面的線程,以隔離控制面和用戶態(tài)的線程,使其不 會在數(shù)據(jù)面的CPU上運(yùn)行。
      4. 根據(jù)權(quán)利要求3所述的控制系統(tǒng),所述內(nèi)核線程控制模塊(100)進(jìn)一步包括: 線程創(chuàng)建模塊(110),用于通過kthread_create函數(shù)創(chuàng)建線程;和 線程控制模塊(120),用于通過kthread_bind函數(shù)控制線程運(yùn)行于特定CPU上。
      5. 根據(jù)權(quán)利要求4所述的控制系統(tǒng),所述數(shù)據(jù)面執(zhí)行模塊(200)通過kthread_create 函數(shù)創(chuàng)建數(shù)據(jù)面的執(zhí)行函數(shù)dataplane_process,倉ij建方式表示為: for (cpu = dp-cpu-.start; cpu < dp-cpu - end; cpu++) { dp-thread [cpu] = kthread-creale (datap 1ane_process, dataplane-data [cpu], "da la p 1 ane,/%d", c pu); if (TS-ERR (dp-thread [cpu])) return NOTIFY.BAD; kthread-bind (dp-lhread Lcpu], cpu); wake - up-process (dp-thread[cpu]); } 其中,dataplane_process表示數(shù)據(jù)面要執(zhí)行的線程,參數(shù)dp_cpu_start表示數(shù)據(jù) 面線程運(yùn)行的起始CPU,參數(shù)dp_cpu_end表示數(shù)據(jù)面線程運(yùn)行的結(jié)尾CPU, dataplane_ data[cpu]為該cpu私有的數(shù)據(jù),用于dataplane_proces內(nèi)核線程執(zhí)行時該內(nèi)核線程使 用;dataplane/x為數(shù)據(jù)面內(nèi)核線程的名稱,dp_thread[cpu]用于存儲內(nèi)核線程創(chuàng)建后的 結(jié)構(gòu)。
      6. 根據(jù)權(quán)利要求3所述的控制系統(tǒng),所述進(jìn)程隔離模塊(300)通過isolcpus函數(shù)指定 數(shù)據(jù)面的線程只運(yùn)行于規(guī)定范圍的CPU。
      7. 根據(jù)權(quán)利要求4所述的控制系統(tǒng),所述kthread_create函數(shù)表示為: struct iask-struct *kUiread-create (int (nhreadfn) (void *data), void *data, const char namefnU [], ? · ·), 上述函數(shù)的參數(shù)含義為: threadfn:內(nèi)核線程的執(zhí)行函數(shù), data :傳遞給threadfn函數(shù)的數(shù)據(jù)指針, namefmt :內(nèi)核線程的別名。
      8. 根據(jù)權(quán)利要求4所述的控制系統(tǒng),所述kthread_bind函數(shù)表示為: kthread_bind(dp_thread[cpu], cpu), 其中,dp_thread[cpu]表示數(shù)據(jù)面單元中存儲的內(nèi)核線程,綁定在由變量cpu指定的 cpu上執(zhí)行。
      9. 一種多核處理器網(wǎng)絡(luò)設(shè)備的控制方法,包括下述步驟: 步驟S101,在控制面調(diào)度控制面線程; 步驟S102,在數(shù)據(jù)面創(chuàng)建內(nèi)核線程; 步驟S103,控制數(shù)據(jù)面的預(yù)定線程運(yùn)行于特定CPU ;以及 步驟S104,執(zhí)行數(shù)據(jù)面的線程。
      10. 根據(jù)權(quán)利要求9所述的控制方法,在步驟S102之后還包括下述步驟: 步驟S105,隔離數(shù)據(jù)面的線程,使其運(yùn)行在指定范圍的CPU上; 步驟S106,喚醒線程。
      【文檔編號】G06F9/48GK104050036SQ201410234696
      【公開日】2014年9月17日 申請日期:2014年5月29日 優(yōu)先權(quán)日:2014年5月29日
      【發(fā)明者】寧志明 申請人:漢柏科技有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1