陸遙+余翔湛
摘要: 本文通過(guò)分析和總結(jié)以Suricata為代表的現(xiàn)有的主流并行化入侵檢測(cè)系統(tǒng)的體系結(jié)構(gòu),并對(duì)Suricata的3種工作方式結(jié)合現(xiàn)有tilera系列硬件平臺(tái)的硬件特點(diǎn)進(jìn)行了理論分析。提出了眾核入侵檢測(cè)系統(tǒng)的設(shè)計(jì)要點(diǎn)。并設(shè)計(jì)了一種基于非統(tǒng)一內(nèi)存訪問(wèn)與內(nèi)存池的入侵檢測(cè)結(jié)構(gòu)。該結(jié)構(gòu)將傳統(tǒng)的流水線模式與并發(fā)模式相結(jié)合,在盡可能少地進(jìn)行核間通訊的前提下,最大程度地提升了單核的內(nèi)存使用效率和cache命中率。同時(shí)使用共享內(nèi)存池進(jìn)一步提高了讀寫密集情況下的內(nèi)存使用效率,使用改進(jìn)的無(wú)鎖通訊隊(duì)列保證了核間通訊的效率,使得該架構(gòu)在眾核平臺(tái)具有很高的實(shí)用性,其主要模塊的設(shè)計(jì)思想也具有一定程度上的可移植性。本文最終設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)高效的基于眾核平臺(tái)的入侵檢測(cè)系統(tǒng)。
關(guān)鍵詞:入侵檢測(cè)系統(tǒng); 眾核; 流量識(shí)別; 并行計(jì)算
中圖分類號(hào): TP393.08
文獻(xiàn)標(biāo)志碼: A
文章編號(hào): 2095-2163(2017)05-0082-05
Abstract: In view of the hardware characteristics of the existing tilera series hardware platform, the three kinds of working modes of Suricata are analyzed theoretically in this paper. The main points of the design of the system for the detection of the multicore intrusion are put forward.Based on the main point of the design, this paper proposes an intrusion detection architecture which has nonuniform memory access and large page memory pool. The structure combines the traditional pipelined mode with the concurrent mode, and improves the memory efficiency and cache hit rate of the single core to the greatest extent. At the same time, the use of shared memory pool further improves the memory efficiency of dense reading and writing, which makes the structure has very high practicability in the multicore platform, and the design of the main module also has a certain degree of portability. Consequently, this paper designs and implements an efficient intrusion detection system based on manycore platform.
Keywords: identification detection system; manycore; flow recognition; concurrent computation
0引言
據(jù)統(tǒng)計(jì),互聯(lián)網(wǎng)流量已達(dá)到每12個(gè)月即會(huì)增長(zhǎng)一倍,超過(guò)了摩爾定律的速度[1]。相比于在未來(lái)一定時(shí)間將持續(xù)快速增長(zhǎng)的網(wǎng)絡(luò)帶寬,單一處理器的計(jì)算能力卻日趨瓶頸。相關(guān)人士認(rèn)為未來(lái)芯片的迭代會(huì)變得更慢,其間隔可能會(huì)達(dá)到2.5~3年。目前英特爾最新一代處理器已采用14 nm工藝,正在逐步接近現(xiàn)有處理器架構(gòu)的物理極限。若按現(xiàn)在的速度繼續(xù)發(fā)展,到21世紀(jì)20年代中期,晶體管的尺寸將僅有單個(gè)分子大小,晶體管也將變得非常不穩(wěn)定,若沒(méi)有新的技術(shù)突破,摩爾定律將會(huì)徹底終結(jié)。同時(shí),由于單純提升主頻而帶來(lái)的發(fā)熱等問(wèn)題,基于單核、多核處理器的普通網(wǎng)絡(luò)報(bào)文捕獲平臺(tái)的計(jì)算性能已經(jīng)成為大規(guī)模網(wǎng)絡(luò)防火墻、寬帶網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)以及高性能路由等網(wǎng)絡(luò)工程的性能瓶頸。對(duì)于現(xiàn)在乃至未來(lái)更大規(guī)模的高速網(wǎng)絡(luò),如何突破普通報(bào)文捕獲平臺(tái)的性能瓶頸,研究和實(shí)現(xiàn)面向大規(guī)模寬帶網(wǎng)絡(luò)的高性能網(wǎng)絡(luò)數(shù)據(jù)捕獲技術(shù),對(duì)并行處理、網(wǎng)絡(luò)安全、高性能路由器等諸多領(lǐng)域都有著非常重要的意義。
作為突破單核、多核性能瓶頸的手段之一,眾核處理器作為擁有強(qiáng)大并行處理能力的新一代處理器,成為有效解決以上問(wèn)題的手段之一。目前的眾核處理器可集成數(shù)十至幾百個(gè)核,每個(gè)核是一個(gè)執(zhí)行單元,對(duì)整個(gè)數(shù)據(jù)包或其中的一個(gè)子任務(wù)進(jìn)行處理?,F(xiàn)代高性能并行處理系統(tǒng)通常采用超標(biāo)量流水線結(jié)構(gòu),數(shù)據(jù)包處理劃分成多個(gè)并行子任務(wù)集,每個(gè)子任務(wù)集是由眾核處理器中的若干個(gè)核并行執(zhí)行,子任務(wù)集到核資源集的映射由運(yùn)行時(shí)系統(tǒng)完成[2]。隨著技術(shù)發(fā)展和需求推動(dòng),未來(lái)處理器將集成幾百甚至上千個(gè)核,這類處理器系統(tǒng)一般稱為眾核處理器系統(tǒng)。眾核處理器核數(shù)的增加保證了計(jì)算和數(shù)據(jù)處理能力持續(xù)提高,然而如何使這種硬件能力轉(zhuǎn)變成應(yīng)用性能的提升,是眾核時(shí)代面臨的嚴(yán)峻挑戰(zhàn)之一。
本文基于美國(guó)Tilera公司的TILE-Gx系列處理器進(jìn)行眾核平臺(tái)數(shù)據(jù)包捕獲系統(tǒng)的設(shè)計(jì)。成立于2004年的Tilera是一家致力于開(kāi)發(fā)通用型多核心處理器的新興無(wú)晶圓半導(dǎo)體業(yè)者。該公司的Tile處理器架構(gòu)源自于Agarwal博士早從1990年代起在麻省理工學(xué)院(MIT)研發(fā)的多重處理器叢集技術(shù)。其TILE-Gx系列處理器是世界上第一款100核心以上的處理器,采用網(wǎng)格化多核架構(gòu),通過(guò)iMesh網(wǎng)絡(luò)實(shí)現(xiàn)眾多處理器核互聯(lián),將單芯片處理能力提高了數(shù)十到數(shù)百倍,在外接2塊Intel萬(wàn)兆網(wǎng)卡的情況下可以滿足在重要網(wǎng)絡(luò)出入口上進(jìn)行高速捕包的硬件性能需求[3]。endprint
該平臺(tái)具有36個(gè)計(jì)算核心,64-bit VLIW超長(zhǎng)指令字架構(gòu)并支持64位指令集和40位物理尋址空間,每個(gè)通用目的處理核心都有自己的32 KB一級(jí)指令緩存、32 KB一級(jí)數(shù)據(jù)緩存、256 KB二級(jí)緩存切換開(kāi)關(guān),共享三級(jí)緩存,并集成了智能NIC硬件,用于網(wǎng)絡(luò)流量的預(yù)處理、負(fù)載均衡、緩沖管理。TILE-Gx系列采用臺(tái)積電40 nm工藝制造,37.5×37.5 mm BGA封裝,主頻為1.2 GHz,所有計(jì)算核心共享雙通道內(nèi)存訪問(wèn)控制,可提供3個(gè)PCI-E 2.0 x8、2個(gè)千兆和2個(gè)萬(wàn)兆以太網(wǎng)端口、3個(gè)USB 2.0端口,典型功耗48 W,平均每個(gè)核心不到0.5 W[4]。配合萬(wàn)兆網(wǎng)絡(luò)接口探討此類眾核硬件系統(tǒng)的高速捕包系統(tǒng)架構(gòu)。
由此可以看出,該平臺(tái)具有典型眾核平臺(tái)所具有的特點(diǎn),即單核計(jì)算能力相比傳統(tǒng)單核處理器較弱,相比于已經(jīng)具有單核4.2 GHz,6 MB三級(jí)緩存的最新一代英特爾酷睿i7-7700處理器,單核頻率僅有1.2 GHz且只獨(dú)占256 KB二級(jí)緩存的Tilera-GX36處理器在性能上明顯較差。然而其具有的36核iMesh網(wǎng)絡(luò)在大規(guī)模并行計(jì)算上可以彌補(bǔ)其單核性能的不足。同時(shí)其平均每個(gè)核心不到0.5 W的功耗也在實(shí)用性上更勝一籌。
在系統(tǒng)方面,其系統(tǒng)結(jié)構(gòu)如圖2所示,由Hypervisor層、Supervisor層和應(yīng)用軟件層三層構(gòu)成。在此,針對(duì)各層的功能概述可作闡釋解析如下。
首先,Hypervisor層是硬件驅(qū)動(dòng)程序?qū)?,管理?nèi)核間、內(nèi)核與IO控制器間的通信,提供—個(gè)底層的虛擬內(nèi)存系統(tǒng);每—個(gè)內(nèi)核上都運(yùn)行—個(gè)單獨(dú)的Hypervisor實(shí)例。
其次,Supervisor層是SMP Linux操作系統(tǒng),通過(guò)Hypervisor管理硬件資源,為用戶應(yīng)用程序和庫(kù)提供系統(tǒng)命令、IO設(shè)備、進(jìn)程和虛擬內(nèi)存分配等高級(jí)別服務(wù);這一層允許多進(jìn)程/多線程的應(yīng)用來(lái)提升多核的性能。
最后,應(yīng)用軟件層是軟件體系的最上層,該層程序代碼通過(guò)操作系統(tǒng)調(diào)度、管理硬件資源,實(shí)現(xiàn)各種具體應(yīng)用功能[5]。同時(shí),應(yīng)用軟件層除了和x86架構(gòu)一樣支持C實(shí)時(shí)庫(kù)、NetlO庫(kù)等標(biāo)準(zhǔn)庫(kù)之外,還支持Tilera多核組件庫(kù)等專用庫(kù)。因此在本質(zhì)上,使用Tilera眾核處理器的服務(wù)器依然具備標(biāo)準(zhǔn)的硬件、底層驅(qū)動(dòng)、操作系統(tǒng)、應(yīng)用軟件的層級(jí)結(jié)構(gòu)。
2基于眾核平臺(tái)的入侵檢測(cè)系統(tǒng)模型
2.1現(xiàn)有x86架構(gòu)主流入侵檢測(cè)系統(tǒng)架構(gòu)分析
人們將即時(shí)監(jiān)視網(wǎng)絡(luò)中的流量傳輸,對(duì)可疑傳輸進(jìn)行報(bào)警,并在特定情況下采取主動(dòng)反制措施的網(wǎng)絡(luò)安全設(shè)備稱為入侵檢測(cè)系統(tǒng)(Intrusion Detection System,IDS)。由定義可以看出在設(shè)計(jì)上雖然主要行使檢測(cè)功能,但仍屬于主動(dòng)安全防護(hù)技術(shù)的一種,這使得IDS區(qū)別于其他網(wǎng)絡(luò)安全設(shè)備。
按照IETF的定義,一個(gè)入侵檢測(cè)系統(tǒng)可以分為以下4個(gè)組件:
1)事件產(chǎn)生器(Event generators)。功能目的是從整個(gè)計(jì)算環(huán)境中獲得事件,并向系統(tǒng)的其他部分提供此事件。
2)事件分析器(Event analyzers)??山?jīng)過(guò)分析得到數(shù)據(jù),并產(chǎn)生分析結(jié)果。
3)響應(yīng)單元(Response units)。就是對(duì)分析結(jié)果作出反應(yīng)的功能單元,可以作出切斷連接、改變文件屬性等強(qiáng)烈反應(yīng),也可以只是簡(jiǎn)單的報(bào)警。
4)事件數(shù)據(jù)庫(kù)(Event databases)。 是存放各種中間和最終數(shù)據(jù)的地方的統(tǒng)稱,既可以是復(fù)雜的數(shù)據(jù)庫(kù),也可以是簡(jiǎn)單的文本文件[6]。
在目前的眾多的IDS中,由開(kāi)放信息安全基金會(huì)開(kāi)發(fā)的Suricata應(yīng)用最為廣泛,對(duì)多線程與分布式計(jì)算支持較好,穩(wěn)定性較高的系統(tǒng)之一。Suricata通過(guò)libpcap、netmap、af-packet等工具獲取報(bào)文,數(shù)據(jù)接收模塊為從網(wǎng)卡的接收隊(duì)列中接收數(shù)據(jù)包,并將封裝在Packet結(jié)構(gòu)中,然后放入下一個(gè)緩沖區(qū)。解碼模塊對(duì)緩沖區(qū)中數(shù)據(jù)包進(jìn)行解碼,主要是對(duì)數(shù)據(jù)包頭部信息進(jìn)行分析并保存在Packet結(jié)構(gòu)中,再交由流重組TCP模塊對(duì)數(shù)據(jù)包進(jìn)行TCP流重組。重組完成的TCP流由協(xié)議插件模塊檢測(cè)是否包含入侵行為,再由Verdict模塊經(jīng)過(guò)內(nèi)核對(duì)數(shù)據(jù)包進(jìn)行接收或丟棄的判斷處理。最后通過(guò)應(yīng)答模塊調(diào)用libnet對(duì)要執(zhí)行阻斷操作的數(shù)據(jù)包進(jìn)行相應(yīng)的阻斷處理。
策略名策略描述特點(diǎn)
Auto模塊完全解耦,通過(guò)緩沖區(qū)交互模塊之間不存在阻塞,充分發(fā)揮計(jì)算性能,核間通信開(kāi)銷大
Auto-FP合并了解碼/接收,流重組/檢測(cè)模塊減少核間通訊,緩沖區(qū)空間小,流重組/檢測(cè)模塊計(jì)算負(fù)擔(dān)過(guò)重,程序局部性差
Worker各自worker獨(dú)立執(zhí)行所有流程核間通訊開(kāi)銷低,計(jì)算負(fù)擔(dān)大,最差的程序局部性,模塊之間存在阻塞
[HT5”SS][ST5”BZ][WT5”BZ][FL(2K2]
2.2現(xiàn)有x86架構(gòu)主流入侵檢測(cè)系統(tǒng)架構(gòu)分析
為了平衡系統(tǒng)核間通訊與程序局部性的開(kāi)銷,最大化發(fā)揮眾核平臺(tái)的性能,本系統(tǒng)提出一種基于并行隊(duì)列的處理模型。該模型采用將模塊分組并行的方式,組內(nèi)采用流水線模式處理數(shù)據(jù),組間獨(dú)立并行運(yùn)行,系統(tǒng)流程圖如圖3所示。
該系統(tǒng)依然按照傳統(tǒng)入侵檢測(cè)系統(tǒng)的工作流程設(shè)計(jì),劃分為3個(gè)主要模塊:數(shù)據(jù)接收模塊、流重組模塊與檢測(cè)模塊。架構(gòu)采用了基于并行隊(duì)列的分布式數(shù)據(jù)流模型,其主要流程為數(shù)據(jù)接收模塊完成Tilera硬件api的調(diào)用,通過(guò)Mpipe進(jìn)行數(shù)據(jù)包的解碼與負(fù)載均衡,將來(lái)自旁路監(jiān)聽(tīng)的網(wǎng)絡(luò)端口的數(shù)據(jù)包解析至ip層后直接拷貝至數(shù)據(jù)流保存在iqueue中并完成后續(xù)模塊的硬件綁定與任務(wù)派生和相關(guān)初始化工作。流重組模塊基于Rafal Wojtczuk的網(wǎng)絡(luò)入侵檢測(cè)接口Libnids完成tcp流重組與syn表的維護(hù)工作,再將數(shù)據(jù)包還原成數(shù)據(jù)流寫入內(nèi)存池,并將各內(nèi)存池所需的描述符結(jié)構(gòu)與緩存數(shù)據(jù)按照各自對(duì)應(yīng)的檢測(cè)模塊通過(guò)改進(jìn)的無(wú)鎖循環(huán)消息隊(duì)列分發(fā)到相應(yīng)的處理隊(duì)列中,進(jìn)而回收釋放隊(duì)列中的內(nèi)存池資源。最后由檢測(cè)模塊從內(nèi)存池中獲取內(nèi)容,并調(diào)用相應(yīng)的插件完成解析與響應(yīng)工作,將相應(yīng)句柄放入釋放隊(duì)列中。endprint
總體上,該系統(tǒng)結(jié)構(gòu)上與autoFP模式有一定的相似之處,其主要不同之處為數(shù)據(jù)接收模塊使用與硬件交互的Mpipe模塊完成對(duì)數(shù)據(jù)包的零拷貝緩存、解析、負(fù)載均衡分發(fā)操作,最終的結(jié)果通過(guò)iqueue環(huán)形隊(duì)列進(jìn)行緩存,又直接使用單獨(dú)的內(nèi)存池完成對(duì)共享內(nèi)存的管理,并在傳輸層按照一定的比值對(duì)所對(duì)應(yīng)的檢測(cè)模塊進(jìn)行流分發(fā),在模塊間通訊策略上采用了改進(jìn)的無(wú)鎖循環(huán)隊(duì)列Fast forward recycle queue。而且由單純以CPU的倍數(shù)決定的并發(fā)模型改為按照計(jì)算核心的物理空間進(jìn)行分組同時(shí)使用了核心綁定。
3基于眾核平臺(tái)的入侵檢測(cè)關(guān)鍵技術(shù)
3.1基于Mpipe的高性能數(shù)據(jù)捕獲平臺(tái)設(shè)計(jì)
為了解決傳統(tǒng)網(wǎng)絡(luò)數(shù)據(jù)包捕獲平臺(tái)中的性能瓶頸,需要結(jié)合新的硬件平臺(tái)對(duì)于數(shù)據(jù)捕獲流程進(jìn)行優(yōu)化,減少數(shù)據(jù)拷貝,數(shù)據(jù)同步的過(guò)程。對(duì)于數(shù)據(jù)包接收、完整性校驗(yàn)、負(fù)載均衡等所有網(wǎng)絡(luò)應(yīng)用均會(huì)用到的,原本由系統(tǒng)層面完成的工作,盡可能以新硬件的形式整合進(jìn)網(wǎng)絡(luò)接口中。而對(duì)于用戶層空間,則保留對(duì)于不同應(yīng)用程序的接口以對(duì)應(yīng)不同的需求。
本文設(shè)計(jì)了基于Tilera公司的Mpipe (Multi-core programmable intelligent packet engine)網(wǎng)絡(luò)接口的高性能捕包平臺(tái)。數(shù)據(jù)的捕獲、數(shù)據(jù)校驗(yàn)、負(fù)載均衡等操作均通過(guò)Mpipe高性能網(wǎng)絡(luò)接口完成,Mpipe是基于Tilera平臺(tái)的一套高性能網(wǎng)絡(luò)接口,理論上可實(shí)現(xiàn)40 Gbps線速數(shù)據(jù)流的分類轉(zhuǎn)發(fā)。通過(guò)該平臺(tái)可以實(shí)現(xiàn)在Tilera眾核服務(wù)器設(shè)備中從物理網(wǎng)絡(luò)接口到用戶空間的直接寫入,并使用專用硬件完成數(shù)據(jù)包的完整性校驗(yàn)與負(fù)載均衡,極大簡(jiǎn)化了數(shù)據(jù)捕獲的流程[7]。同時(shí)使用無(wú)鎖環(huán)形隊(duì)列實(shí)現(xiàn)了用戶層與硬件網(wǎng)絡(luò)接口的高效無(wú)鎖通訊,在通訊內(nèi)容上采用基于描述符的消息傳遞機(jī)制,減少了數(shù)據(jù)拷貝的開(kāi)銷。主要的數(shù)據(jù)捕獲流程如圖4所示。
主要步驟如下:
1)Mpipe對(duì)捕獲的數(shù)據(jù)包進(jìn)行特征提取,并由專用硬件剝離完成以太包頭部、計(jì)算校驗(yàn)和等操作。
2)發(fā)起DMA請(qǐng)求,由網(wǎng)卡通過(guò)DMA將接收到的數(shù)據(jù)包從網(wǎng)卡緩沖區(qū)寫入內(nèi)核緩沖區(qū)。
3)使用生成的描述符按照一定的規(guī)則寫入對(duì)應(yīng)用戶空間的Notify ring中。
4)worker通過(guò)notify ring獲取描述符,訪問(wèn)緩沖區(qū),完成上層操作。
3.2改進(jìn)的無(wú)鎖隊(duì)列核間通信技術(shù)
一般情況下,為了保證數(shù)據(jù)不被多個(gè)線程同時(shí)讀寫會(huì)采用同步鎖以確保同步性,然而這會(huì)使得大量線程阻塞在臨界區(qū),造成性能的急劇下降。Lamport算法已經(jīng)證明,在順序一致性模型下,單生產(chǎn)者、單消費(fèi)者隊(duì)列的鎖可以去掉,從而形成一個(gè)并發(fā)無(wú)鎖隊(duì)列[8]。因此并行程序的一致性問(wèn)題最好通過(guò)算法的方式實(shí)現(xiàn)進(jìn)程的順序一致性從而避免沖突。
在固定尺寸的循環(huán)隊(duì)列中,由于不存在同步鎖帶來(lái)的延遲,系統(tǒng)核間通信的開(kāi)銷將重新回到內(nèi)存的讀寫與分配中。在經(jīng)典的無(wú)鎖隊(duì)列Lamports queue和Fast forward queue中,由于指針指向空間的動(dòng)態(tài)變化,每次環(huán)形隊(duì)列的讀寫都會(huì)伴隨一次空間的申請(qǐng)釋放操作。如果想要進(jìn)一步減少核間通訊的開(kāi)銷,必將從減少核間通訊時(shí)內(nèi)存的申請(qǐng)與釋放操作入手。本系統(tǒng)基于經(jīng)典的無(wú)鎖隊(duì)列算法,參照下文中內(nèi)存池的內(nèi)存塊回收思想提出了無(wú)鎖回收隊(duì)列算法(Fast forward recycle queue),算法主要操作如圖5所示。
[
無(wú)鎖回收隊(duì)列算法使用2個(gè)Fast forwards CLF Queue分別作為Data queue與Free queue,分別用來(lái)保存已使用空間和未使用空間。在隊(duì)列初始化時(shí),將為Free queue的每一個(gè)元素預(yù)分配一部分空間。當(dāng)有數(shù)據(jù)需要通過(guò)隊(duì)列傳輸時(shí),將首先從Free隊(duì)列中申請(qǐng)需要的空間,并直接使用該部分的內(nèi)存空間保存?zhèn)鬏斀Y(jié)果。當(dāng)讀寫完畢進(jìn)入傳輸環(huán)節(jié)后,將該空間指針pbuffer寫入data隊(duì)列,這樣接收端可以直接通過(guò)pbuffer訪問(wèn)數(shù)據(jù)。當(dāng)數(shù)據(jù)訪問(wèn)完成后指針從Data queue中取出重新進(jìn)入Free queue等待下一次申請(qǐng)。相比于Lamports queue,該方法所使用的Data.rp和Free.wp變量為接收端私有,F(xiàn)ree.rp和data.wp變量為發(fā)送端私有,從而避免了因?yàn)楣蚕碜兞慨a(chǎn)生的cache顛簸問(wèn)題。相比于普通的Fast forwards CLF Queue,無(wú)鎖回收隊(duì)列算法主要的區(qū)別在于內(nèi)存區(qū)塊的映射方式,具體的內(nèi)存區(qū)塊映射方式如圖6所示。
由圖6可見(jiàn),F(xiàn)ast forward recycle queue與標(biāo)準(zhǔn)的Fast forward不同之處主要區(qū)別在于其擁有2個(gè)隊(duì)列,隊(duì)列中僅保存buffer指針,而實(shí)際的buffer空間是由data_queue與free_queue共享的。當(dāng)應(yīng)用程序申請(qǐng)隊(duì)列空間時(shí)可以直接使用申請(qǐng)的buffer空間作為自身共享緩存,同時(shí)通信完成后該區(qū)域也并不釋放,只是將指針歸還到free_queue中,當(dāng)下一次buffer被申請(qǐng)時(shí)數(shù)據(jù)將直接覆蓋寫入該內(nèi)存塊。由于一般類型的數(shù)據(jù)結(jié)構(gòu)大多都有內(nèi)建的邊界控制或同時(shí)傳輸緩存區(qū)尺寸的描述符,因此無(wú)需考慮此處的數(shù)據(jù)污染問(wèn)題。通過(guò)該方式可以實(shí)現(xiàn)僅在系統(tǒng)啟動(dòng)時(shí)完成一次內(nèi)存申請(qǐng),之后便可直接讀寫重復(fù)利用空間。
4系統(tǒng)綜合性能評(píng)估
采用了基于并行隊(duì)列的系統(tǒng)整體性能評(píng)估方法測(cè)量系統(tǒng)整體吞吐量(Throughput)。其定義為:在沒(méi)有包丟失的情況下,設(shè)備能夠接受的最大速率,這是衡量入侵檢測(cè)系統(tǒng)性能的主要指標(biāo)之一。
Tilera Gx36處理器擁有36個(gè)計(jì)算核心,使用2路NUMA完成內(nèi)存訪問(wèn),本系統(tǒng)采用將計(jì)算核心鏡像劃分為2組的方式最大限度地使用內(nèi)存控制器的帶寬。通過(guò)前一章節(jié)對(duì)于入侵檢測(cè)系統(tǒng)的模塊計(jì)算資源占用測(cè)量,可以得到計(jì)算量占比最大的分別為檢測(cè)和流重組模塊。因此各組均固定使用一個(gè)核心作為接收模塊完成數(shù)據(jù)接收與Mpipe調(diào)用,之后的其他核心均用作流重組/檢測(cè)模塊,其計(jì)算核心的比值作為重組/檢測(cè)比。在不同協(xié)議/流量環(huán)境,不同計(jì)算平臺(tái)上可能會(huì)存在不同的最優(yōu)值,從而實(shí)現(xiàn)最佳的系統(tǒng)性能。本次實(shí)驗(yàn)環(huán)境采用的是每組17個(gè)計(jì)算核心,出于方便分組考慮使用16個(gè)核心綁定流重組/檢測(cè)模塊,可采用的重組/檢測(cè)比為1/1、1/2、1/3、1/5、1/7,其中1/2為5組重組檢測(cè)比為1/2的核心與1組重組檢測(cè)比為1/1的核心,1/5為2組1/5的核心與1組1/3的核心,當(dāng)重組檢測(cè)比不一致時(shí)存在的負(fù)載均衡問(wèn)題,會(huì)結(jié)合檢測(cè)結(jié)果進(jìn)行探討。endprint
將本系統(tǒng)部署于最高可達(dá)20 Gb/s以上日常流量的某網(wǎng)絡(luò)節(jié)點(diǎn)測(cè)試環(huán)境中進(jìn)行測(cè)試,同樣使用隨機(jī)生成的1 000條http規(guī)則作為參照。經(jīng)測(cè)量該實(shí)際流量的平均包尺寸為780 byte,其中http協(xié)議流量數(shù)據(jù)包占比約為72%。系統(tǒng)注冊(cè)插件為基于AC自動(dòng)機(jī)的http關(guān)鍵字檢測(cè)模塊,配置有1 000條常用http關(guān)鍵字檢測(cè)規(guī)則。通過(guò)對(duì)不同重組/檢測(cè)比的系統(tǒng)吞吐量進(jìn)行測(cè)量,并將其與Suricata運(yùn)行模式中定義的Worker模式為標(biāo)準(zhǔn)的傳統(tǒng)并發(fā)式系統(tǒng)架構(gòu)的吞吐量進(jìn)行對(duì)比,同時(shí)并發(fā)架構(gòu)未采用計(jì)算核心綁定、ncx_pool、無(wú)鎖回收隊(duì)列等本系統(tǒng)的改進(jìn)點(diǎn),系統(tǒng)總體性能如圖7所示,其中橫坐標(biāo)為重組/檢測(cè)比中的分母,即1個(gè)重組模塊對(duì)應(yīng)的檢測(cè)模塊個(gè)數(shù),縱坐標(biāo)為吞吐量Gb/s。
從圖7中可以看出,基于非統(tǒng)一內(nèi)存的計(jì)算核心分配方案當(dāng)重組/檢測(cè)比較低,即在流重組分配內(nèi)核較多的情況下主要瓶頸在于檢測(cè)模塊,當(dāng)重組檢測(cè)比為1/1時(shí)相當(dāng)于只對(duì)應(yīng)一個(gè)檢測(cè)模塊,其性能略低于未采用任何優(yōu)化的并發(fā)模型,說(shuō)明其架構(gòu)性能要明顯弱于系統(tǒng)的并發(fā)模型。隨著重組/檢測(cè)比的不斷降低,系統(tǒng)吞吐量顯著提高,這也說(shuō)明了由于測(cè)試流量中http流量占比較高,http關(guān)鍵字檢測(cè)的計(jì)算流程涉及到較為復(fù)雜的多模式匹配,同時(shí)http實(shí)際流量中包含了圖片等容量較大的信息,網(wǎng)絡(luò)流量數(shù)據(jù)的檢測(cè)開(kāi)銷明顯大于流重組開(kāi)銷。隨著檢測(cè)模塊的增加開(kāi)始比達(dá)到1/3和1/5時(shí)系統(tǒng)性能達(dá)到最高值6.9 Gbps。之后隨著流重組模塊的減少,系統(tǒng)吞吐量出現(xiàn)了逐漸下降。
通過(guò)以上數(shù)據(jù)可以看出,由于將內(nèi)存局部性較強(qiáng)的流還原和檢測(cè)2個(gè)模塊拆分,并按照NUMA節(jié)點(diǎn)的計(jì)算核心分配情況進(jìn)行了分組,同時(shí)加入了計(jì)算核心綁定,使用ncx_pool內(nèi)存池等優(yōu)化,系統(tǒng)的內(nèi)存利用率得到了有效提升,有效提高了緩存利用率。主要體現(xiàn)在當(dāng)系統(tǒng)以合適的重組/檢測(cè)比運(yùn)行時(shí)吞吐量的明顯提升,相比于傳統(tǒng)的并行模式,在Tilera Gx36平臺(tái)下基于非統(tǒng)一內(nèi)存的計(jì)算核心分配方案可以使系統(tǒng)吞吐量提升約50%。同時(shí)也應(yīng)注意,在1/2、1/5處由于重組/檢測(cè)比會(huì)出現(xiàn)負(fù)載均衡問(wèn)題,實(shí)際性能會(huì)低于該結(jié)構(gòu)下的理論性能。尤其在1/2處可以看到曲線有1個(gè)明顯的下凹,此處是因?yàn)橛?個(gè)組從1/2降低到了1/1,即通信隊(duì)列的緩存空間需求增加了1倍,此時(shí)可能會(huì)造成系統(tǒng)阻塞在緩存空間申請(qǐng)?zhí)?,[LL]
從而影響了系統(tǒng)整體吞吐量??梢酝茰y(cè),隨著可用計(jì)算核心數(shù)量的增加,在實(shí)現(xiàn)核心均勻分配的情況下,相比于當(dāng)下,1/2、1/5的重組檢測(cè)比的分配方式具有更高的性能。
5結(jié)束語(yǔ)
本文通過(guò)對(duì)傳統(tǒng)并行入侵檢測(cè)模型與現(xiàn)有Tilera系列硬件平臺(tái)的硬件特點(diǎn)進(jìn)行分析,提出眾核平臺(tái)的并行化系統(tǒng)設(shè)計(jì)要點(diǎn),并設(shè)計(jì)和實(shí)現(xiàn)了高速并行化入侵檢測(cè)系統(tǒng)。本文主要取得的研究成果如下:
1)分析和總結(jié)了以Suricata為代表的主流并行化入侵檢測(cè)系統(tǒng)的體系結(jié)構(gòu),并對(duì)Suricata的3種工作方式結(jié)合現(xiàn)有tilera系列硬件平臺(tái)的硬件特點(diǎn)進(jìn)行了理論分析,提出了眾核入侵檢測(cè)系統(tǒng)的設(shè)計(jì)要點(diǎn)。
2)結(jié)合提出的系統(tǒng)設(shè)計(jì)要點(diǎn),提出了一種基于并行隊(duì)列的入侵檢測(cè)結(jié)構(gòu)。該結(jié)構(gòu)將傳統(tǒng)的流水線模式與并發(fā)模式相結(jié)合,在盡可能少地進(jìn)行核間通訊的前提下,最大程度地提升了單核的內(nèi)存使用效率和cache命中率。同時(shí)使用改進(jìn)的無(wú)鎖回收消息隊(duì)列和共享內(nèi)存池進(jìn)一步提高了讀寫密集情況下的內(nèi)存使用效率,使得該架構(gòu)在眾核平臺(tái)具有很高的實(shí)用性,其主要模塊的設(shè)計(jì)思想也具有一定程度上的可移植性。最終實(shí)現(xiàn)了一個(gè)高效的基于眾核平臺(tái)的入侵檢測(cè)系統(tǒng)。
3)完成了對(duì)系統(tǒng)整體在不同核心分配方案下相比于傳統(tǒng)并發(fā)模型的性能測(cè)試。實(shí)驗(yàn)結(jié)果表明,本系統(tǒng)在眾核平臺(tái)的運(yùn)行效率要明顯優(yōu)于傳統(tǒng)的并行入侵檢測(cè)系統(tǒng),體現(xiàn)出了非常高的系統(tǒng)資源使用效率。
參考文獻(xiàn):
譚章熹,林闖,任豐源,等. 網(wǎng)絡(luò)處理器的分析與研究[J]. 軟件學(xué)報(bào),2003,14(2): 253-267.
[2] 羅章琪,黃昆,張大方,等. 面向數(shù)據(jù)包處理的眾核處理器核資源分配方法[J]. 計(jì)算機(jī)研究與發(fā)展,2014,51(6):1159-1166.
[3] 陳遠(yuǎn)知. 多核處理器的里程碑——TILE64[J]. 計(jì)算機(jī)工程與應(yīng)用,2009,45(???07-309.
[4] Tilera. Tile Processor Architecture Overview for the TILE-Gx Series, UG130[Z]. USA:Tilera Corporation,2012.
[5] 陳遠(yuǎn)知,楊帆. Tilera多核處理器網(wǎng)絡(luò)應(yīng)用研究[C]//第五屆信號(hào)和智能信息處理與應(yīng)用學(xué)術(shù)會(huì)議. 北京:中國(guó)高科技產(chǎn)業(yè)化研究會(huì),2011:98-100,120.
[6] 葉穎, 嚴(yán)毅. 基于通用入侵規(guī)范下網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)的實(shí)現(xiàn)[J] . 廣西大學(xué)學(xué)報(bào)(自然科學(xué)版),2005,30(Supp):55-57.
[7] Tilera. MDE mpipe Programmer's Guide, UG506[Z]. USA:Tilera Corporation,2013.
[8] [JP3]ADVE S V, GHARACHORLOO K. Shared memory consistency models: A tutorial[J]. Computer, 1996,29(12):66-76.endprint