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