Cavium多核處理器平臺數據包負載均衡的實現方法
2023-10-08 05:37:34
Cavium多核處理器平臺數據包負載均衡的實現方法
【專利摘要】本發明公開了Cavium多核處理器平臺數據包負載均衡的實現方法,該方法通過配置交換晶片上的某些埠為vlan進行數據通路設計,然後再進行多核處理系統的軟體設計,目的是使得數據包在2個CPU之間均勻分配且得到處理。一個運行的程序是跑在SE模式下的passthrough,用於數據包的均衡分配,另一個運行的程序是跑在UM模式下的snort,用於業務處理,在這種設計模式下實現多核系統的負載均衡。通過本設計方法並通過實驗可以找到每個CPU最優化的分數據包核個數與業務核個數組合,這樣就能設計出高性能的產品,並且用軟體的均衡負載解決了將數據包均勻分配到每個核來處理的這個問題,設計簡單,且容易實現,成本低廉,不用其它硬體的輔助等。
【專利說明】Cavium多核處理器平臺數據包負載均衡的實現方法
【技術領域】
[0001]本發明涉及網絡安全【技術領域】,尤其涉及Cavium多核處理器平臺數據包負載均衡的實現方法。
【背景技術】
[0002]21世紀是信息爆炸的時代,網際網路技術層出不窮,日新月異。人們的日常生活越來越離不開網絡系統,從網上的QQ聊天,網上銀行的系統交易,網上的淘寶購物等等。這些種種的網上行為都涉及到人們的個人的信息與隱私。還有家庭中的個人電腦的存儲介質中都存放著人們的個人資料。要做到這些個人信息不被別人盜用,不被別人惡意刪除,網絡系統的安全尤其重要。一方面由於網絡中數據信息的交流的加大,數據流量愈發頻繁,需要處理大數據的設備;另一方面,要保證內部網絡系統的信息安全,就需要有對內網數據包進行監測、報警的入侵報警系統。因此,在這樣的大數據量的網絡環境下,能處理高數據流量的入侵檢測系統IDS就顯得頗為重要。
[0003]現有技術中高性能IDS的設計在交換晶片中可以實現一種叫做VLAN Trunk的負載均衡,利用交換晶片埠的鏈路聚合的技術來實現負載均衡。該方法實際上是在網絡七層模型的二層來實現的。Trunk是埠匯聚的意思,是通過配置軟體的設置,將2個或多個物理埠綁定在一起實現一條邏輯路徑為trunkl,而與Cavium CPU連接的8個埠又綁定在一起實現另一條邏輯路徑為trunk2。然後在trunkl與trunk2之間設置一個vlan在,那麼數據溜就可以在trunkl與trunk2之間實現傳輸,再經過對數據包的hash (hash有硬體來完成計算)就分配8個port中的其中一個,這種hash的計算可以是依照源IP,目的IP等,這樣可以保證一個流可以分配到同一個Cavium的CPU上的一個port中。具體如圖1所示。
[0004]這個vlan trunk的方法可以提高吞吐量是因為可以將幾個埠的帶寬合併,可以給埠提供一個幾倍於獨立埠的獨享帶寬,從而提高了整個數據包的吞吐量。
[0005]用VLAN的trunk的鏈路聚合來實現分流,這個技術用硬體實現,在交換晶片中理論上可以實現100%的轉發,速度相比軟體更快,同時也可以實現TCP三次握手在同一個CPU上。這是鏈路聚合的優點。但是這種鏈路聚合只是針對port來分流,對於32個核的Cavium的CPU,並沒有均勻地分配到每個核來處理數據包。
[0006]除了上述方法外,還有在交換晶片中配置好,將依照IP與mac的基偶數分配到ATCA的兩個Cavium的CPU上,然後每個CPU接收數據包再進行處理。因為每個進入CPU的數據包work的grup號默認為Ogrup,且將每一個CPU的32個核的grup號設置為Ogrup,那麼進入該CPU的數據包work就可以平均分配到32個核進行處理。這種情況下的設計方案也可以實現數據包的負載均衡,具體如圖3和圖4所示。
[0007]該方法設計簡單,將兩個CPU的的所有的core設計為組號為O的核,每個Cavium中的調度器POW負責將數據包分發到各個來進行處理,那麼這個POW就成為該設計方案的瓶頸,即POW會成為數據包word調度的瓶頸。這樣的話,如果要兩個CPU都利用上,主要將數據包流進行分類的工作就集中在交換晶片上來處理,可以以基數分到CPUl來處理,偶數分到CPU2進行處理。
【發明內容】
[0008]本發明為了克服現有技術的缺陷,提供一種Cavium多核處理器平臺數據包負載均衡的實現方法,實現多核系統的負載均衡,設計出高性能的產品,並且用軟體的均衡負載解決了將數據包均勻分配到每個核來處理的這個問題,設計簡單,且容易實現,成本低廉,不用其它硬體的輔助等。
[0009]Cavium多核處理器平臺數據包負載均衡的實現方法,其通過配置交換晶片上的某些埠為vlan進行數據通路設計,然後再進行多核處理系統的軟體設計,目的是使得數據包在兩個CPU之間均勻分配且得到處理,然後通過軟體設計將數據包均勻分配到每個核來處理,一個運行的程序是跑在SE模式下的passthrough,用於數據包的均衡分配,另一個運行的程序是跑在UM模式下的snort,用於業務處理,在這種設計模式下實現多核系統的負載均衡,找到每個CPU最優化的分數據包核個數與業務核個數組合,這樣就能設計出高性能的產品,並且用軟體的均衡負載解決了將數據包均勻分配到每個核來處理。
[0010]交換晶片中的數據通路設計為數據包work從xe23進入交換晶片,交換晶片與vlan的配置與步驟過程如下:
[0011]I)配置xe23與xe9為一個vlanl,使數據包work可以進入CPUl ;
[0012]2)配置xell與xe22為一個vlan2,先進行CPUl的調試,在CPUl的1-4個核上運行SE模式下的passthrough,在5_32個核下運行UM模式下的passthrough,使得負載均衡後的數據包從5-32個核轉發到交換晶片的埠 xel I,然後再從xe22給IXIA網絡測試儀收包;如果在IXIA網絡測試儀發小速率,且沒有超出Cavium CPU處理數據包瓶頸的情況下,IXIA網絡測試儀收到的數據包與其發的數據包大致相等,則證明CPUl的數據通路配置好,然後在代碼中也列印出來每個核的收包的統計信息,5-32個核在之後要運行snort程序;
[0013]3)配置xel2與xel為一個vlan3,配置xe4與xe22為vlan4,同時去掉vlan2,再進行CPU2的調試,同樣在CPUl的1-4核上運行SE模式下的passthrough,在5_32個核下運行UM模式下的passthrough ;在CPU2的1-2核上運行SE模式下的passthrough,在3-32個核下運行UM模式下的passthrough,這種情況下,經過CPU2的3_32個核的數據包會經過xe4傳到IXIA網絡測試儀;同理在IXIA網絡測試儀所發的數據包在沒有超出Cavium CPU的處理的瓶頸下,IXIA網絡測試儀收到的數據包大致是其發的數據包的一半,則證明CPU2的數據通路配置好,然後在代碼中也列印出來每個核的收包的統計信息,3-32核在之後要運行snort程序;
[0014]4)去掉多餘的vlan,只是剩下配置vlanl與vlan3,然後在CPUl上1_4核運行SE的 passthrough, 5-32 核運行 snort ;在 CPU2 上 1-2 核運行 SE 的 passthrough, 3-32 核運行snort ;在代碼中加入調試信息輸出每個核接收到數據包的個數,如果在輸出終端見到IXIA網絡測試儀發的總數據包數平均分配到每一個核來處理,則表示上面的埠配置成功。
[0015]兩個CPU間的負載均衡的設計方法為:
[0016]為了達到運行SE的passthrough程序與運行業務核的snort程序都運行,則需要將本來在snort中初始化的代碼的部分移植到SE的passthrough的代碼中,同時刪除snort中對硬體初始化的部分代碼,修改後就可以同時運行分數據包SE的passthrough與運行業務處理的snort,修改好後的執行流程為:
[0017]I)運行SE的passthrough的程序的core為4個,運行業務的snort的core為28個,且在啟動腳本中設置同時運行,然後SE的passthrough等待28個業務核snort全部運行起來,SE的passthrough再往下運行;
[0018]2)同時snort等待共享內存中的pshminfo->magic值設為MAGIC,而不斷的循環
等待;
[0019]3)運行SE中的passthrough進行Cavium平臺的硬體初始化;
[0020]4)設置28個業務核的core分別為一個組號,同時設置前4個運行SE的passthrough的4個核為同一個組;
[0021]5)運行 SE 的 passthrough 分配共享內存,並設置 pshminfo->magic = MAGIC ;
[0022]6)然後SE的passthrough的4個核不斷地從POW地調度收包,收包與分包的函數為bl_getwork,該函數是不斷的從POW收包,然後大於本CPUl的workcores的數據包則分發給CPU2,小於本CPUl的workcores則分發給本CPUl的各個業務核的snort進行處理;
[0023]7) CPUl中5-32核與CPU2中3_32核運行snort,則從POW中調度相應的組號的數據包work來進行處理。
[0024]本發明技術方案帶來的有益效果:
[0025]通過本發明可以動態地配置分發的數據包的核數(即跑SE的核數)和處理數據包的核數(即跑業務snort的核數),從而找到最優化的,能處理數據包最多的組合。這樣的充分的發揮Cavium的多核CPU的性能,設計出高性能的產品。結合Cavium的其它高速處理數據包的模塊與調度模塊,分擔了 core的優先級調度的計算,跑業務snort的各個核只是負責業務的處理,這樣就可以設計出高性能的產品,以滿足當下高數據量,高流量的網絡需求。
[0026]還有用軟體的均衡負載解決了將數據包均勻分配到每個核來處理的這個問題,設計簡單,且容易實現,成本低廉,不用其它硬體的輔助等。
[0027]此外,本發明雖然是用了若干核來處理數據包,但是經過負載均衡後也要依靠POW來調度數據包,所以瓶頸依然在於POW的限制。但是基於實驗的數據包可得,不用核來做均衡負載的數據包,可以處理64位元組的100Mbps的為8%左右,而用分核來做均衡負載的數據包,在同等的條件下可以達到12%左右。
【專利附圖】
【附圖說明】
[0028]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其它的附圖。
[0029]圖1是現有技術中多個埠劃分為一個Trunk的示意圖;
[0030]圖2是現有技術中兩個Trunk劃分為一個vlan的示意圖;[0031]圖3是現有技術中在switch進行IP,MAC奇偶分類的示意圖;
[0032]圖4是現有技術中一個CPU的32個核設為同一個組用於收包的示意圖;
[0033]圖5是本發明方法的實施例中數據通路的設計圖;
[0034]圖6是本發明方法的實施例中兩個CPU分核的參數設計圖;
[0035]圖7是本發明方法的實施例中運行SE與業務snort的代碼同步流程圖;
[0036]圖8是本發明方法的實施例中兩個CPU只有一個vlan的數據傳輸的情況示意圖;
[0037]圖9是本發明方法的實施例中兩個CPU有兩個vlan的數據傳輸的情況示意圖。
【具體實施方式】
[0038]下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。
[0039]本發明是在Cavium平臺上開發高性能產品時提出來的,目的是儘量多地檢測到進入內網的數據包,就所設計的Cavium平臺要儘可能快地匹配處理數據包。該發明為實現多核系統的負載均衡需要解決以下問題:1、要在每個核上跑Cavium中的Iinux模式,即每個核跑一個snort的應用程式來達到最高的處理數據包。2、每個Cavium的CPU上分出若干個核跑Cavium的SE模式,來經行數據包的分發處理。3、數據包是依照硬體打的tag值來進行分配,這個tag值是依照源IP,目的IP,協議號來由硬體設置tag值,然後進行hash來分到不同的核中處理數據包。4、2個CPU之間與交換晶片有四個接口可以配置為兩對vlan共4個port來進行優化,來達到儘可能多的CPU間的傳輸數據包的目的。通過本發明方法,就能將進入Cavium平臺的數據包大致均勻地分配到不同core中來處理,以至於最大限度的利用好Cavium的高性能的處理能力,這樣就能設計出在高流量數據的帶寬前提下的高性能廣品。
[0040]本發明方法實施例中交換晶片的數據通路部分設計如圖5所示,數據包work從箭頭處的xe23進入交換晶片。交換晶片與vlan的配置與步驟如下:
[0041]I)配置xe23與xe9為一個vlanl,使數據包work可以進入CPUl ;
[0042]2)配置xell與xe22為一個vlan2,先進行CPUl的調試。在CPUl的1-4個核上運行SE模式下的passthrough,再5_32個核下運行UM模式下的passthrough,使得負載均衡後的數據包從5-32個核轉發到交換晶片的埠 xel I,然後再從xe22給IXIA網絡測試儀收包。如果在IXIA網絡測試儀發小速率,且沒有超出Cavium CPU處理數據包瓶頸的情況下,IXIA網絡測試儀收到的數據包與其發的數據包大致相等。則證明CPUl的數據通路配置好,然後在代碼中也列印出來每個核的收包的統計信息,5-32個核在之後要運行snort程序。
[0043]3)配置xel2與xel為一個vlan3,配置xe4與xe22為vlan4,同時去掉vlan2,再進行CPU2的調試。同樣在CPUl的1-4核上運行SE模式下的passthrough,在5_32個核下運行UM模式下的passthrough ;在CPU2的1-2核上運行SE模式下的passthrough,在3-32個核下運行UM模式下的passthrough。這種情況下,經過CPU2的3_32個核的數據包會經過xe4傳到IXIA網絡測試儀。同理在IXIA網絡測試儀所發的數據包在沒有超出CaviumCPU的處理的瓶頸下,IXIA網絡測試儀收到的數據包大致是其發的數據包的一半。則證明CPU2的數據通路配置好,然後在代碼中也列印出來每個核的收包的統計信息,3-32核在之後要運行snort程序。
[0044]4)去掉多餘的vlan,只是剩下配置vlanl與vlan3,然後在CPUl上1_4核運行SE的 passthrough, 5-32 核運行 snort ;在 CPU2 上 1-2 核運行 SE 的 passthrough, 3-32 核運行snort ;在代碼中加入調試信息輸出每個核接收到數據包的個數,如果在輸出終端見到IXIA網絡測試儀發的總數據包數平均分配到每一個核來處理,則表示上面的埠配置成功。
[0045]需要說明的是:CPU1與交換晶片相連的有xe9_xel2,CPU2與交換晶片相連的有xel-xe4,在ATCA板塊中RTM背板中的數據包的入口與交換晶片的xe22_xe29埠相連。
[0046]在交換晶片的數據通路設計中,選取交換晶片中的埠 χθ22-χθ29的某一個與CPUl或CPU2的某一個配置成vlan就可以實現了數據通路的設計。
[0047]例如上述配置中,選取交換晶片中埠 xe22_xe29中的xe23與CPUl相連的埠xe9_xel2 中的 xe9,組成一個 vlanl (xe23, xe9)。
[0048]vlan2, vlan3, vlan4的劃分原理與選取方法要依照上面的埠分配規則來配置。
[0049]如圖6所示是兩個CPU之間分核的參數設計圖,其中定義的一個數據包結構包含了圖中的信息:
[0050]Mycores:表示 CPUl 的總個數;
[0051]Peercores:表 示對方CPU2的個數;
[0052]Myworkcores:表不運行業務snort的核的個數,圖中myworkcores = 28 ;
[0053]Peerworkcores:表不對方運行業務snort的核的個數,圖中peerworkcores = 30 ;
[0054]Firstsecores:表不 CPU 上第一個 balance cores 的位置,圖中 CPUl 與 CPU2 的firstsecores = O ;
[0055]Firstworkcores:表示CPU上第一個跑業務的核的位置,
[0056]圖中 CPUl 中 firstworkcores = 5, CPU2 中 firstworkscores = 3 ;
[0057]定義的數據結果如下:
[0058]
struct Minfo
{
uintI6_t mycores;
uintl6_t firstsecore;
uinl 16j llrstworkcorc:1iint 16_t myworkcores;
uinl 16—1 pccrworkcorcs;
uint!6_t workcores;
uinllfij dpb;
uintl6_l comport;
uintl6—t owtport;[0059]
【權利要求】
1.Cavium多核處理器平臺數據包負載均衡的實現方法,其特徵在於,該方法通過配置交換晶片上的某些埠為vlan進行數據通路設計,然後再進行多核處理系統的軟體設計,目的是使得數據包在兩個CPU之間均勻分配且得到處理,然後通過軟體設計將數據包均勻分配到每個核來處理,一個運行的程序是跑在SE模式下的passthrough,用於數據包的均衡分配,另一個運行的程序是跑在UM模式下的snort,用於業務處理,在這種設計模式下實現多核系統的負載均衡,找到每個CPU最優化的分數據包核個數與業務核個數組合,這樣就能設計出高性能的產品,並且用軟體的均衡負載解決了將數據包均勻分配到每個核來處理。
2.根據權利要求1所述的方法,其特徵在於,交換晶片中的數據通路設計為數據包work從xe23進入交換晶片,交換晶片與vlan的配置與步驟過程如下: 1)配置xe23與xe9為一個vlanl,使數據包work可以進入CPUl; 2)配置xell與xe22為一個vlan2,先進行CPUl的調試,在CPUl的1_4個核上運行SE模式下的passthrough,在5_32個核下運行UM模式下的passthrough,使得負載均衡後的數據包從5-32個核轉發到交換晶片的埠 xell,然後再從xe22給IXIA網絡測試儀收包;如果在IXIA網絡測試儀發小速率,且沒有超出Cavium CPU處理數據包瓶頸的情況下,IXIA網絡測試儀收到的數據包與其發的數據包大致相等,則證明CPUl的數據通路配置好,然後在代碼中也列印出來每個核的收包的統計信息,5-32個核在之後要運行snort程序; 3)配置xel2與xel為一個vlan3,配置xe4與xe22為vlan4,同時去掉vlan2,再進行CPU2的調試,同樣在CPUl的1-4核上運行SE模式下的passthrough,在5_32個核下運行UM模式下的passthrough ;在CPU2的1-2核上運行SE模式下的passthrough,在3-32個核下運行UM模式下的passthrough,這種情況下,經過CPU2的3_32個核的數據包會經過xe4傳到IXIA網絡測試儀;同理在IXIA網絡測試儀所發的數據包在沒有超出Cavium CPU的處理的瓶頸下,IXIA網絡測試儀收到的數據包大致是其發的數據包的一半,則證明CPU2的數據通路配置好,然後在代碼中也列印出來每個核的收包的統計信息,3-32核在之後要運行snort程序; 4)去掉多餘的vlan,只是剩下配置vlanl與vlan3,然後在CPUl上1_4核運行SE的passthrough, 5-32 核運行 snort ;在 CPU2 上 1-2 核運行 SE 的 passthrough, 3-32 核運行snort ;在代碼中加入調試信息輸出每個核接收到數據包的個數,如果在輸出終端見到IXIA網絡測試儀發的總數據包數平均分配到每一個核來處理,則表示上面的埠配置成功。
3.根據權利要求1或2所述的方法,其特徵在於,交換晶片與vlan的配置中CPUl與交換晶片相連的有xe9-xel2,CPU2與交換晶片相連的有xel_xe4,在ATCA板塊中RTM背板中的數據包的入口與交換晶片的xe22-xe29埠相連;在交換晶片的數據通路設計中,選取交換晶片中的埠 xe22-xe29的某一個與CPUl或CPU2的某一個配置成vlan就能夠實現數據通路的設計。
4.根據權利要求1所述的方法,其特徵在於,為了達到運行SE的passthrough程序與運行業務核的snort程序都運行,則需要將本來在snort中初始化的代碼的部分移植到SE的passthrough的代碼中,同時刪除snort中對硬體初始化的部分代碼,修改後就可以同時運行分數據包SE的passthrough與運行業務處理的snort,修改好後的執行流程為:1)運行SE的passthrough的程序的core為4個,運行業務的snort的core為28個,且在啟動腳本中設置同時運行,然後SE的passthrough等待28個業務核snort全部運行起來,SE的passthrough再往下運行; 2)同時snort等待共享內存中的pshminfo->magic值設為MAGIC,而不斷的循環等待; 3)運行SE中的passthrough進行Cavium平臺的硬體初始化; 4)設置28個業務核的core分別為一個組號,同時設置前4個運行SE的passthrough的4個核為同一個組; 5)運行SE 的 passthrough 分配共享內存,並設置 pshminfo->magic = MAGIC ; 6)然後SE的passthrough的4個核不斷地從POW地調度收包,收包與分包的函數為bl_getwork,該函數是不斷的從POW收包,然後大於本CPUl的workcores的數據包則分發給CPU2,小於本CPUl的workcores則分發給本CPUl的各個業務核的snort進行處理; 7)CPUl中5-32核與CPU2中3_32核運行snort,則從POW中調度相應的組號的數據包work來進行處理 。
5.根據權利要求1所述的方法,其特徵在於,為了將處理的數據包均勻地分配到兩個CPU中的運行業務程序snort的不同核中,則採用了分核的算法,該分核的算法是基於數據包work中的tag來進行hash運算得到的,該tag是在配置文件中設置為基於源IP,目的IP,協議號來計算得到的,由下面的算法能計算得到work是分到哪一個的core來進行處理: tag = (work->wordl.tag>>24) + (work->wordl.tag>>16) + (work->wordl.tag>>8) + (work->wordl.tag&Oxff);
core = tag% blinf0.workcores ; 如果計算得到的core大於本CPUl的core則發到CPU2 ; 如果計算得到的core小於本CPUl的core則分發到CPUl的不同的核中進行處理。
6.根據權利要求1-5任一項所述的方法,其特徵在於,CPUl的出埠與CPU2的進埠要通過PK0(Packet output unit)的連接,數據包的流通瓶頸在於PK0,為克服此現象可設計成將剩下沒有用到的交換晶片與Cavium CPU相連的萬兆口配置成vlan,用於傳輸數據包work之用途,會達到更好的性能。
【文檔編號】H04L12/803GK104038437SQ201410306681
【公開日】2014年9月10日 申請日期:2014年6月30日 優先權日:2014年6月30日
【發明者】楊育斌, 柯宗貴, 黃新宇, 王輝 申請人:藍盾信息安全技術有限公司