本發明涉及海量數據的處理及交互技術,尤其涉及海量數據高速處理及交互的系統及方法。
背景技術:
::目前網卡的數據包處理采用多核多隊列架構,線程與核綁定,每個線程處理一個隊列中的數據包。內核中先分配一個大的環形緩沖區,該緩沖區切割成若干個內存節點。網卡接收數據包時,從環形緩沖區中獲取內存節點,并將數據dma到內存節點上。并維護一個接收隊列環,該環中保存數據包的內存節點地址。當應用程序打開一個接收隊列捕包,這個接收隊列環和內核先分配好的大的環形緩沖區會映射到應用的進程空間,應用層只需要根據接收隊列環就可以獲取數據包的內存。這種方式簡稱零拷貝,能夠較大的提高網絡數據的捕獲性能,數據包的捕獲后的處理都是在cpu上,但在高性能的網絡中(>40ge),實時網絡的分析面臨極大的挑戰,即使利用多cpu多線程,基于硬件的限制,cpu的核也無法達到足夠多來實現高并發,容易出現丟包。名詞解釋:網卡,也叫“網絡適配器”,英文全稱為“networkinterfacecard”,簡稱nic。圖形處理器,又稱顯示核心、視覺處理器、顯示芯片,是一種專門在個人電腦、工作站、游戲機和一些移動設備(如平板電腦、智能手機等)上圖像運算工作的微處理器,英文全稱“graphicsprocessingunit”,簡稱gpu。存儲器直接訪問,是指一種高速的數據傳輸操作,允許在外部設備和存儲器之間直接讀寫數據,既不通過cpu,也不需要cpu干預,英文全稱“directmemoryaccess”,簡稱dma。技術實現要素:本發明為了解決上述現有技術的問題,提出一種海量數據高速處理、交互的系統,包括:數據收發模塊,用于與網絡連接接收或發送數據;中央處理模塊,根據數據處理模塊中gpu的數量n,開辟n塊環形緩沖區,緩沖數據收發模塊接收的數據,在積攢了一定的數據量后或一定時間內將數據拷貝至系統內存,并事先將系統內存直接映射到各gpu,待gpu處理完畢后將處理后的結果通過數據收發模塊發出;數據處理模塊,包含至少一個gpu,所述數據處理模塊通過dma映射獲取內存中對應的數據,控制對應的gpu進行多線程高并發處理,并將處理后的結果返回給中央處理模塊。同時,本發明還提出了一種海量數據高速處理、交互的方法,包括如下步驟:步驟1:中央處理模塊根據gpu的數量n,開辟n塊的環形緩沖區,將每塊環形緩沖區分割成若干節點,并將環形緩沖區映射到系統的應用層;步驟2:中央處理模塊將內存映射到gpu;步驟3:數據到達數據收發模塊后,通過分流的機制選擇對應的環形緩沖區,通過dma映射到對應的環形緩沖區的節點中;步驟4:中央處理模塊判斷每個環形緩沖區中的數據包是否已經到達了對應的gpu批量處理的數量,若已到達,則執行下一步驟,若未到達,則等待固定的時間后再執行下一步驟;步驟5:中央處理模塊將環形緩沖區內的數據包進行整理,拷貝到事先映射到gpu的系統內存中;步驟6:gpu開啟多線程高并發處理數據包,并將處理后的數據包返回給中央處理模塊;步驟7:中央處理模塊根據處理結果指導數據收發模塊轉發處理后的數據包。本發明利用了gpu的多線程高并發處理能力,提高了數據包的處理速度,數據包從網卡直接dma到內存,并且將內存映射到gpu,省去了cpu和gpu的頻繁pci通信內存拷貝,極大的節省了數據包的傳輸時間,實現了nic與gpu之間的海量數據高速交互,同時也使得系統極大地提高了網絡數據包的處理吞吐量,可以滿足高性能的實時網絡分析。附圖說明圖1是系統原理圖;圖2是本發明的流程圖。具體實施方式以下結合附圖和實施例,詳細說明本發明的結構及原理。圖1是本發明一實施例提供的系統原理圖。該系統包括數據收發模塊、中央處理模塊及數據處理模塊。通過這三個模塊可以實現系統各模塊之間以及系統之間的海量數據的處理及交互,本發明所指的海量數據的數量級為大于40ge的數據流量。數據收發模塊所采用的硬件就是網卡,用于與網絡連接接收或發送數據。中央處理模塊所涉及到的硬件為cpu,中央處理模塊根據數據處理模塊中gpu的數量n,開辟n塊環形緩沖區,每一塊環形緩沖區用來緩沖網卡接收到的至少一個數據流的數據包,中央處理模塊等待環形緩沖區內積攢到一定的數據量或者等待一定的時間后,將緩沖的數據包拷貝至系統內存,并事先將系統內存直接映射到各gpu,gpu便獲得了數據包,這樣省去了cpu頻繁的向gpupci通信拷貝數據。待gpu處理完畢后將處理后的結果通過數據收發模塊發出。中央處理模塊根據gpu的個數n,還會分配n個環形隊列,每一個環形隊列對應一個環形緩沖區,并且將環形隊列映射到用戶層,每個環形隊列用來保存對應的環形緩沖區中數據包的接收數量情況,以及數據包的內存地址偏移量。數據包到達網卡,通過分流的機制,選擇環形緩沖區,通過dma映射到對應的環形緩沖區的節點中。該分流機制由中央處理模塊設置一個哈希表來實現,通過該哈希表將同一個數據流的數據包放到對應的環形緩沖區內。中央處理模塊在緩沖過程中會實時監控緩沖完畢的數據量,當達到批量處理的數據包數量,則中央處理模塊將積攢的數據包傳輸到數據處理模塊,如果還是沒有積攢到批量處理的數據包數量,在一定時間內有多少數據包就讓gpu處理多少。數據處理模塊,包含至少一個gpu,數據處理模塊通過dma映射獲取系統內存中對應的數據,控制對應的gpu進行多線程高并發處理,并將處理后的結果返回給中央處理模塊。gpu進行多線程高并發處理的過程是基于aho-corasick算法加以實現的,即將批量處理的數據包存放于共享內存空間實現所有流處理器對其的并行化處理。在gpu上實現aho-corasick算法時,有限狀態機(deter-ministicfiniteautomaton,dfa)被保存為一個二維數組,數組的大小為狀態數和字母集的乘積。每個單元有四個字節,頭兩個字節表示轉移的下一狀態,后兩個字節用來表示該狀態是否是最終狀態。gpu對數據包的處理包含了一個gpu加速庫,包括多個cuda核函數,這些函數以不同的方式結合實現特定的檢測和分析任務,主要包括數據包過濾核函數、獲取ip地址核函數、利用hash算法構建ip_table核函數、每個ip節點和每種協議流量統計核函數、流量匯聚核函數、tcp吞吐量計算核函數、數據包分類成流核函數、tcp協議分析核函數。如圖2所示,本發明實現海量數據高速處理、交互的方法主要包括以下步驟:步驟1:中央處理模塊根據gpu的數量n,開辟n塊的環形緩沖區,將每塊環形緩沖區分割成若干節點,并將環形緩沖區映射到系統的應用層;步驟2:中央處理模塊將內存映射到gpu;步驟3:數據到達數據收發模塊后,通過分流的機制選擇對應的環形緩沖區,通過dma映射到對應的環形緩沖區的節點中;步驟4:中央處理模塊判斷每個環形換沖區中的數據包是否已經達到了對應的gpu批量處理的數量,若已到達,則執行下一步驟,若未到達,則等待固定的時間后再執行下一步驟;本發明所指的gpu一次處理的數據包達到了批量處理的數量,是指這個數量值至少是滿足:gpu并行處理該數量數據包的速度是高于cpu串行處理該數量數據包的速度的;步驟5:中央處理模塊將環形緩沖區內的數據包進行整理,拷貝到事先映射到gpu的系統內存中;步驟6:gpu開啟多線程高并發處理數據包,并將處理后的數據包返回給中央處理模塊;在這個步驟中,gpu處理的數據包通過dma映射獲取。步驟7:中央處理模塊根據處理結果指導數據收發模塊轉發處理后的數據包。本發明將系統內存直接映射到gpu,這樣省去了cpu和gpu之間pci通訊拷貝,并且在gpu上實現aho-corasick算法,實現多個cuda核函數,充分利用gpu高并發對數據包處理,實現nic與多gpu之間海量數據高速交互。應當理解的是,上述針對具體實施例的描述較為詳細,并不能因此而認為是對本發明專利保護范圍的限制,本發明的專利保護范圍應以所附權利要求為準。當前第1頁12當前第1頁12