通過并行處理提升IPS性能
如今多核處理器的迅速發展為并行處理技術提供了廣闊空間,我們在多核處理器的硬件平臺上,可以利用并行處理來提升IPS性能,但實際上提升IPS性能取決于不IPS并行化方法及程度,不幸的是IPS軟件的并行化遠比硬件增加1個或幾個物理內核要復雜得多,這涉及到操作系統并發工作的模式、流量的分擔與負載、IPS引擎的并行檢測、配置的同步與競爭控制、事件統計以及運行態調試等等問題。以下我們將對這些IPS并行化中的問題逐一探尋。
首先需要IPS系統軟件(這里假定IPS系統是一個運行于應用層的程序,如果將IPS做為內核模塊嵌入到操作系統中則需要考慮的問題會更多一些)的載體-操作系統本身支持并行化,也即操作系統有穩定的SMP版本。操作系統在多核處理器硬件平臺上一般有兩種構架,一種是SMP方式,也稱為同構方式(見圖:SMP方式示意圖,以4核為例),另一種為AMP方式,也稱為異構方式(見圖:AMP方式示意圖,以4核為例)。
SMP方式示意圖
AMP方式示意圖
SMP方式顧名思義就是將多個內核平等看待,每個內核運行的操作系統相同,且每個內核上都運行一套IPS系統,這樣從數據接收、連接建立、數據檢測到數據發送都是并發執行的,相當于多個IPS系統在同時運行。這種架構比較簡潔,各個處理器內核負載均衡,可以全方位地提升IPS性能,特別是在測試單一性能指標時,由于所有內核都參與處理工作,往往可以獲得比較好的表現。這種架構也有其固有缺陷,因為所有內核都運行相同的軟件系統(包含操作系統和IPS系統),勢必產生對共享資源(內存數據、文件描述符、I/O設備等)的爭用。為處理并發與同步需要使用大量的鎖機制,而這些鎖的操作又影響了性能發揮,更嚴重的是隨著內核數量的增多,并發與同步的消耗達到一定的量級,這時性能就不再增長甚至下降了。
AMP方式就是將多個內核區別看待,可以運行不同的操作系統也可以在相同的操作系統上運行不同的任務,各個處理器內核按照任務劃分,各負其責,規避共享資源的競爭,做到“術有專攻”,從而提升IPS性能。完整的操作系統往往比較龐大,耗費資源較多,效率也較低。拿出幾個物理內核,在其上建立一種簡易的系統環境(有時候直接叫做“裸核”環境),在這個“潔凈的空間”內運行單一任務(比如收發數據、模式匹配等)往往可以獲得極高的性能,這是AMP方式的特點,也是其優勢。另外一種方式,在相同的操作系統上運行不同的任務也是同樣的機理,只不過更容易實現一些,相應的性能提升的效果也遜色一些。這種架構也有其缺陷,在測試單一性能指標時,因為特定功能只有有限的內核參與處理,往往性能不夠理想。架構本身也比較復雜,需要仔細權衡各個內核的任務分擔,否則會造成內核負載不均衡,影響性能發揮。
選擇哪一種架構需要根據處理器硬件平臺與IPS系統本身的特點來抉擇,通常在硬件處理器內核比較少的情況下選擇SMP架構,在需要將一大堆不可能并行化的“遺產”繼承到產品中時只好選擇AMP架構,如果已經使用了硬件內容加速,那么可以選擇SMP架構,如果是新開發IPS產品,內核分工可以動態調整的AMP架構是不錯的選擇,但需要保證足夠的技術儲備和適當的人力投入。
在確定了工作模式后,就要考慮流量的分擔與負載問題了,多個內核并行處理,它們共同的輸入就是來自網絡的數據流,如何將這些數據流“喂”給處理器內核呢?最簡單的就是輪詢方法,即將到達的數據依次交給等待處理的內核,各個內核平均分配,這對早期的基于單個數據包檢測的IPS系統比較適合。現代的IPS系統功能豐富,不僅可以進行TCP流重組,還可以跟蹤應用層協議和控制流量。但是在多個內核上并發地跟蹤TCP狀態機是個棘手的問題,實現難度也較大,所以出現了另外一種按照五元組分流的方法,即將同一個數據流分配到同一個內核上,保障一個數據流始終由一個內核處理。這種方式大大降低了IPS內部實現復雜度,雖然具有流量較小時負載不均衡的副作用,但從研發成本考慮還是可以接受的。
接下來就是對提升性能至關重要的IPS引擎的并行檢測,IPS檢測引擎的并發是提升性能的關鍵。這里的引擎主要指應用協議的識別和分析、攻擊特征的匹配、策略的檢查以及后續的數據處理。如果運行于應用層,可以將每個IPS引擎作為一個單獨的進程對待,它們共用一份公共的攻擊特征庫,對各自的輸入的數據流進行并行檢測和處理,就好像多個引擎在同時工作。但是數據流之間有時候是相關的,比如一個應用層協議可以動態協商出它的一個子連接,當這個子連接分配到另外一個IPS進程上處理時,要想控制它就需要進行進程間通訊,這樣引擎的獨立性就被破壞了。同樣在雙機熱備份的狀態同步、應用層協議動態識別上也會遇到同樣的困難。如果IPS作為一個內核模塊運行于操作系統核心層,那么需要對所有可能產生競爭的共享資源進行并發訪問控制,使其徹底并行化,除此之外可能沒有什么更好的辦法了。
配置問題是并發系統中一個棘手的問題,用戶常常在系統運行過程中進行配置變更,而且總是希望這種變更后的配置能夠即時生效。
在并發IPS系統中只有一份配置,配置的變化意味著所有的并行工作都要暫停下來,需要根據新的配置調整運行參數。運行時態頻繁地調整配置不可避免地影響并發IPS系統性能,如果設計不好還會產生“停頓”,導致丟包。同樣的,在IPS系統中各種統計數據(流量統計、事件統計、時間統計等)都需要實時地準確地顯示到用戶可視層面,多個引擎需要并發地對單一數據結果操作,如果簡單地用鎖規避競爭也會很大程度上影響并發IPS系統性能的提升。
一個系統的成熟和完善離不開調試,與基于單內核的系統相比,并發IPS系統的調試工具極度匱乏,調試手段也很不成熟。那些傳統的強大的單步跟蹤工具已經沒有用武之地,就連簡單的打印調試信息也需要特別小心,因為你需要先知道這個信息是哪個內核打印的才好定位問題。如果系統運行時死鎖,那么整個系統或者IPS進程會被掛起,但留下的供你調試的線索卻非常有限。總之,有四類問題比較關鍵:死機、內存泄漏、內存篡改和報文調試。這些問題影響并發IPS系統的穩定,當然也影響到性能發揮。
【編輯推薦】