紛紛擾擾話“多核”:解密應用交付的軟件架構
CPU篇
鄧小平曾經說過一句很經典的話:“兩手抓,兩手都要硬”。作為一類比較特殊的網絡設備,應用交付產品同樣存在著兩個重要的要求:一是網關位置的應用場景要求具有超大的網絡吞吐性能;另一方面,應用層加速的特性功能又要求具備超強的CPU計算能力。從這種意義上來講,它是既要求純四層防火墻場景下的高吞吐,又要求防攻擊防病毒特性下的高計算能力。
那么,怎么樣才能在應用交付上實現這兩大重要功能?Intel x86平臺款款而來。
近年來,為了在網絡產品上開疆拓土,Intel在嵌入式平臺領域上持續發力,并且其Sandybridge / Ivybridge系列平臺在IO方面做了大幅優化,這就使得它在網絡吞吐方面不再存在短板。
基礎硬件平臺搭建起來后,讓各家廠家繼續抓耳撓腮的事情就只剩一樣了:優化。怎樣才能在同質化的硬件平臺上優化各自的軟件架構,并創造最大的性能效益,成為了讓各應用交付廠商兩眼冒綠光的重要課題。
在x86平臺上,優化目標很明確:就是在單CPU處理能力夠強勁的基礎上增加多核的并行計算水平。目前在中低端嵌入式平臺上普遍應用的Sandybridge/Ivybridge酷睿CPU,最多4核心,如果算上超線程計數可達8核心;而應用于中高端嵌入式的雙路至強平臺,則最多可以做到2路10核心也就是總共20核心,再算上超線程即可達到40核心之多。如此多的CPU核心,如果能夠做到完全并行的話,創造出的性能效益那是杠杠地強啊!
通用操作系統的困擾
因為Linux自身就具備支持并行化處理的功能,因此,目前國內大部分廠商都采用直接利用Linux的SMP模式。
為什么會導致這種問題出現?
第一,流水線作業導致堵車事故時有發生。Linux的SMP在工作時,CPU幾個核必須流水線一樣依次處理各個任務,前面的任務完不成,后面的任務就不能繼續。
第二,SMP模式存在大量的互鎖操作。何為互鎖操作?我們來打個比方,我們把CPU比作人。如果一群人打算吃一筐蘋果,當第一個人從筐里拿蘋果的時候,為了避免與其他人的操作產生沖突,需要臨時“鎖”住這筐蘋果,這樣其他人就必須等第一個人把蘋果吃完才能接著“吃”。如此一來,必然人數越多,沖突就越厲害。
第三,內存共享與IPC機制。Linux多核內存共享,一個CPU操作內存的部分數據塊時,其他CPU就得在旁邊干等著。
第四,是IPC通訊,CPU核與核之間完成交互、調度機制,需要通過IPC消息,而這個在大流量應用層處理時,往往占據了大量的系統開銷。
由于SMP機制的這些問題,因此直接導致了在多核平臺下,軟件的使用效率很低。
T-Force應用交付如何做到高性能?
同樣是多核平臺,T-Force的ADC為什么能做到這么高的性能呢?
核心在于,T-Force單獨設計了軟件架構,在業務系統前端增加了分流器的概念。也就是說,進入ADC設備的數據流首先經過分流器的梳理,將數據流分成若干份(一般是按照TCP/UDP五元組的hash值進行分流),再分配到每個核心的業務系統上。這樣每個核心的業務系統處理自己單獨的一份數據流,不需要和其他核心共享任何表項資源,最大程度上避免共享資源的互斥訪問,增加業務處理的并行性。
從上圖不難看出,處理業務流量的APP受傳統的操作系統的SMP管理,每個APP隨機處理數據包。因此所有的APP會在系統內存中共享全局的連接表等資源,業務處理過程就存在比較明顯的互斥訪問。在核心數越多的情況下,互斥碰撞的概率越高,并行化水平也就衰減得越快。
分流器的實質是將流量分組化,每個核心處理一組獨立的流。分組之后連接表等數據結構都分布化了,核心之間自然也不存在共享互斥了。
軟件分流與硬件分流的差別
軟件分流是使用多核CPU內部的某些核心去處理分流的工作。
硬件分流是在CPU之外擴展硬件組件完成分流的工作。
軟件分流器架構以其實現方便,靈活性好的優點,在盒式ADC設備中普遍應用,為其帶來了很大的成本、性能優勢。