呂高鋒,王玉鵬,楊鎔嘉,唐 竹
(1.國防科技大學(xué)計(jì)算機(jī)學(xué)院,湖南 長(zhǎng)沙 410073;2.78156部隊(duì),甘肅 定西 748100)
目前,已存在多種針對(duì)大規(guī)模網(wǎng)絡(luò)的狀態(tài)屬性采集方法,這些方法在流量覆蓋、軟硬件開銷和帶寬資源占用等方面各有優(yōu)缺點(diǎn)。例如,早期的數(shù)據(jù)采集主要基于簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議SNMP(Simple Network Management Protocol)[1],但由于SNMP通常采用輪詢的方式采集設(shè)備信息,在擁有很多設(shè)備的大型網(wǎng)絡(luò)中,輪詢流量容易導(dǎo)致網(wǎng)絡(luò)擁塞,并且其支持的信息量也很小。因此,Cisco推出了NetFlow協(xié)議[2,3]來實(shí)現(xiàn)流量監(jiān)控,但會(huì)導(dǎo)致較高的CPU開銷和內(nèi)存負(fù)擔(dān)。為了降低交換機(jī)或路由器的CPU開銷和內(nèi)存負(fù)擔(dān),基于專用芯片支持的sFlow[4]技術(shù)應(yīng)運(yùn)而生。隨著采集技術(shù)的發(fā)展,基于Sketch的數(shù)據(jù)采集方法(如SketchVisor[5]、CountMax[6]、Sketchlearn[7]和SpreadSketch[8]等)被提出,該類方法采用更緊湊的數(shù)據(jù)結(jié)構(gòu),以固定大小的內(nèi)存匯總所有數(shù)據(jù)包的流量統(tǒng)計(jì)信息,具有更低的資源消耗,同時(shí)只產(chǎn)生有界的錯(cuò)誤率。然而,現(xiàn)有基于Sketch的測(cè)量方案在高流量負(fù)載下會(huì)出現(xiàn)嚴(yán)重的性能下降,將其應(yīng)用于網(wǎng)絡(luò)測(cè)量時(shí)會(huì)不可避免地帶來巨大的計(jì)算開銷。
隨著數(shù)據(jù)平面可編程技術(shù)的不斷發(fā)展,由數(shù)據(jù)包內(nèi)嵌自定義統(tǒng)計(jì)信息的帶內(nèi)測(cè)量方法成為熱點(diǎn),同時(shí)很多Sketch方法也可以基于數(shù)據(jù)平面可編程語言P4進(jìn)行快速高效的實(shí)現(xiàn),大大降低了軟件實(shí)現(xiàn)的資源開銷和芯片流片的代價(jià)成本。FlowRadar[9]測(cè)量方法即以P4語言為實(shí)現(xiàn)基礎(chǔ),但與Sketch類方法對(duì)數(shù)據(jù)流進(jìn)行概率采樣或近似估計(jì)不同,F(xiàn)lowRadar使用全采樣的方法提取流的五元組信息以及流、分組計(jì)數(shù),可實(shí)現(xiàn)數(shù)據(jù)中心等大流量情況下的全局流分析。但是,由于在匹配流和更新計(jì)數(shù)器的過程中FlowRadar采用了Bloom Filter,導(dǎo)致該方法在哈希計(jì)算過程中存在較大的計(jì)算開銷和隨機(jī)內(nèi)存訪問開銷。
針對(duì)上述問題,本文結(jié)合Agg-Evict(聚合-逐出)[10]快速聚合思想,通過減少FlowRadar在匹配流和更新計(jì)數(shù)器過程中哈希計(jì)算所產(chǎn)生的開銷,減少網(wǎng)絡(luò)設(shè)備數(shù)據(jù)統(tǒng)計(jì)開銷,從而提高數(shù)據(jù)轉(zhuǎn)發(fā)的吞吐量,滿足網(wǎng)絡(luò)海量數(shù)據(jù)量采集需求。
FlowRadar作為一種全時(shí)段全采樣的數(shù)據(jù)流統(tǒng)計(jì)方法,解決了NetFlow無法處理海量數(shù)據(jù)流的不足。FlowRadar的設(shè)計(jì)關(guān)鍵點(diǎn)是如何在給定的有限流處理時(shí)間內(nèi),在Hash表中維護(hù)流的五元組以及流計(jì)數(shù)和分組計(jì)數(shù),同時(shí)保持較小的占用內(nèi)存和具有恒定的流處理時(shí)間。FlowRadar的流處理過程如圖1[9]所示,當(dāng)一個(gè)數(shù)據(jù)包到來時(shí),F(xiàn)lowRadar首先提取數(shù)據(jù)包的五元組字段,同時(shí)檢查流過濾器判定該流是否已經(jīng)被存儲(chǔ)在流的集合中。如果該數(shù)據(jù)包來自一個(gè)新的流,F(xiàn)lowRadar首先更新計(jì)數(shù)器表,這包含流異或操作、增加流計(jì)數(shù)和報(bào)文計(jì)數(shù)。如果一個(gè)數(shù)據(jù)包是已經(jīng)存在的流,F(xiàn)lowRadar只增加報(bào)文計(jì)數(shù)。最后,F(xiàn)lowRadar在恒定的短時(shí)間內(nèi),定期地將這些編碼后的數(shù)據(jù)信息發(fā)送到遠(yuǎn)程采集器進(jìn)行解碼。
Figure 1 Flow processing of FlowRadar圖1 FlowRadar流處理
FlowRadar的數(shù)據(jù)結(jié)構(gòu)由流過濾器和計(jì)數(shù)器表2部分組成[9],具體如圖2所示。對(duì)于如何解決在Hash過程中產(chǎn)生的流沖突問題,F(xiàn)lowRadar首先將同一流散列到多個(gè)位置(如Bloom Filter),這樣其中一個(gè)單元格中的一個(gè)流與另一個(gè)流碰撞的可能性就降低了。當(dāng)多個(gè)流落在同一個(gè)單元格中時(shí),如果將它們存儲(chǔ)在一個(gè)鏈接表中開銷會(huì)很大,F(xiàn)lowRadar則使用異或函數(shù)來對(duì)同一個(gè)單元格產(chǎn)生沖突的流五元組信息以及計(jì)數(shù)器進(jìn)行編碼。因此,F(xiàn)lowRadar可以在多個(gè)流共享的固定大小的內(nèi)存單元格中工作,并且對(duì)所有流都有固定的更新和插入時(shí)間。
Figure 2 Data structure of FlowRadar圖2 FlowRadar數(shù)據(jù)結(jié)構(gòu)
為了進(jìn)行聚合更新以節(jié)省計(jì)算和內(nèi)存訪問,Agg-Evict設(shè)計(jì)了如圖3[10]所示的加速框架,其中聚合器包含k個(gè)KV(Key Value)數(shù)組,每個(gè)數(shù)組有l(wèi)個(gè)KV對(duì),每個(gè)KV對(duì)的Key部分存儲(chǔ)流id,Value部分存儲(chǔ)相應(yīng)的聚合頻率。
Figure 3 Framework of Agg-Evict圖3 Agg-Evict加速框架示意圖
該框架將網(wǎng)絡(luò)測(cè)量分為2個(gè)階段:聚合和逐出。在聚合階段,框架主動(dòng)針對(duì)所有入站數(shù)據(jù)包聚合流id,并將唯一的流id與其聚合頻率存儲(chǔ)在一個(gè)稱為聚合器的數(shù)據(jù)結(jié)構(gòu)中,同時(shí)使用一些連續(xù)的內(nèi)存訪問(高緩存位置)。在逐出階段,當(dāng)聚合器滿時(shí),一次將存儲(chǔ)在其中的一些流id及其聚合頻率逐出到現(xiàn)有的測(cè)量解決方案中,進(jìn)行聚合更新,從而獲得次線性處理時(shí)間[10]。但是,該方案以特定CPU的SSE2 SIMD指令進(jìn)行KV查詢和匹配,提高了流id哈希值與KV對(duì)的匹配判定效率,不適合于通用交換芯片或P4處理器架構(gòu)。因此,本文基于協(xié)議無關(guān)交換架構(gòu),采用P4語言重新設(shè)計(jì)實(shí)現(xiàn)了該加速框架,并進(jìn)行了實(shí)驗(yàn)驗(yàn)證。
網(wǎng)絡(luò)大數(shù)據(jù)采集在許多方面都可以通過優(yōu)化來滿足日益增長(zhǎng)的數(shù)據(jù)采集需求,例如數(shù)據(jù)流的存儲(chǔ)檢索、負(fù)載分配優(yōu)化和查詢優(yōu)化等。
在數(shù)據(jù)流的存儲(chǔ)優(yōu)化方面,由于數(shù)據(jù)流的存儲(chǔ)和分析需要高性能的硬件和軟件,針對(duì)集中式IP流收集的方法缺乏可擴(kuò)展性,易遭受單點(diǎn)故障,并且隨著存儲(chǔ)的IP流記錄數(shù)的增加,流檢索性能不斷降低。DIPStorage(Distributed Storage of IP Flow records)[11]方法設(shè)計(jì)了一個(gè)可擴(kuò)展的IP流記錄存儲(chǔ)平臺(tái),其體系結(jié)構(gòu)建立在P2P概念之上,采用共享資源方式的分布式哈希表DHT(Distri- buted Hash Table)存儲(chǔ)IP流記錄的子集。原型系統(tǒng)評(píng)估顯示,該方法可有效存儲(chǔ)和檢索大量的IP流記錄。
在負(fù)載分配優(yōu)化方面,基于Sketch的測(cè)量面臨的關(guān)鍵挑戰(zhàn)是如何以最少的資源利用率接受更多的并發(fā)測(cè)量任務(wù),COSTA(Cross-layer Optimization for Sketch-based Software difined measurement Task Assignment)[12]方法設(shè)計(jì)了基于Sketch的跨層優(yōu)化測(cè)量系統(tǒng),在測(cè)量應(yīng)用精度和資源使用之間達(dá)到了不同程度的平衡和優(yōu)化。該系統(tǒng)利用應(yīng)用層和任務(wù)分配層之間的跨層信息,估計(jì)應(yīng)用層和資源使用情況,在管理層中查找具有足夠可用資源的設(shè)備以分配這些應(yīng)用程序。該方法將分配問題描述為一個(gè)混合整數(shù)非線性規(guī)劃問題,并開發(fā)了一個(gè)兩階段啟發(fā)式算法來有效地分配任務(wù)。通過對(duì)真實(shí)數(shù)據(jù)包跟蹤的大量實(shí)驗(yàn),證明了COSTA可以減少40%的資源使用,并可額外接受30%以上的任務(wù),同時(shí)只有很小的準(zhǔn)確度損失。
在查詢優(yōu)化方面,ShBF(Shift Bloom Filter)[13]設(shè)計(jì)了一種用于表示和查詢集合的框架,可以使用少量?jī)?nèi)存快速進(jìn)行3種常見的集合查詢(成員查詢、關(guān)聯(lián)查詢和多重查詢)。ShBF提出在位置偏移量中對(duì)集合元素的輔助信息進(jìn)行編碼,而不是對(duì)集合數(shù)據(jù)結(jié)構(gòu)分配額外的內(nèi)存來存儲(chǔ)輔助信息,通過對(duì)3種查詢類型的ShBF進(jìn)行分析建模,計(jì)算出最優(yōu)系統(tǒng)參數(shù)。測(cè)試結(jié)果表明,ShBF在3種類型的集合查詢上都有顯著的性能提升。
基于聚合的網(wǎng)絡(luò)大數(shù)據(jù)采集加速模型如圖4所示,所有報(bào)文依據(jù)五元組信息歸類為不同的數(shù)據(jù)流,聚合器根據(jù)報(bào)文所屬的數(shù)據(jù)流進(jìn)行歸類統(tǒng)計(jì)。該聚合器的處理過程主要包括聚合和逐出2部分,通過將多次更新聚合為一次更新來降低傳統(tǒng)大數(shù)據(jù)采集方法的計(jì)算開銷。聚合后的報(bào)文再進(jìn)入FlowRadar進(jìn)行信息采集,最后發(fā)送到后端控制器進(jìn)行解碼分析。
Figure 4 Overall process of aggregation-based acceleration for FlowRadar圖4 聚合加速FlowRadar總流程
為了減少每個(gè)報(bào)文都進(jìn)行哈希計(jì)算所導(dǎo)致的巨大計(jì)算開銷和隨機(jī)內(nèi)存訪問開銷,本文參考Agg-Evict框架設(shè)計(jì)了聚合器數(shù)據(jù)結(jié)構(gòu)來主動(dòng)聚合數(shù)據(jù)報(bào)文,從而更有效地處理聚合流,并且不依賴同一批數(shù)據(jù)中的數(shù)據(jù)報(bào)文訪問同一條目的概率。圖5展示了包含16個(gè)單元格的聚合器結(jié)構(gòu),該聚合器包含4個(gè)KV數(shù)組對(duì),每個(gè)KV數(shù)組對(duì)包含4個(gè)單元格,每個(gè)單元格中記錄了K值(報(bào)文五元組信息)和V值(分組計(jì)數(shù)器)。
Figure 5 Structure of 16-cell aggregator and P4 code圖5 聚合器結(jié)構(gòu)及對(duì)應(yīng)代碼
具體處理流程如圖6中報(bào)文聚合部分所示。當(dāng)數(shù)據(jù)流到達(dá)時(shí),聚合器首先將數(shù)據(jù)流解析后的五元組通過一個(gè)快速哈希函數(shù)映射到4個(gè)KV數(shù)組對(duì)的任意一個(gè),然后與KV數(shù)組對(duì)的4個(gè)單元格中的K值進(jìn)行匹配。若匹配,則分組計(jì)數(shù)器V值增加;若不匹配,則查找空的單元格插入流的五元組K值,并將V值置1;若不匹配且無空的單元格時(shí),則執(zhí)行相應(yīng)的逐出策略產(chǎn)生新的空KV數(shù)組對(duì)后插入。通常每次逐出的流id包含1個(gè)以上的報(bào)文數(shù)量,而傳統(tǒng)FlowRadar方案每次只處理1個(gè)報(bào)文,因此采用聚合更新方式可減少大量計(jì)算和隨機(jī)內(nèi)存訪問開銷。
此外,在計(jì)算開銷和隨機(jī)內(nèi)存訪問開銷降低方面,本文舉例說明。假設(shè)網(wǎng)絡(luò)有9個(gè)流id為f1、f2、f3、f1、f3、f1、f2、f1和f1的傳入數(shù)據(jù)包。通常情況下,需要更新FlowRadar的計(jì)數(shù)器9次,即需要進(jìn)行9次哈希計(jì)算和9次隨機(jī)內(nèi)存訪問。使用聚合方法之后,首先將9個(gè)報(bào)文聚合為3個(gè)具有相同流id的報(bào)文集合:f1*5、f2*2和f3*2,然后將聚合結(jié)果導(dǎo)出到FlowRadar中。這樣只需進(jìn)行3次更新(即3次哈希計(jì)算和3次隨機(jī)內(nèi)存訪問)。通過這種方式,在不考慮聚合操作所引入額外開銷的前提下,F(xiàn)lowRadar的處理速度理論上可以提高3倍。
逐出策略決定當(dāng)KV數(shù)組已滿時(shí)應(yīng)逐出哪一條流,它決定了聚合器的聚合級(jí)別,對(duì)聚合性能具有重要影響。常見的選擇策略是LRU(Least Recently Used),它為每個(gè)KV對(duì)維護(hù)一個(gè)時(shí)間戳,記錄上一次更新該KV對(duì)的時(shí)間。一旦需要逐出一個(gè)KV對(duì)時(shí),需要找到擁有最小時(shí)間戳的KV對(duì)并逐出。由于LRU每次逐出需要掃描各個(gè)時(shí)間戳,其實(shí)現(xiàn)開銷相對(duì)較高。
為了減少操作開銷,本文采用了GRR(Global Round Robin)逐出策略。該策略對(duì)于k個(gè)KV陣列,保持一個(gè)從0到m-1(m 總體而言,不同的逐出策略不影響測(cè)量方案的精度,而只影響測(cè)量方案所看到的分組輸入順序。 被逐出的流將進(jìn)入標(biāo)準(zhǔn)的FlowRadar采集結(jié)構(gòu)進(jìn)行流信息采集,它會(huì)將同一條流的信息通過多個(gè)哈希函數(shù)分散計(jì)入Bloom Filter的多個(gè)位置,但對(duì)于報(bào)文計(jì)數(shù)器而言,此時(shí)一次性計(jì)入的將不是單個(gè)報(bào)文,而是逐出流所包含的所有報(bào)文數(shù)目,大大減少了多個(gè)哈希函數(shù)重復(fù)計(jì)算帶來的計(jì)算開銷和帶寬消耗。最后,F(xiàn)lowRadar將采集的數(shù)據(jù)提交到后端采集器進(jìn)行單流解碼和網(wǎng)絡(luò)解碼,后續(xù)操作與FlowRadar原始架構(gòu)一致。 原型系統(tǒng)采用Ubuntu 14.04虛擬機(jī)進(jìn)行搭建,虛擬機(jī)軟硬件配置如表1所示,搭建的簡(jiǎn)單網(wǎng)絡(luò)環(huán)境如圖7所示。系統(tǒng)基于Mininet構(gòu)建2個(gè)bmv2交換機(jī),每個(gè)交換機(jī)接入2個(gè)終端,交換機(jī)上運(yùn)行修改后的FlowRadar P4程序以實(shí)現(xiàn)聚合加速采集功能。 Table 1 Software and hardware configuration of the prototype system Figure 7 Topology of the test network圖7 測(cè)試網(wǎng)絡(luò)拓?fù)鋱D 聚合加速模型通過降低計(jì)算開銷和訪存次數(shù)來提升采集性能,但上述2個(gè)指標(biāo)并不能說明加速方法的有效性,因?yàn)樵谟?jì)算開銷和訪存次數(shù)減少的同時(shí),本文所提方法在報(bào)文聚合和流逐出階段會(huì)帶來額外的開銷,因此仿真實(shí)驗(yàn)以系統(tǒng)總體的吞吐量和處理延時(shí)作為評(píng)價(jià)指標(biāo)。 本文在6個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)拓?fù)渲?,?duì)比測(cè)試了原始FlowRadar和聚合加速FlowRadar的網(wǎng)絡(luò)性能,即終端h1、h2之間的網(wǎng)絡(luò)吞吐量。實(shí)驗(yàn)通過iperf發(fā)送TCP流量,每隔0.5 s測(cè)量一次,測(cè)量時(shí)間為300 s,具體結(jié)果如圖8所示。 Figure 8 Comparison of network throughput圖8 網(wǎng)絡(luò)吞吐量對(duì)比 由圖8可知,在更大的時(shí)間尺度范圍內(nèi)單個(gè)的FlowRadar的測(cè)試帶寬平均值為72.28 Mb/s,基于聚合的FlowRadar的測(cè)試帶寬的平均值為108.87 Mb/s。從總體上看,聚合加速的FlowRadar仍比單個(gè)的FlowRadar的帶寬提高36 Mb/s左右,吞吐量性能提升約50.63%。同樣地,單個(gè)的FlowRadar帶寬波動(dòng)幅度比較小,聚合加速的FlowRadar帶寬在某些時(shí)刻,由于聚合模塊報(bào)文逐出時(shí)處理數(shù)據(jù)流較大的原因會(huì)有驟降的現(xiàn)象,但在其余時(shí)刻其帶寬更加趨于穩(wěn)定。 同時(shí),本文對(duì)比測(cè)試了FlowRadar和聚合加速FlowRadar的雙向網(wǎng)絡(luò)時(shí)延,測(cè)試方式為h1 pingh2,每隔0.01 s測(cè)量一次,測(cè)量1 000個(gè)報(bào)文取平均值,測(cè)試結(jié)果如圖9所示。 Figure 9 Comparison of bidirectional network delay when the time interval is 0.01 s圖9 時(shí)間間隔為0.01 s時(shí)的雙向時(shí)延對(duì)比 由圖9可知,在0.01 s的時(shí)間間隔下,聚合加速的FlowRadar和原始的FlowRadar都存在少量的時(shí)延抖動(dòng)。但是,從總體上看,在相同的網(wǎng)絡(luò)拓?fù)浼跋嗤慕K端和交換機(jī)中,聚合加速FlowRadar的網(wǎng)絡(luò)時(shí)延要低于原始FlowRadar的。兩者的時(shí)延在數(shù)據(jù)量增加的過程中,由于單個(gè)的FlowRadar在全時(shí)段具有對(duì)流的恒定處理時(shí)間,前期時(shí)延數(shù)據(jù)有所波動(dòng),后期趨于穩(wěn)定;而聚合加速的FlowRadar則由于報(bào)文逐出過程中數(shù)據(jù)量的處理會(huì)劇增,前期時(shí)延數(shù)據(jù)同樣有所波動(dòng),后期的時(shí)延還是存在波動(dòng)狀況。兩者前期都存在數(shù)據(jù)量異常波動(dòng)的原因是每次測(cè)試都要重啟網(wǎng)絡(luò)拓?fù)?,軟件環(huán)境還不是很穩(wěn)定。 測(cè)試時(shí)間間隔為0.1 s的結(jié)果如圖10所示。可以看出,在更大的時(shí)間粒度和范圍下(0.1 s),聚合加速的FlowRadar和原始的FlowRadar的延遲時(shí)間都存在較大波動(dòng)。在粗粒度的時(shí)間間隔觀察下,兩者的數(shù)據(jù)波動(dòng)差異不明顯。從總體上,在相同的網(wǎng)絡(luò)拓?fù)浼跋嗤慕K端和交換機(jī)中,聚合加速的FlowRadar延遲要低于原始FlowRadar的延遲。 Figure 10 Comparison of bidirectional network delay when the time interval is 0.1 s圖10 當(dāng)時(shí)間間隔為0.1 s時(shí)的雙向時(shí)延對(duì)比 測(cè)試時(shí)間間隔為1 s的結(jié)果如圖11所示,在最大的時(shí)間粒度和范圍下(1 s)測(cè)試1 000個(gè)數(shù)據(jù)包的延遲,除去兩者都有的個(gè)別異常劇增的延遲數(shù)據(jù),在相同的網(wǎng)絡(luò)拓?fù)浼跋嗤慕K端和交換機(jī)中,聚合加速FlowRadar的延遲總體上要低于原始FlowRadar的延遲,并且兩者異常波動(dòng)的數(shù)據(jù)相差無幾,其原因可以歸結(jié)于軟件環(huán)境的影響。 Figure 11 Comparison of bidirectional network delay when the time interval is 1 s圖11 當(dāng)時(shí)間間隔為1 s時(shí)的雙向時(shí)延對(duì)比 綜合以上3組測(cè)試結(jié)果來看,采用聚合加速FlowRadar的交換機(jī)處理時(shí)延總體上要低于原始FlowRadar的。但是,在時(shí)延抖動(dòng)方面,在細(xì)粒度的時(shí)間維度下,基于聚合加速的FlowRadar由于采用報(bào)文聚合和逐出機(jī)制會(huì)造成較大的時(shí)延抖動(dòng);在粗粒度的時(shí)間維度下,兩者的時(shí)延抖動(dòng)相差不大。 本文對(duì)網(wǎng)絡(luò)大數(shù)據(jù)采集優(yōu)化方案進(jìn)行了研究,基于協(xié)議無關(guān)交換架構(gòu)PISA(Protocol Independent SwitchArch),采用P4語言設(shè)計(jì)實(shí)現(xiàn)了面向報(bào)文聚合的FlowRadar數(shù)據(jù)采集加速模型,將屬于同一流的報(bào)文進(jìn)行聚合,降低FlowRadar中使用多次哈希操作所導(dǎo)致的計(jì)算開銷和內(nèi)存訪問次數(shù)。最后,本文基于Mininet搭建原型系統(tǒng)進(jìn)行功能驗(yàn)證與性能測(cè)試,實(shí)驗(yàn)結(jié)果表明,聚合加速的FlowRadar在網(wǎng)絡(luò)吞吐量和處理時(shí)延等方面的性能要優(yōu)于原始FlowRadar模型。4.4 逐出流數(shù)據(jù)采集
5 仿真實(shí)驗(yàn)測(cè)試
5.1 測(cè)試環(huán)境與測(cè)試拓?fù)?/h3>
5.2 網(wǎng)絡(luò)吞吐量對(duì)比
5.3 處理時(shí)延對(duì)比
6 結(jié)束語