本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信方法和系統(tǒng)。
背景技術(shù):SMP(SymmetricalMulti-Processing,對(duì)稱多處理機(jī)系統(tǒng))架構(gòu)中,核心模塊會(huì)存在共享資源的情況。多個(gè)處理機(jī)上運(yùn)行的進(jìn)程并行執(zhí)行,可能會(huì)有若干個(gè)進(jìn)程同時(shí)訪問(wèn)某共享資源,在編程時(shí)需要考慮共享內(nèi)存帶來(lái)的鎖開銷。目前主流網(wǎng)卡的報(bào)文接收技術(shù)RSS(Receive-SideScaling)中,哈希算法是在網(wǎng)卡硬件中進(jìn)行編程,因此無(wú)法在外部進(jìn)行自定義編程,不能根據(jù)需要調(diào)整哈希算法。RSS技術(shù)可以保證數(shù)據(jù)流的單向親和性,因此,對(duì)于只處理單向數(shù)據(jù)流的網(wǎng)絡(luò)設(shè)備來(lái)說(shuō),可以做到避免共享內(nèi)存,但是RSS不能保證雙向數(shù)據(jù)流親和。對(duì)于一般的流處理設(shè)備,尤其是具有NAT(NetworkAddressTranslation,網(wǎng)絡(luò)地址轉(zhuǎn)換)功能的設(shè)備,如果能夠做到雙向流親和,即保證同一條流進(jìn)出都由同一個(gè)cpu處理,就可以避免核與核間對(duì)內(nèi)存的共享,從而消除共享內(nèi)存帶來(lái)的鎖開銷。但是目前還沒(méi)有很好的解決方案。
技術(shù)實(shí)現(xiàn)要素:本發(fā)明旨在至少解決現(xiàn)有技術(shù)中存在的技術(shù)問(wèn)題之一。為此,本發(fā)明的一個(gè)目的在于提出一種基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信方法。本方法實(shí)現(xiàn)了雙向流親和,可編程,可控性強(qiáng),無(wú)鎖隊(duì)列避免競(jìng)爭(zhēng)開銷,優(yōu)化了系統(tǒng)性能。本發(fā)明的第二個(gè)目的在于提出一種基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信系統(tǒng)。為達(dá)到上述目的,本發(fā)明第一方面的實(shí)施例提出了一種基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信方法,所述SMP系統(tǒng)包括多個(gè)socket,其中每個(gè)所述socket為SMP結(jié)構(gòu),所述多個(gè)socket之間的端口獨(dú)立,其中,每個(gè)所述socket進(jìn)行無(wú)鎖化通信包括如下步驟:將所述ip段中的ip通過(guò)哈希算法分配至每個(gè)數(shù)據(jù)流處理核心上,并對(duì)所述socket的每個(gè)端口配置多個(gè)源地址轉(zhuǎn)換snat的ip段,將snat的ip插入到接收器的維護(hù)表中,其中,將正向數(shù)據(jù)流的源地址設(shè)置為當(dāng)前所在數(shù)據(jù)流處理核心的私有地址;當(dāng)所述接收器檢測(cè)到有逆向數(shù)據(jù)流返回時(shí),所述接收器檢測(cè)所述逆向數(shù)據(jù)流的目的地址是否為自身所在端口的snat的ip段;如果是,則采用ip通過(guò)哈希算法將所述逆向數(shù)據(jù)流的分配給包括所述私有地址的逆向數(shù)據(jù)流核心。根據(jù)本發(fā)明實(shí)施例的基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信方法,通過(guò)哈希算法和無(wú)鎖隊(duì)列技術(shù),保證數(shù)據(jù)流的雙向親和性,即同一條流進(jìn)出由同一個(gè)cpu處理,避免核與核之間的內(nèi)存共享以及其帶來(lái)的鎖競(jìng)爭(zhēng),消除了共享內(nèi)存帶來(lái)的鎖開銷,對(duì)用戶透明,對(duì)數(shù)據(jù)流具有高度可控??删幊蹋`活性和可控性強(qiáng),同時(shí)性能優(yōu)化效果明顯。在本發(fā)明的一個(gè)實(shí)施例中,所述哈希算法為取余的哈希算法。在本發(fā)明的一個(gè)實(shí)施例中,在所述socket的每個(gè)端口配置所述端口對(duì)應(yīng) 的snat的ip段的第二個(gè)地址。在本發(fā)明的一個(gè)實(shí)施例中,每個(gè)所述socket中設(shè)置有具有接收數(shù)據(jù)流處理核心,所述接收數(shù)據(jù)流處理核心通過(guò)無(wú)鎖隊(duì)列將接收到的數(shù)據(jù)流按照五元組哈希分配到每個(gè)數(shù)據(jù)流處理核心上。本發(fā)明第二方面的實(shí)施例提出了一種基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信系統(tǒng),所述SMP系統(tǒng)包括多個(gè)socket,其中每個(gè)所述socket為SMP結(jié)構(gòu),所述多個(gè)socket之間的端口獨(dú)立,所述基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信系統(tǒng)對(duì)每個(gè)所述socket進(jìn)行無(wú)鎖化通信處理,其中所述基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信系統(tǒng)包括:分配裝置、源地址轉(zhuǎn)換snat裝置和接收器。分配裝置用于將所述ip段中的ip通過(guò)哈希算法分配至每個(gè)數(shù)據(jù)流處理核心上;源地址轉(zhuǎn)換snat裝置用于對(duì)所述socket的每個(gè)端口配置多個(gè)源地址轉(zhuǎn)換snat的ip段,將snat的ip插入到接收器的維護(hù)表中,其中,將正向數(shù)據(jù)流的源地址設(shè)置為當(dāng)前所在數(shù)據(jù)流處理核心的私有地址;所述接收器用于存儲(chǔ)snat的ip,并在檢測(cè)到有逆向數(shù)據(jù)流返回時(shí),所述接收器檢測(cè)所述逆向數(shù)據(jù)流的目的地址是否為自身所在端口的snat的ip段;所述分配裝置還用于在所述逆向數(shù)據(jù)流的目的地址是自身所在端口的snat的ip段時(shí),采用ip通過(guò)哈希算法將所述逆向數(shù)據(jù)流的分配給包括所述私有地址的逆向數(shù)據(jù)流核心。根據(jù)本發(fā)明實(shí)施例的基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信系統(tǒng),通過(guò)哈希算法和無(wú)鎖隊(duì)列技術(shù),保證數(shù)據(jù)流的雙向親和性,即同一條流進(jìn)出由同一個(gè)cpu處理,避免核與核之間的內(nèi)存共享以及其帶來(lái)的鎖競(jìng)爭(zhēng),消除了共享內(nèi)存帶來(lái)的鎖開銷,對(duì)用戶透明,對(duì)數(shù)據(jù)流具有高度可控??删幊?,靈活性和可控性強(qiáng),同時(shí)性能優(yōu)化效果明顯。在本發(fā)明的一個(gè)實(shí)施例中,所述哈希算法為取余的哈希算法。在本發(fā)明的一個(gè)實(shí)施例中,還包括配置模塊,用于在所述socket的每個(gè)端口配置所述端口對(duì)應(yīng)的snat的ip段的第二個(gè)地址。本發(fā)明的附加方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。附圖說(shuō)明本發(fā)明的上述和/或附加的方面和優(yōu)點(diǎn)從結(jié)合下面附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中:圖1是根據(jù)本發(fā)明實(shí)施例的基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信方法的流程圖;圖2是根據(jù)本發(fā)明實(shí)施例的對(duì)稱多處理SMP系統(tǒng)的架構(gòu)圖;圖3是根據(jù)本發(fā)明實(shí)施例的snatip的分配示意圖;和圖4是根據(jù)本發(fā)明實(shí)施例的基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信系統(tǒng)的結(jié)構(gòu)示意圖。具體實(shí)施方式下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過(guò)參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。下面參考圖1描述根據(jù)本發(fā)明實(shí)施例的基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信方法,SMP系統(tǒng)包括多個(gè)socket,其中每個(gè)socket為SMP結(jié)構(gòu),多個(gè)socket之間的端口獨(dú)立,其中,每個(gè)socket進(jìn)行無(wú)鎖化通信包括如下步驟:步驟S110:將ip段中的ip通過(guò)哈希算法分配至每個(gè)數(shù)據(jù)流處理核心上,并對(duì)socket的每個(gè)端口配置多個(gè)源地址轉(zhuǎn)換snat的ip段,將snat的ip插入到接收器的維護(hù)表中,其中,將正向數(shù)據(jù)流的源地址設(shè)置為當(dāng)前所在數(shù)據(jù)流處理核心的私有地址。其中,每個(gè)socket中設(shè)置有具有接收數(shù)據(jù)流處理核心,接收數(shù)據(jù)流處理核心通過(guò)無(wú)鎖隊(duì)列將接收到的數(shù)據(jù)流按照五元組哈希分配到每個(gè)數(shù)據(jù)流處理核心上。步驟S120:當(dāng)接收器檢測(cè)到有逆向數(shù)據(jù)流返回時(shí),接收器檢測(cè)逆向數(shù)據(jù)流的目的地址是否為自身所在端口的snat的ip段。步驟S130:如果是,則采用ip通過(guò)哈希算法將逆向數(shù)據(jù)流的分配給包括私有地址的逆向數(shù)據(jù)流核心。其中,哈希算法為取余的哈希算法。其中,在socket的每個(gè)端口配置端口對(duì)應(yīng)的snat的ip段的第二個(gè)地址。下面參考圖2的具體的實(shí)施例對(duì)本方法進(jìn)行說(shuō)明。圖2為對(duì)稱多處理SMP系統(tǒng)的架構(gòu)圖,如圖所示,本實(shí)施例中的服務(wù)器采用NUMA(NonUniformMemoryAccessAchitecture)架構(gòu),SMP系統(tǒng)中的服務(wù)器有兩個(gè)socket,分別為socketS1和socketS2。每個(gè)socket為SMP架構(gòu),多個(gè)socket之間的端口獨(dú)立。具體的服務(wù)器配置參數(shù)如下:Cpu:westmereE56452.4GHZSocketnumber:2Cpunumber:2Cpucores:6L1cachesize:32kL2cachesize:256kL3cachesize:12288kMemory:96GBSMP系統(tǒng)采用pipe-line的報(bào)文處理模式。由于NUMA結(jié)構(gòu)具有對(duì)稱性,因此下面的例子中只對(duì)socketS1進(jìn)行分析,另一個(gè)socketS2以此類推。Core0為socketS1的接收數(shù)據(jù)流處理核心,用于收包,通過(guò)無(wú)鎖隊(duì)列Q1將收到的數(shù)據(jù)包按照五元組哈希分配到每個(gè)數(shù)據(jù)流處理核心上,如圖2中,socketS1中分配到每個(gè)數(shù)據(jù)流處理核心分別為core1、core2、core3、core4、core5。從而保證單向的流親和。數(shù)據(jù)流處理核心在處理數(shù)據(jù)包后需要做源地址轉(zhuǎn)換snat,將正向數(shù)據(jù)流的源地址設(shè)置為當(dāng)前所在數(shù)據(jù)流處理核心的私有的地址。接收數(shù)據(jù)流處理核心在接收到以該私有地址為目的地址的數(shù)據(jù)包后,可以使用與分配私有地址相同的哈希算法,將數(shù)據(jù)包分配給擁有該私有地址的數(shù)據(jù)流處理核心,從而實(shí)現(xiàn)雙向流親和。具體地,如圖3所示,雙向流親和的實(shí)現(xiàn)進(jìn)一步包括:通過(guò)配置文件在在socket的每個(gè)端口(port)上配置多個(gè)源地址轉(zhuǎn)換snat的ip段。如圖3所示,port0和port1分別包含的ip段為snatiplist1和snatiplist2。初始化時(shí),將ip段中的ip通過(guò)取余哈希算法,分配至每個(gè)數(shù)據(jù)流處理核心上,如圖3所示的corea、coreb、corec。將snat的ip段插入接收器Receiver/Dispatcher的維護(hù)表中,如T1、T2、T3。當(dāng)逆向數(shù)據(jù)流返回時(shí),接收器對(duì)目的地址進(jìn)行識(shí)別,判斷是否屬于自身所在端口的snatip段。如果是,采用ip通過(guò)取余的哈希算法,將該數(shù)據(jù)包分配至包括私有地址的逆向數(shù)據(jù)流核心,從而保證同一條數(shù)據(jù)流進(jìn)出方向在同一個(gè)核心 上。為了使逆向流數(shù)據(jù)包和正向流數(shù)據(jù)包從相同的端口接收,在socket的每個(gè)端口上配置snatip段的第二個(gè)地址。例如端口port0上的snatip段為1.1.1.0/24,則在port0上配置地址1.1.1.2/24之后,目的地址屬于1.1.1.0/24的數(shù)據(jù)包會(huì)通過(guò)直連路由轉(zhuǎn)發(fā)至port0。為了最大限度降低競(jìng)爭(zhēng)所帶來(lái)的損耗,數(shù)據(jù)包接收核心和數(shù)據(jù)流處理核心間采用單生產(chǎn)者、單消費(fèi)者的無(wú)鎖隊(duì)列實(shí)現(xiàn),并采用了批處理和預(yù)取等手段進(jìn)行優(yōu)化??梢岳斫獾氖?,上述說(shuō)明僅出于示例目地,本發(fā)明的實(shí)施例不限于此。本發(fā)明實(shí)施例的基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信方法,提出了一種基于SMP結(jié)構(gòu)的無(wú)鎖化流處理的哈希方法,可編程,保證了數(shù)據(jù)流的雙向親和性,避免了內(nèi)存共享所帶來(lái)的鎖競(jìng)爭(zhēng),對(duì)用戶透明,對(duì)數(shù)據(jù)流具有高度可控,同時(shí)性能優(yōu)化效果明顯。下面參考圖4描述根據(jù)本發(fā)明實(shí)施例的基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信系統(tǒng)100,SMP系統(tǒng)包括多個(gè)socket,其中每個(gè)socket為SMP結(jié)構(gòu),多個(gè)socket之間的端口獨(dú)立,基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信系統(tǒng)對(duì)每個(gè)socket進(jìn)行無(wú)鎖化通信處理,其中基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信系統(tǒng)包括:其中,基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信系統(tǒng)100包括:分配裝置110、源地址轉(zhuǎn)換snat裝置120、接收器分配裝置130和配置模塊140。分配裝置110用于將ip段中的ip通過(guò)哈希算法分配至每個(gè)數(shù)據(jù)流處理核心上;源地址轉(zhuǎn)換snat裝置120用于對(duì)socket的每個(gè)端口配置多個(gè)源地址轉(zhuǎn)換snat的ip段,將snat的ip插入到接收器130的維護(hù)表中,其中,將正向數(shù)據(jù)流的源地址設(shè)置為當(dāng)前所在數(shù)據(jù)流處理核心的私有地址;接收器130用于 存儲(chǔ)snat的ip并在檢測(cè)到有逆向數(shù)據(jù)流返回時(shí),接收器130檢測(cè)逆向數(shù)據(jù)流的目的地址是否為自身所在端口的snat的ip段;分配裝置110還用于在逆向數(shù)據(jù)流的目的地址是自身所在端口的snat的ip段時(shí),采用ip通過(guò)哈希算法將逆向數(shù)據(jù)流的分配給包括私有地址的逆向數(shù)據(jù)流核心。配置模塊用于在socket的每個(gè)端口配置端口對(duì)應(yīng)的snat的ip段的第二個(gè)地址。其中,哈希算法為取余的哈希算法。下面參考圖2的具體的實(shí)施例對(duì)本系統(tǒng)進(jìn)行說(shuō)明。如圖2所示,本實(shí)施例中的服務(wù)器采用NUMA(NonUniformMemoryAccessAchitecture)架構(gòu),SMP系統(tǒng)中的服務(wù)器有兩個(gè)socket,分別為socketS1和socketS2。每個(gè)socket為SMP架構(gòu),多個(gè)socket之間的端口獨(dú)立。具體的服務(wù)器配置參數(shù)如下:Cpu:westmereE56452.4GHZSocketnumber:2Cpunumber:2Cpucores:6L1cachesize:32kL2cachesize:256kL3cachesize:12288kMemory:96GBSMP系統(tǒng)采用pipe-line的報(bào)文處理模式。由于NUMA結(jié)構(gòu)具有對(duì)稱性,因此下面的例子中只對(duì)socketS1進(jìn)行分析,另一個(gè)socketS2以此類推。Core0為socketS1的接收數(shù)據(jù)流處理核心,用于收包,分配裝置110通過(guò)無(wú)鎖隊(duì)列Q1將收到的數(shù)據(jù)包按照五元組哈希分配到每個(gè)數(shù)據(jù)流處理核心上,如圖2 中,分配裝置110分配到每個(gè)數(shù)據(jù)流處理核心分別為core1、core2、core3、core4、core5,從而保證單向的流親和。源地址轉(zhuǎn)換snat裝置120在數(shù)據(jù)流處理核心處理數(shù)據(jù)包后做源地址轉(zhuǎn)換snat,將正向數(shù)據(jù)流的源地址設(shè)置為當(dāng)前所在數(shù)據(jù)流處理核心的私有的地址。接收數(shù)據(jù)流處理核心在接收到以該私有地址為目的地址的數(shù)據(jù)包后,可以使用與分配私有地址相同的哈希算法,將數(shù)據(jù)包分配給擁有該私有地址的數(shù)據(jù)流處理核心,從而實(shí)現(xiàn)雙向流親和。具體地,如圖3所示,雙向流親和的實(shí)現(xiàn)進(jìn)一步包括:源地址轉(zhuǎn)換snat裝置120通過(guò)配置文件在在socket的每個(gè)端口(port)上配置多個(gè)源地址轉(zhuǎn)換snat的ip段。如圖3所示,port0和port1分別包含的ip段為snatiplist1和snatiplist2。初始化時(shí),分配裝置110將ip段中的ip通過(guò)取余哈希算法,分配至每個(gè)數(shù)據(jù)流處理核心上,如圖3所示的corea、coreb、corec。源地址轉(zhuǎn)換snat裝置120將snat的ip段插入接收器130Receiver/Dispatcher的維護(hù)表中,如T1、T2、T3。當(dāng)逆向數(shù)據(jù)流返回時(shí),接收器130對(duì)目的地址進(jìn)行識(shí)別,判斷是否屬于自身所在端口的snatip段。如果是,分配裝置110采用ip通過(guò)取余的哈希算法,將該數(shù)據(jù)包分配至包括私有地址的逆向數(shù)據(jù)流核心,從而保證同一條數(shù)據(jù)流進(jìn)出方向在同一個(gè)核心上。為了使逆向流數(shù)據(jù)包和正向流數(shù)據(jù)包從相同的端口接收,配置模塊在socket的每個(gè)端口上配置snatip段的第二個(gè)地址。例如端口port0上的snatip段為1.1.1.0/24,則在port0上配置地址1.1.1.2/24之后,目的地址屬于1.1.1.0/24的數(shù)據(jù)包會(huì)通過(guò)直連路由轉(zhuǎn)發(fā)至port0。為了最大限度降低競(jìng)爭(zhēng)所帶來(lái)的損耗,數(shù)據(jù)包接收核心和數(shù)據(jù)流處理核心 間采用單生產(chǎn)者、單消費(fèi)者的無(wú)鎖隊(duì)列實(shí)現(xiàn),并采用了批處理和預(yù)取等手段進(jìn)行優(yōu)化。可以理解的是,上述說(shuō)明僅出于示例目地,本發(fā)明的實(shí)施例不限于此。本發(fā)明實(shí)施例的基于對(duì)稱多處理SMP系統(tǒng)的無(wú)鎖化通信系統(tǒng),提出了一種基于SMP結(jié)構(gòu)的無(wú)鎖化流處理的哈希方法,可編程,保證了數(shù)據(jù)流的雙向親和性,避免了內(nèi)存共享所帶來(lái)的鎖競(jìng)爭(zhēng),對(duì)用戶透明,對(duì)數(shù)據(jù)流具有高度可控,同時(shí)性能優(yōu)化效果明顯。在本說(shuō)明書的描述中,參考術(shù)語(yǔ)“一個(gè)實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本發(fā)明的至少一個(gè)實(shí)施例或示例中。在本說(shuō)明書中,對(duì)上述術(shù)語(yǔ)的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何的一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。盡管已經(jīng)示出和描述了本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域的普通技術(shù)人員而言,可以理解在不脫離本發(fā)明的原理和精神的情況下可以對(duì)這些實(shí)施例進(jìn)行多種變化、修改、替換和變型,本發(fā)明的范圍由所附權(quán)利要求及其等同限定。