專利名稱:數(shù)據(jù)分流的實現(xiàn)方法和裝置的制作方法
技術領域:
本發(fā)明涉及計算機領域,并且特別地,涉及一種數(shù)據(jù)分流的實現(xiàn)方法和裝置。
背景技術:
目前的萬兆零拷貝技術主要是基于htel網(wǎng)卡提供硬件多隊列來實現(xiàn),這樣雖然可以提高性能,但由于硬件實現(xiàn)的靈活性有限,對一些特殊的協(xié)議難以使用它來實現(xiàn)分流, 例如,ipv4封裝到ipv6中,硬件分流可以按照ipv4或者ipv6的源目的地址進行分流,但無法按照封裝到ipv6中的ipv4協(xié)議進行分流,可見,硬件分流的適用情況是非常有限的。針對相關技術中硬件分流技術不能應對所有分流場景的問題,目前尚未提出有效的解決方案。
發(fā)明內容
針對相關技術中硬件分流技術不能應對所有分流場景的問題,本發(fā)明提出一種數(shù)據(jù)分流的實現(xiàn)方法和裝置,能夠借助多CPU的方式在各種場景下有效實現(xiàn)數(shù)據(jù)的分流。本發(fā)明的技術方案是這樣實現(xiàn)的根據(jù)本發(fā)明的實施例,提供了一種數(shù)據(jù)分流的實現(xiàn)方法。根據(jù)本發(fā)明實施例的數(shù)據(jù)分流的實現(xiàn)方法包括多個中央處理單元CPU判斷需要分流的數(shù)據(jù)是否屬于各自需要處理的數(shù)據(jù),其中,對于每個CPU判斷一數(shù)據(jù)時,判斷該數(shù)據(jù)對應的協(xié)議是否是該CPU對應的協(xié)議;對于每個CPU,在判斷一數(shù)據(jù)是該CPU對應的協(xié)議的情況下,該CPU將該數(shù)據(jù)存儲至該CPU對應的處理隊列中。其中,需要分流的數(shù)據(jù)來自至少一個底層硬件隊列,并且,在進行判斷時,每個CPU 均輪詢所有底層硬件隊列。此外,每個CPU判斷一數(shù)據(jù)對應的協(xié)議是否是該CPU對應的協(xié)議包括該CPU根據(jù)其協(xié)議對應的哈希方式對該數(shù)據(jù)進行哈希處理,根據(jù)處理結果判斷該數(shù)據(jù)對應的協(xié)議是否是該CPU對應的協(xié)議。此外,對于每個CPU,在判斷一數(shù)據(jù)不是該CPU對應的協(xié)議的情況下,該CPU繼續(xù)判斷下一需要分流的數(shù)據(jù)。該方法可進一步包括每個CPU對其處理隊列中的數(shù)據(jù)進行處理。可選地,每個CPU對應的協(xié)議為IPv4協(xié)議或IPv6協(xié)議。根據(jù)本發(fā)明的實施例,還提供了一種數(shù)據(jù)分流的實現(xiàn)裝置。該裝置包括多個CPU,其中,每個CPU包括判斷模塊,用于判斷需要分流的數(shù)據(jù)是否屬于該CPU需要處理的數(shù)據(jù),其中,判斷模塊具體用于判斷該數(shù)據(jù)對應的協(xié)議是否是所在CPU對應的協(xié)議;存儲模塊,用于以隊列的形式保存被判斷為所在CPU需要處理的數(shù)據(jù)。其中,需要分流的數(shù)據(jù)來自至少一個底層硬件隊列,并且,在進行判斷時,每個CPU 的判斷模塊均輪詢所有底層硬件隊列。此外,判斷模塊用于根據(jù)所在CPU的協(xié)議對應的哈希方式對該數(shù)據(jù)進行哈希處理,并根據(jù)處理結果判斷該數(shù)據(jù)對應的協(xié)議是否是所在CPU對應的協(xié)議。此外,對于每個CPU的判斷模塊,在判斷一數(shù)據(jù)不是所在CPU對應的協(xié)議的情況下,判斷模塊繼續(xù)判斷下一需要分流的數(shù)據(jù)。本發(fā)明通過由多個CPU對需要分流的數(shù)據(jù)進行判斷,并將各自需要處理的數(shù)據(jù)存入各自的隊列中,能夠有效克服相關技術中硬件分流存在的弊端,在各種場景下均有效實現(xiàn)數(shù)據(jù)分流。
圖1是根據(jù)本發(fā)明實施例的數(shù)據(jù)分流的實現(xiàn)方法的流程圖;圖加是根據(jù)本發(fā)明實施例的數(shù)據(jù)分流的實現(xiàn)方法的原理示意圖;圖2b是根據(jù)本發(fā)明實施例的方案發(fā)送數(shù)據(jù)報文的原理示意圖;圖3是根據(jù)本發(fā)明實施例的數(shù)據(jù)分流的實現(xiàn)裝置中CPU的框圖。
具體實施例方式根據(jù)本發(fā)明的實施例,提供了一種數(shù)據(jù)分流的實現(xiàn)方法。如圖1所示,根據(jù)本發(fā)明實施例的數(shù)據(jù)分流的實現(xiàn)方法包括步驟SlOl,多個中央處理單元CPU (可以是該CPU執(zhí)行的線程)判斷需要分流的數(shù)據(jù)是否屬于各自需要處理的數(shù)據(jù),其中,對于每個CPU判斷一數(shù)據(jù)時,判斷該數(shù)據(jù)對應的協(xié)議是否是該CPU對應的協(xié)議;步驟S103,對于每個CPU,在判斷一數(shù)據(jù)是該CPU對應的協(xié)議的情況下,該CPU將該數(shù)據(jù)存儲至該CPU對應的處理隊列中。其中,需要分流的數(shù)據(jù)來自至少一個底層硬件隊列,并且,在進行判斷時,每個CPU 均輪詢所有底層硬件隊列。此外,在每個CPU判斷一數(shù)據(jù)對應的協(xié)議是否是該CPU對應的協(xié)議時,該CPU根據(jù)其協(xié)議對應的哈希方式對該數(shù)據(jù)進行哈希處理,根據(jù)處理結果判斷該數(shù)據(jù)對應的協(xié)議是否是該CPU對應的協(xié)議。此外,對于每個CPU,在判斷一數(shù)據(jù)不是該CPU對應的協(xié)議的情況下,該CPU繼續(xù)判斷下一需要分流的數(shù)據(jù)。該方法可以進一步包括每個CPU對其處理隊列中的數(shù)據(jù)(即,完成分流后的數(shù)據(jù))進行處理。可選地,每個CPU對應的協(xié)議為IPv4協(xié)議或IPv6協(xié)議,當然,也可以對應更多的協(xié)議,并且,協(xié)議的類型也不僅僅限于以上兩種,任何需要進行數(shù)據(jù)分流的場景中的協(xié)議都可以采用本發(fā)明的上述方案進行分流。在實際應用中,可以針對萬兆網(wǎng)卡多接收隊列的特點,為每個CPU核分配一個網(wǎng)卡硬件描述符隊列,并且分配相應的軟件描述符隊列,配置萬兆網(wǎng)卡自動將報文發(fā)送到相應隊列上去。其中,對于每個隊列,都為其分配獨立的數(shù)據(jù)緩沖區(qū),并通過內存映射的方式將數(shù)據(jù)緩沖區(qū)隊列映射到應用程序中去,從而驅動對緩沖區(qū)的修改可以直接反映到應用程序中來,從而避免了不必要的內存拷貝。
并且,每個隊列可以采用循環(huán)隊列的數(shù)據(jù)結構,此算法為無鎖(lock-free)算法, 避免了加鎖對性能的影響。此外,在以上架構基礎上,可以添加一層軟件分類層。由于硬件分流的多隊列已不能滿足復雜的協(xié)議環(huán)境,所以對每個線程隊列來說,真正的數(shù)據(jù)來源可能來自于任何一個底層的硬件隊列,所以每個線程輪詢每一個底層硬件隊列,并按照所需的硬件協(xié)議定制的 hash方式,將計算結果符合的數(shù)據(jù)包放到自己的隊列中來,不符合的數(shù)據(jù)包則不作任何操作,等其它線程隊列來訪問。這樣就可以用軟件來實現(xiàn)各種不同協(xié)議的分流。如圖2a所示,CPUO、CPUl、CPU2和CPU3中的部分CPU可以對應于IPv4協(xié)議,另一部分可以對應于IPv6協(xié)議,這些CPU的線程(位于應用程序部分)能夠對內核驅動部分中萬兆網(wǎng)卡的數(shù)據(jù)進行處理,其中,萬兆網(wǎng)卡的數(shù)據(jù)(網(wǎng)絡數(shù)據(jù)報文)會存儲在共享內存中, 各個CPU能夠獨立地訪問這些內存中的數(shù)據(jù)。如圖2b所示,在發(fā)送報文時,各個CPU會將報文發(fā)送至各個CPU所對應的共享內存,之后,會將報文發(fā)送至網(wǎng)卡,之后發(fā)送到網(wǎng)絡。通過上述方案,就能夠在硬件多隊列的基礎上,借助多隊列的方式實現(xiàn)萬兆零拷貝分流,并且可以實現(xiàn)對各種網(wǎng)絡協(xié)議的深度解析的分流,保證分流的精度。根據(jù)本發(fā)明的實施例,提供了一種數(shù)據(jù)分流的實現(xiàn)裝置。根據(jù)本發(fā)明實施例的數(shù)據(jù)分流的實現(xiàn)裝置可以包括多個CPU,其中,如圖3所示, 每個CPU可以包括判斷模塊31,用于判斷需要分流的數(shù)據(jù)是否屬于該CPU需要處理的數(shù)據(jù),其中,判斷模塊具體用于判斷該數(shù)據(jù)對應的協(xié)議是否是所在CPU對應的協(xié)議;存儲模塊 32,連接至判斷模塊31,用于以隊列的形式保存被判斷為所在CPU需要處理的數(shù)據(jù)。其中,需要分流的數(shù)據(jù)來自至少一個底層硬件隊列,并且,在進行判斷時,每個CPU 的判斷模塊均輪詢所有底層硬件隊列。具體地,判斷模塊用于根據(jù)所在CPU的協(xié)議對應的哈希方式對該數(shù)據(jù)進行哈希處理,并根據(jù)處理結果判斷該數(shù)據(jù)對應的協(xié)議是否是所在CPU對應的協(xié)議。此外,對于每個CPU的判斷模塊,在判斷一數(shù)據(jù)不是所在CPU對應的協(xié)議的情況下,判斷模塊繼續(xù)判斷下一需要分流的數(shù)據(jù)。綜上,借助于本發(fā)明的上述技術方案,通過由多個CPU對需要分流的數(shù)據(jù)進行判斷,并將各自需要處理的數(shù)據(jù)存入各自的隊列中,能夠有效克服相關技術中硬件分流存在的弊端,在各種場景下均有效實現(xiàn)數(shù)據(jù)分流。以上僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。
權利要求
1.一種數(shù)據(jù)分流的實現(xiàn)方法,其特征在于,包括多個中央處理單元CPU判斷需要分流的數(shù)據(jù)是否屬于各自需要處理的數(shù)據(jù),其中,對于每個CPU判斷一數(shù)據(jù)時,判斷該數(shù)據(jù)對應的協(xié)議是否是該CPU對應的協(xié)議;對于每個CPU,在判斷一數(shù)據(jù)是該CPU對應的協(xié)議的情況下,該CPU將該數(shù)據(jù)存儲至該 CPU對應的處理隊列中。
2.根據(jù)權利要求1所述的實現(xiàn)方法,其特征在于,需要分流的數(shù)據(jù)來自至少一個底層硬件隊列,并且,在進行判斷時,每個CPU均輪詢所有底層硬件隊列。
3.根據(jù)權利要求1所述的實現(xiàn)方法,其特征在于,每個CPU判斷一數(shù)據(jù)對應的協(xié)議是否是該CPU對應的協(xié)議包括該CPU根據(jù)其協(xié)議對應的哈希方式對該數(shù)據(jù)進行哈希處理,根據(jù)處理結果判斷該數(shù)據(jù)對應的協(xié)議是否是該CPU對應的協(xié)議。
4.根據(jù)權利要求1所述的實現(xiàn)方法,其特征在于,對于每個CPU,在判斷一數(shù)據(jù)不是該 CPU對應的協(xié)議的情況下,該CPU繼續(xù)判斷下一需要分流的數(shù)據(jù)。
5.根據(jù)權利要求1所述的實現(xiàn)方法,其特征在于,進一步包括 每個CPU對其處理隊列中的數(shù)據(jù)進行處理。
6.根據(jù)權利要求1至5中任一項所述的實現(xiàn)方法,其特征在于,每個CPU對應的協(xié)議為 IPv4協(xié)議或IPv6協(xié)議。
7.一種數(shù)據(jù)分流的實現(xiàn)裝置,其特征在于,包括多個CPU,其中,每個CPU包括 判斷模塊,用于判斷需要分流的數(shù)據(jù)是否屬于該CPU需要處理的數(shù)據(jù),其中,所述判斷模塊具體用于判斷該數(shù)據(jù)對應的協(xié)議是否是所在CPU對應的協(xié)議;存儲模塊,用于以隊列的形式保存被判斷為所在CPU需要處理的數(shù)據(jù)。
8.根據(jù)權利要求7所述的實現(xiàn)裝置,其特征在于,需要分流的數(shù)據(jù)來自至少一個底層硬件隊列,并且,在進行判斷時,每個CPU的判斷模塊均輪詢所有底層硬件隊列。
9.根據(jù)權利要求7所述的實現(xiàn)裝置,其特征在于,所述判斷模塊用于根據(jù)所在CPU的協(xié)議對應的哈希方式對該數(shù)據(jù)進行哈希處理,并根據(jù)處理結果判斷該數(shù)據(jù)對應的協(xié)議是否是所在CPU對應的協(xié)議。
10.根據(jù)權利要求7所述的實現(xiàn)裝置,其特征在于,對于每個CPU的判斷模塊,在判斷一數(shù)據(jù)不是所在CPU對應的協(xié)議的情況下,判斷模塊繼續(xù)判斷下一需要分流的數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)分流的實現(xiàn)方法和裝置,其中,該方法包括多個中央處理單元CPU判斷需要分流的數(shù)據(jù)是否屬于各自需要處理的數(shù)據(jù),其中,對于每個CPU判斷一數(shù)據(jù)時,判斷該數(shù)據(jù)對應的協(xié)議是否是該CPU對應的協(xié)議;對于每個CPU,在判斷一數(shù)據(jù)是該CPU對應的協(xié)議的情況下,該CPU將該數(shù)據(jù)存儲至該CPU對應的處理隊列中。本發(fā)明通過由多個CPU對需要分流的數(shù)據(jù)進行判斷,并將各自需要處理的數(shù)據(jù)存入各自的隊列中,能夠有效克服相關技術中硬件分流存在的弊端,在各種場景下均有效實現(xiàn)數(shù)據(jù)分流。
文檔編號G06F9/50GK102495764SQ20111040290
公開日2012年6月13日 申請日期2011年12月6日 優(yōu)先權日2011年12月6日
發(fā)明者萬偉, 劉興彬, 劉鐵, 孫一鳴, 朱春屹, 李云華, 李博文, 楊錦濤, 王潑, 董建珊, 陳科 申請人:曙光信息產(chǎn)業(yè)股份有限公司