◆王 璐 趙 瑜 陳志坤 孫寧偉
(中國人民解放軍91655部隊 北京 100036)
基于CUDA的大規模通信網絡日志數據分析
◆王 璐 趙 瑜 陳志坤 孫寧偉
(中國人民解放軍91655部隊 北京 100036)
體系作戰能力的發揮依靠軍事通信網絡物聯的作戰實體,而全面細致高效的日志分析是作戰實體安全可靠運行的重要保障。本文針對日志分析過程中計算任務量大、分析效率低、開發周期長的問題,設計并實現了一套基于CUDA的大規模軍事通信網絡日志數據并行分析框架。單節點在處理日志數據分析的效率與傳統CPU串行分析相比,可達到15~20倍的加速比。
大數據;GPU;并行處理;日志分析
未來信息化戰爭是基于信息系統的體系作戰,作戰實體不會孤立地存在和發揮作用,而是將所有預警探測單元、獨立的武器平臺、不同層次的軍事信息系統以網絡的形式“物聯”,并融合為一個密切聯系和影響的作戰體系。在體系與體系、整體與整體的對抗中,戰爭決策將高度依賴于海、陸、空、天戰場IT基礎設施和軍事信息系統的穩定、可靠、高效運行,任何問題的發生都可能引起連鎖效應,波及戰爭全局。
各級各類軍事信息系統、網絡設備、計算存儲單元、傳感器、通信鏈路等每天會產生大量的網絡日志和事件,作戰體系中各實體和網絡的運行性能、故障和安全隱患都蘊藏在這些數據中,因此有效的網絡日志數據采集分析是體系作戰能力發揮的可靠保障。
本文針對軍事通信網絡日志數據分析處理過程中計算任務量大、分析效率低、開發周期長等問題,將統計分析等任務與MapReduce模型相結合,設計并實現了一套基于CUDA(Compute Unified Device Architecture,通用并行計算架構)的網絡日志數據并行分析框架。單節點在處理日志數據分析的效率與傳統的串行分析相比,可達到15~20倍的加速比。與MapReduce框架相比,可顯著減少代碼量。
軍事通信網絡日志,主要包含有線/無線網絡設備日志(路由交換設備、安全設備)、鏈路性能監測日志(丟包率、誤碼率、時延)、流量日志、網絡接入設備運行日志、軍事信息系統運行日志等。日志記錄的內容通常是時間戳、監測對象ID、監測對象子項、監測維度、監測指標和監測指標值的集合。
原有通信網絡日志數據分析,主要依靠關系型數據庫,為實現數據高速檢索,往往會對一段時間前的日志數據進行降低時間精度的合并處理。另一方面,面對不斷擴建改造的通信網絡和日益增多的網絡接入實體,日志數據量成爆炸式增長態勢,傳統的網絡日志數據存儲、處理、挖掘技術已無力應對,難于針對故障定位、全網運行態勢等需求提供長時間段內、快速、全方位、細粒度的日志數據分析。
軍事通信網絡日志充分體現了大數據的四個特性:海量的規模、數據結構和數據源的復雜多樣、數據的高速產生、數據的真實性和低價值密度。日志分析往往是商業智能的基礎,而日益增長的日志信息條目使得大規模數據處理平臺的出現成為必然。MapReduce處理數據的有效性為日志分析提供了可靠的后盾。現有主流方法還會采用Flume、Kafka、Storm或Spark Streaming、HDFS組合的方式解決大規模日志數據分析問題。但在復雜的戰場條件下,一方面難于占用寶貴的網絡帶寬將海量實時的日志數據統一回傳至中心分析,另一方面在局部戰場環境或艦艇等作戰平臺也難于搭建基于Hadoop或Spark的大規模數據處理平臺。
2.1 MapReduce
MapReduce是一種利用底層分布式計算環境對大規模數據集(大于1TB)進行并行處理的計算模式[1]。它包括Map和Reduce兩個基本處理過程。其中Map過程就是將以“鍵值對”形式的數據記錄通過特定轉換方法以另一種鍵值對形式輸出。而Reduce過程就是將Map輸出的一組鍵值對進行合并,即將同樣主鍵下的不同數值合并到一個列表中,對傳入的中間結果列表數據進行某種整理或進一步的處理,并產生某種形式的最終輸出結果。目前業界比較通用的MapReduce計算框架是Hadoop。
2.2 CUDA
GPU(Graphic Processing Unit,圖形處理器)為密集型、高度并行化計算而設計,從圖1可以看出從2006年之后,GPU的計算性能開始逐漸超越CPU。而2010年后,革命性的Fermi架構引入了大規模并行硬件,使得GPU的計算性能數倍于CPU的計算性能[2,3]。

圖1 CPU和GPU峰值計算速度對比圖[3]
隨著計算架構的變化,計算機問題的求解模型已經從串行單線程向大規模并行計算轉變。盡管GPU上的大規模并行硬件非常適合這些問題,但需要開發者學習復雜的圖形處理器操作原語。
CUDA是NVIDIA公司2007年推出的用以簡化GPGPU(General Purpose GPU,即通用計算圖形處理器)加速的開發工具。通過CUDA,可以將GPU高速并行處理能力用于通用計算領域,并大幅度提高程序運算速度。CUDA的出現為大規模軍事通信網絡日志數據的并行處理提供了新的途徑,為基于單設備單節點海量日志的管理和分析創造了條件。
3.1 網絡日志數采集及預處理
軍事通信網絡日志是由網絡設備、軍事信息系統、傳感器等產生,包含戰場網絡環境最重要的信息且數量巨大。為了便于后期分析,采集存儲前在配置文件中按照不同日志源、不同時間段等定義數據分目錄分文件存儲規則及命名規則,并定義不同類型日志的數據結構。
單個日志分析節點收集周邊區域網絡日志數據到在緩沖區對數據進行去重操作,并按照已定義結構、存儲規則及命名規則對數據進行清洗和切割,最后存儲到節點本地磁盤中。
3.2 基于CUDA的并行計算基礎框架
利用基于CUDA實現類MapReduce設計模式的并行計算基礎框架,而在執行計算任務時,實現的技術細節隱藏在框架中,基本流程如圖2所示。

圖2 基于CUDA的并行計算框架基本流程
日志數據通過Scatter操作采用按時間段劃分、數據量取余的方式劃分為多個數據塊發到GPU不同內核上,然后根據分析任務需要通過Filter操作進行過濾。每個處理核心通過Map操作為數據添加ID,Sort操作將ID排序,使用Scatter操作將數據分發到不同GPU內核上,然后Reduce操作將同ID的數據進行累加等操作。最后將各個核的處理結果通過Gather操作收集起來,作為輸出結果存儲回文件系統。
(1)Scatter/Gather操作流程
框架通過Scatter/Gather操作將海量日志數據分段與合并、主內存與顯卡內存之間的數據拷貝傳輸過程透明化,只需設置時間粒度和處理核的個數,即可將輸入數據劃分為多組塊(塊數目等于線程數),并分配到顯卡內存上進行多核并行分析處理。
Scatter將數據輸出到非連續的存儲器地址內,Gather則從非連續的存儲器地址內讀取數據。在CUDA的架構中,每個ALU(Arithmetic and Logical Unit,算數邏輯單元)可以看作是一個處理核,通過Scatter& Gather操作,多個ALU間可以共享存儲器,實現對任意地址數據的讀寫操作。
(2)Filter操作
Filter 操作根據設定分析任務的生成過濾規則,按照時間戳、監測對象ID、監測對象子項、監測維度、監測指標和監測指標值區間對日志數據流進行多核協同并行過濾。
(3)Map操作
Map操作對每條數據增加一個ID值,ID值由用戶自定義或框架函數自動生成。函數將需要統計的日志對象ID和指標項拼接成id。如統計某日志對象ID某指標項的平均值,即可將日志對象ID與指標項拼接成為ID。
(4)Reduce操作
Reduce操作對相同ID的指標值進行累加等計算。在框架中,Reduce采用生成直方圖的方式,根據id對數據進行統計規約,CUDA SDK中默認提供了直方圖生成算法。
(5)Sort操作
直方圖生成算法的并行化,其難點在于如何減少數據分布不規則所產生的寫沖突,因此在建立直方圖前對數據進行預排序,可有效加速直方圖的構造。Sort操作按照一定規則,對數據的ID進行排序操作,便于Reduce進行規約處理。考慮到GPU的并行性,典型的GPU排序算法是基數排序,本框架中采用負載平衡的并行基數排序方法。
3.3 基于CUDA的網絡日志并行分析
網絡監測對象KPI數據提取是日志數據分析的重要需求。下面將部署在某區域外聯出入口的流量監測設備記錄的流量日志作為安全監測的數據源,以網絡KPI數據提取為例,介紹如何使用基于CUDA的并行計算基礎框架實現網絡日志分析。
設計基本網絡KPI指標為:每天總流量、平均流量、最大/最小流量、進/出流量、各IP地址流量值、曾出現過的IP地址集合等。某天所有IP地址每小時流量值計算實現步驟描述如下:
(1)流量日志數據讀取:根據配置文件日志結構、存儲及命名規則,按內存最大處理能力分批次抽取某天網絡流量日志數據文件,以小時為時間間隔分組至緩沖區。
(2)流量日志數據過濾:在緩沖區由GPU不同內核從日志數據文件中過濾出待統計時間段內的數據集。
(3)流量日志數據編號:通過Map操作對數據集記錄進行編號,轉換為{ id,<時間戳,包類型,包序號,源IP地址,源端口,目的IP地址,目的端口,包長度,…> }。
(4)流量分組加合:按照時間段、包類型、源地址、源端口、目的地址、目的端口,建立倒排索引。以按源地址進行統計為例,具體流程為:
①使用 Reduce 操作,按照源IP地址建立直方圖,即對數據按源地址進行分組;
②使用Sort操作,對每個新建的分組的數據記錄,按照 id 進行排序,默認為升序;
③使用 Prefix Sum(數組前綴和)的改進算法,計算id與前一id的差值,用于構造倒排表。
對于源數據過多,無法在一次直方圖計算中完成的,先按照IP地址取余,進行一次分組后再計算。反復進行上述過程,直到直方圖上的一條數據即為一個IP地址。
(5)分析結果存儲:從GPU中讀取處理完成的數據,并保存到磁盤上;倒排的數據按Scatter操作設定的時間間隔進行分組存儲。
4.1 實驗環境構建

表1 實驗平臺硬件配置參數表
本實驗通過搭建基于CUDA軍事通信網絡日志數據分析平臺來驗證方法的有效性。實驗環境硬件平臺為ASUS ESC 2000 G2工作站1臺,其配置參數如表1所示。
整個系統使用NVIDIA提供的Nsight Eclipse Edition[4]在Ubuntu 12.04 x64系統下開發,開發使用的CUDA版本為7.0。
4.2 GPU與CPU計算性能對比實驗
實驗以網絡流量日志分析問題為例,選取不同數據量級的日志信息,采用單CPU計算、MySQL數據庫查詢、CPU和GPU組合計算3種方式,在聚類統計排序、去重查找2種應用場景下的計算性能。
(1)實驗數據
網絡流量日志數據記錄為源IP地址、源端口號、目的IP地址、目的端口號、協議、數據包大小、數據包特征的集合。測試的3組日志數據記錄條數分別為2130萬、13460萬、52240萬。
(2)性能對比
實驗1計算任務為IP地址流量按分鐘聚類統計后排序,性能結果如表2、圖3所示。