SDN实战团技术分享(三十八):DPDK助力NFV与云计算

DPDK最初动机很简单,网络处理器的软件解决方案,证明IA多核处理器能够支撑高性能数据包处理。

什么是DPDK?对于用户来说,它可能是一个出色的包数据处理性能加速软件库;对于开发者来说,它可能是一个实践包处理新想法的创新工场;对于性能调优者来说,它可能又是一个绝佳的成果分享平台。DPDK在主流Linux包含,比如Debian, Fedora,Redhat, Ubuntu, FreeBSD。

DPDK代码在www.dpdk.org上自由提交,软件发布时间是1年4次,分别是2017年2月、5月8月和11月。本质上,是一个软件优化。进一步讲,是对Linux的网络运行环境进行优化。

一张图示,大致包含这些软件模块,最核心的是Core与PMD。PMD- 基于轮询的用户态驱动。轮询,这一点很直接,为了避免中断上下文切换的开销。LINUX也采用该方法改进对大吞吐数据的处理,效果很好。

用户态驱动,在这种工作方式下,既规避了不必要的内存拷贝又避免系统调用。一个间接的影响在于,用户态驱动不受限于内核现有的数据格式和行为定义。有个假设: 很多应用都是在用户态,亲和性和独占,DPDK工作在用户态,线程的调度仍旧依赖内核。利用线程的CPU亲和绑定的方式,特定任务可以被指定只在某个核上工作。

好处是避免线程在不同核间频繁切换,核间线程切换容易导致因cache miss和cache write back造成的大量性能损失。如果更进一步地限定某些核不参与linux系统调度,就能使线程独占该核,保证更多cache hit的同时,也避免了同一个核内的多任务切换开销。

降低访存开销,网络数据包处理是一种典型的I/O密集型(I/O bound)工作负载。无论是CPU指令还是DMA,对于内存子系统(Cache+DRAM)都访问频繁。利用一些已知的高效方法来减少访存的开销能够有效提升性能。比如利用内存大页能有效降低TLB miss,比如利用内存多通道的交错访问能有效提高内存访问的有效带宽,再比如利用对于内存非对称性的感知可以避免额外的访存延迟,比如Hugepage。

DPDK很强调软件优化,四处吸取营养,比如结构的cache line对齐(cache alignment),比如数据在多核间访问避免跨cache line共享(false sharing),比如适时地预取数据(prefeching),再如多元数据批量操作(multi-buffer)。简单说,可以在一个例子中阅读,著名的l3fwd(链接http://www.dpdk.org/browse/dpdk/tree/examples/l3fwd)

DPDK 大量利用IA新硬件技术,DDIO,SIMD等等。在网卡驱动上,花了很多力,充分挖掘网卡的潜能,经过DPDK I/O加速的数据包通过PCIe网卡进入到系统内存,PCIe外设到系统内存之间的带宽利用效率、数据传送方式(coalesce操作)等都是直接影响I/O性能的因素。DPDK充分利用网卡硬件加速特性,比如RSS, FDIR,Checksum Offload, TSO 等等。结合网卡多队列技术,1G/10G/25G/40G/100G的低成本线速转发。

虚拟化是资源的逻辑表示,DPDK大力推动网络虚拟化。靠得是SR-IOV和VIRTIO,我们在NFV容器化下,引入了VIRTIO-user的概念,SR-IOV是PCI-e透传技术, 将物理网卡切片,直接透传到虚拟机。DPDK VF性能很高,可以实现线速转发,借助多核,大量的虚机可以并行运行,这是NFV的主要方式之一。

VIRTIO 是一种半虚拟化的设备抽象接口规范, 现代数据中心中大量采用的是KVM下vSwitch的主要Host/Guest接口,DPDK实现了VIRTIO前端,也就是虚机侧的轮训驱动,在主机侧、后端,实现了VHOST-user的轮训驱动,这个就构成了对vSwitch加速的基础。

http://www.dpdk.org/browse/dpdk/tree/drivers/net/vhost、http://www.dpdk.org/browse/dpdk/tree/drivers/net/virtio这是驱动程序所在地,Intel的网卡驱动http://www.dpdk.org/browse/dpdk/tree/drivers/net/i40e 这是XL710系列;http://www.dpdk.org/browse/dpdk/tree/drivers/net/ixgbe 这个是著名的82599系列。

我们是将容器网络优化,也放入DPDK中,关键在于VIRTIO-user。

这种方式可以在容器上运行VIRTIO-PMD,对接主机侧ovs-dpdk,类似OVS-DPDK加速机制,实现性能提升,2016年,DPDK的另外一大发展就是Cryptodev,我们最近推了一篇文章(http://mp.weixin.qq.com/s/fwRehoM5NTVLU6V_Bud-AQ)里面解释的比较详细,需要提一点,这个API,VPP 17.01 Release开始加入DPDK Cryptodev Support。

什么是VPP? 请移步 https://fd.io/ The Fast Data Project (FD.io),他们是这么说的,“Relentlessly focused on data IO speed and efficiency for more flexible and scalable networks and storage。”Cisco开源了矢量化的报文处理(VPP)。

VPP 17.01 Release开始加入DPDK Cryptodev的支持,用于IPsec处理。

DPDK的API提供了Crypto软件实现,硬件加速实现。预计以后在IA实现100Gbps IPsec是轻松搞定了

究竟DPDK有什么成功案例?

这些都是公开的开源项目信息,商业公司也不少,国内Alibaba, UCLOUD都在DPDKSummit做过公开演讲。

利用DPDK加速NFV(邓辉 中国移动)

利用DPDK优化云基础设施(孙成浩 阿里巴巴)

构建core以及高能效应用的最佳实践(梁存铭 Intel)

基于英特尔ONP构建虚拟化的IP接入方案(欧亮 中国电信)

DPDK加速无线数据核心网络(陈东华 中兴)

电信业务场景下的数据面挑战(刘郡 华为)

利用DPDK优化云基础设施 - 这是Alibaba 2015年的公开演讲,https://dpdksummit.com/us/en/past-events 可以查找2015,UCLOUD 2016年讲过他们的Load Balancer。TopSec 交流过将DPDK移植到内核态的历程,最后也回到了用户态,电信的成功案例不细说了。今年在上海,我们预期5月中旬还有新一期DPDK Summit,欢迎踊跃投稿参与。

Q&A

Q:vpp可以用来做协议解析框架吗

A:协议解析网卡也能offload一些,但在低层协议上L2/L3/L4,协议识别的关注点可能在高层上,应用类的识别比较复杂,还有国情,肯定VPP现在还不行。作为起点,开始接受报文的协议处理,是不错的选择,可以把这个问题扔到VPP社区里,问问他们的路标如何?

Q:请问DPDK在DPI深度包检测方面的应用如何? 具体实施有应用案例?

A: DPDK被广泛使用在DPI中, DPI是一个复杂的系统,DPDK关注解决报文进出,Hyperscan是Intel贡献给业界的一个核心复杂算法,可以用于正则表达式与字符串查找,在4月8日北京有个Hyperscan Workshop,我们会有具体案例分析

Q:请教个问题,nfv中dpdk一直loop对服务器性能消耗太高,virtio中断模式是否有资料能简单介绍一下?

A: 是的,我们早就注意到了这个问题,在2015年的DPDK Summit讲座中,梁存铭就做了专题,讨论引入中断模式,可以参考l3fwd-power这个sample以及相应文档,virtio interrupt 最近都有提交patch

Q:ovs-dpdk 和SR-IOV, 哪个适合企业数据中心的云计算?

A: 使用sr-iov还是vSwitch,取决于上层应用,见仁见智,sr-iov需要依赖硬件做报文过滤与分发,vSwitch是软件解决方法,决策点还是在数据中心的设计者,如何设计上层应用以及业务的弹性与跨平台(live migration),vSwitch提供了通用性,和具体网卡解耦合,易于做迁移,升级,但是性能稍差,SR-IOV性能好,具体部署还是需要看业务部署的需求

Q:如果服务器应用例如nginx mysql不使用内核协议栈和内核驱动,使用dpdk加用户态协议栈,有这样的用法没有?

A: dpdk加用户态协议栈 - 业界有广泛实践mTCP, SeaStar等等很多user space stack, 在FD.io上,也有两个项目,TLDK与VPP Stack,都在快速发展中

Q:能否形象地解释一下dpdk和sr-iov这两种技术的区别吗?仅仅是对网络性能优化软、硬件两种不同方案,还是本身就不在一个层次,或者是互补功能

A:sr-iov可以在Linux内核驱动 或者DPDK用户态中使用,SR-IOV是规范,DPDK是软件

Q:基于DPDK可以做通用上层应用平台吗?无修改兼容己有成熟软件

A; 应该可以的, 可以学习Alibaba的案例胶片

Q:如果不用sr-iov,而使用ovsdpdk,加dpdk-user,nfv最高性能理论上最高能达到多少?

A:这取决于你的模型,不同数量的vm,以及不同的traffic流得到的数据是不一样的,涉及到使用多少CPU资源在后端,多少CPU资源在前端,后续可以专门讨论一下这个话题。

Q:我理解dpdk更好的开发了报文处理的并行性 想请问下dpdk何种机制用来提升线程或进程间通信性能 例如统计计数 qos会需要到 dpdk有特殊设计么?

A:dpdk提供了很多种优化的技术,不仅仅是并行性的优化。进程间通信可以用shared memory和rte_ring,具体可以参考代码里的案例,比如 multi process

Q:dpdk +docker有人用吗

A:dpdk运行在容器中,是当下最流行的一个用法,可以sr-iov, 可以virtio-user作为进入容器的高速接口

Q:后面版本有什么新功能?

A:DPDK Roadmap会发布在网站上,http://www.dpdk.org/dev/roadmap

Q:DPDK以后会提供运行期修改Qos配置的功能吗?

A:现在就可以动态配置Qos的,可以参考最近推出的QoS API,不过,支持高复杂度的QoS的网卡还不多,抽象层的API才推出来,后续会继续完善

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2017-04-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

海量的超赞 Linux 软件

1.3K4
来自专栏张叔叔讲互联网

什么是网络爬虫,每天都在忙乎什么?(下篇)

上篇文章中提到我成功到达了B站服务器,并且成功拿到了所需要的Cosplay图片,但是除了图片之外还有一些其他内容,带着很多疑问我开着车以光速回家了。

1132
来自专栏Crossin的编程教室

3分钟破译朋友圈测试小游戏

最近,朋友圈时不时会流行起某个测试类小游戏,比如你的性格图谱啦,你是三体中的哪个角色啦,你有什么超能力啦……昨天晚上在某个群里,又被一个测测你是什么书的小游戏刷...

4567
来自专栏FreeBuf

左右互博:站在攻击者的角度来做防护

0x01、前言 习惯性的讲点废话,笔者是一名菜鸟安全工程师。有幸参与过两次安全方面的比赛,有些个人的体会,所以就有了这篇文章了。(自知技术还很菜,望各位大牛不喜...

2609
来自专栏SDNLAB

揭开NFV神秘的面纱

网络功能虚拟化(NFV)的正确实现,还需一段时间的研究与发展,因为NFV不仅要实现自动化、融合于现有的管理系统中,还需要更加的轻便。 ? NFV能够采用简单易用...

2894
来自专栏顶级程序员

为什么看起来不是很复杂的网站,淘宝、腾讯却需要大量顶尖高手来开发?

为什么看起来不是很复杂的网站,淘宝、腾讯却需要大量顶尖高手来开发? 阿里巴巴员工2万,百度技术人员超过6000,京东也有三四千攻城狮。 子柳: 就拿淘宝来说说...

4388
来自专栏高性能架构

一文看懂DPDK

从我们用户的使用就可以感受到网速一直在提升,而网络技术的发展也从1GE/10GE/25GE/40GE/100GE的演变,从中可以得出单机的网络IO能力必须跟上时...

2.9K9
来自专栏知晓程序

如何在微信群里发通知?这个方法特别好用

今天,「知晓程序」推荐的小程序「群里有事」,也许能解决这个问题。在这里,你不仅可以发布通知、活动,而且它有一种强大的魔力,吸引大家去查看。

1121
来自专栏FreeBuf

Android木马如何实现用户定位技术?

这几年安卓系统的普及速度可谓迅猛,一时间各式各样的设备都承载着安卓系统,手机、平板、机顶盒等都忠实地成为了安卓系统的用户。由于安卓系统在移动设备上的使用率最高,...

3625
来自专栏CSDN技术头条

走进 MIP,了解你不知道的移动 Web

从万维网(Web,以下简称 Web)成立,距今已经 29 年了。在 PC 时代,可以说 Web 统治了整个移动互联网,但进入移动时代后,随着 Native Ap...

1002

扫码关注云+社区

领取腾讯云代金券