现状与需求
云计算技术的发展越来越快,应用也越来越广泛。NFV即网络功能虚拟化,就是在电信云的基础上,实现传统和创新的网络功能。为了实现网络功能的虚拟化,在电信云里如何实现高速流量转发,以及加解密功能就十分必要。本文主要介绍了在云平台里利用DPDK和CCK如何实现高速加解密功能。
技术介绍
DPDK
DPDK是X86平台报文快速处理的库和驱动的集合,使用UIO机制使网卡驱动程序运行在用户态,并采用轮询和零拷贝方式从网卡收取报文,提高收发报文的性能,并且使用hugepage和cpuaffinity机制提高应用程序处理报文的性能。
CCK
IntelCaveCreek(CCK)是Intel推出的带有加解密功能的高性能处理芯片,最高处理性能可达50Gbps。
高性能虚拟网络接口
高性能虚拟网络接口(AVP)是云平台使用DPDK技术提供的高性能数据收发接口,其具有双向20Gbps的线速收发能力。
基于dpdk的数据处理方案

数据收发
每个I/Ocore处理一个NIC的数据收发,I/Olcore与Workerlcore之间采用ring buffer通信,每个IO RX/TX core会与各个Worker lcore 之间创建一个无锁的单生产者单消费者ring队列,用于报文的传递。
I/Ocore采用轮询的方式从网卡收包,收到报文后,直接将报文的内存地址放入Workercore的RX队列中;同样采用轮询的方式从Workercore的TX队列中收取要发送的报文,再通过网卡将数据发出。数据的整个处理过程中传递的都是内存指针,减少了内存拷贝带来的性能损失。
数据分流
对于上述方案,每个网卡对应一个I/Ocore,但Workercore可能有多个,这就需要I/Ocore具备loadbalance功能,根据分流原则将收到的数据分发到不同的Worker core中。
数据收发过程
- I/ORX core从网卡收包,将报文放入内存中,并对数据包进行解包,解析出源目的ip地址、源目的port等信息;
- I/ORX core根据分流原则将报文所在的内存地址放入对应Worker core的RX ring队列,Worker core从RX ring队列收包;
- Workercore对数据进行加解密处理;
- I/OTX core从Worker core的TX队列中取出报文,经过路由查找等操作后从相应网卡发出。
基于CCK的加解密处理
CCK加速卡使用QuickAssist技术提供高速的加解密功能。QuickAssist专为基于数据平面的加解密提供一套API,以提高加解密的性能。为提高数据的存取效率,报文和操作参数都是以物理地址的方式传送到CCK加速引擎中。
CCK的加解密过程:
i. 加解密预处理,如报文头修改、重建等;
ii. 建立会话instance并构建操作参数;
iii. 调用CCK驱动接口,将报文和操作参数交由CCK加速引擎执行加解密操作;
iv. 加解密完成后,CCK调用回调函数对报文进行加解密后处理,如计算checksum。
在云平台上基于DPDK和CCK的IPsec加解密方案
方案描述
I/Ocore收到包后对数据包进行解析、分流,并将报文送到相应的Workercore队列;Workercore收到报文后进行CCK参数配置,并将报文交由CCK进行加解密处理。加解密采用异步模式,Worker core将报文交给CCK后立即返回重新从网卡收包,待CCK执行完加解密操作后将加解密后的数据放入ring中,Worker core下次轮询时将ring中的报文读出,再继续进行路由等处理。
Demo测试
Demo测试是在云平台中进行的,使用4个core(频率2.5GHz,两个用于I/O,两个处理加解密),两个10G的AVP接口,一块CCK卡(DH8950)。单向数据转发和加解密性能如下图所示。从结果分析,对于512以下的报文最多可以达到50%的线速转发和40%线速的加解密处理,但对于1400以上的大包可以做到线速转发和加解密处理。
