現(xiàn)狀與需求
云計(jì)算技術(shù)的發(fā)展越來越快,應(yīng)用也越來越廣泛。NFV即網(wǎng)絡(luò)功能虛擬化,就是在電信云的基礎(chǔ)上,實(shí)現(xiàn)傳統(tǒng)和創(chuàng)新的網(wǎng)絡(luò)功能。為了實(shí)現(xiàn)網(wǎng)絡(luò)功能的虛擬化,在電信云里如何實(shí)現(xiàn)高速流量轉(zhuǎn)發(fā),以及加解密功能就十分必要。本文主要介紹了在云平臺里利用DPDK和CCK如何實(shí)現(xiàn)高速加解密功能。
技術(shù)介紹
DPDK
DPDK是X86平臺報(bào)文快速處理的庫和驅(qū)動的集合,使用UIO機(jī)制使網(wǎng)卡驅(qū)動程序運(yùn)行在用戶態(tài),并采用輪詢和零拷貝方式從網(wǎng)卡收取報(bào)文,提高收發(fā)報(bào)文的性能,并且使用hugepage和cpuaffinity機(jī)制提高應(yīng)用程序處理報(bào)文的性能。
CCK
IntelCaveCreek(CCK)是Intel推出的帶有加解密功能的高性能處理芯片,最高處理性能可達(dá)50Gbps。
高性能虛擬網(wǎng)絡(luò)接口
高性能虛擬網(wǎng)絡(luò)接口(AVP)是云平臺使用DPDK技術(shù)提供的高性能數(shù)據(jù)收發(fā)接口,其具有雙向20Gbps的線速收發(fā)能力。
基于dpdk的數(shù)據(jù)處理方案
數(shù)據(jù)收發(fā)
每個I/Ocore處理一個NIC的數(shù)據(jù)收發(fā),I/Olcore與Workerlcore之間采用ring buffer通信,每個IO RX/TX core會與各個Worker lcore 之間創(chuàng)建一個無鎖的單生產(chǎn)者單消費(fèi)者ring隊(duì)列,用于報(bào)文的傳遞。
I/Ocore采用輪詢的方式從網(wǎng)卡收包,收到報(bào)文后,直接將報(bào)文的內(nèi)存地址放入Workercore的RX隊(duì)列中;同樣采用輪詢的方式從Workercore的TX隊(duì)列中收取要發(fā)送的報(bào)文,再通過網(wǎng)卡將數(shù)據(jù)發(fā)出。數(shù)據(jù)的整個處理過程中傳遞的都是內(nèi)存指針,減少了內(nèi)存拷貝帶來的性能損失。
數(shù)據(jù)分流
對于上述方案,每個網(wǎng)卡對應(yīng)一個I/Ocore,但Workercore可能有多個,這就需要I/Ocore具備loadbalance功能,根據(jù)分流原則將收到的數(shù)據(jù)分發(fā)到不同的Worker core中。
數(shù)據(jù)收發(fā)過程
- I/ORX core從網(wǎng)卡收包,將報(bào)文放入內(nèi)存中,并對數(shù)據(jù)包進(jìn)行解包,解析出源目的ip地址、源目的port等信息;
- I/ORX core根據(jù)分流原則將報(bào)文所在的內(nèi)存地址放入對應(yīng)Worker core的RX ring隊(duì)列,Worker core從RX ring隊(duì)列收包;
- Workercore對數(shù)據(jù)進(jìn)行加解密處理;
- I/OTX core從Worker core的TX隊(duì)列中取出報(bào)文,經(jīng)過路由查找等操作后從相應(yīng)網(wǎng)卡發(fā)出。
基于CCK的加解密處理
CCK加速卡使用QuickAssist技術(shù)提供高速的加解密功能。QuickAssist專為基于數(shù)據(jù)平面的加解密提供一套API,以提高加解密的性能。為提高數(shù)據(jù)的存取效率,報(bào)文和操作參數(shù)都是以物理地址的方式傳送到CCK加速引擎中。
CCK的加解密過程:
i. 加解密預(yù)處理,如報(bào)文頭修改、重建等;
ii. 建立會話instance并構(gòu)建操作參數(shù);
iii. 調(diào)用CCK驅(qū)動接口,將報(bào)文和操作參數(shù)交由CCK加速引擎執(zhí)行加解密操作;
iv. 加解密完成后,CCK調(diào)用回調(diào)函數(shù)對報(bào)文進(jìn)行加解密后處理,如計(jì)算checksum。
在云平臺上基于DPDK和CCK的IPsec加解密方案
方案描述
I/Ocore收到包后對數(shù)據(jù)包進(jìn)行解析、分流,并將報(bào)文送到相應(yīng)的Workercore隊(duì)列;Workercore收到報(bào)文后進(jìn)行CCK參數(shù)配置,并將報(bào)文交由CCK進(jìn)行加解密處理。加解密采用異步模式,Worker core將報(bào)文交給CCK后立即返回重新從網(wǎng)卡收包,待CCK執(zhí)行完加解密操作后將加解密后的數(shù)據(jù)放入ring中,Worker core下次輪詢時將ring中的報(bào)文讀出,再繼續(xù)進(jìn)行路由等處理。
Demo測試
Demo測試是在云平臺中進(jìn)行的,使用4個core(頻率2.5GHz,兩個用于I/O,兩個處理加解密),兩個10G的AVP接口,一塊CCK卡(DH8950)。單向數(shù)據(jù)轉(zhuǎn)發(fā)和加解密性能如下圖所示。從結(jié)果分析,對于512以下的報(bào)文最多可以達(dá)到50%的線速轉(zhuǎn)發(fā)和40%線速的加解密處理,但對于1400以上的大包可以做到線速轉(zhuǎn)發(fā)和加解密處理。