Intel 推出 DPDK 开发包的意义是什么?

Intel 推出 DPDK 开发包的意义是什么?

http://www.zhihu.com/question/27413080?sort=created

基于intel dpdk的包处理器,相较于基于内核网络协议栈的包处理器,优势和价值在哪里?
基于dpdk的包处理性能,是否会比基于内核协议栈高,如果高会高多少,内核网络协议栈的瓶颈又主要在哪里?

市场
一句话:Intel推出dpdk,就是为了让自己的硬件产品卖得更好。
功能多了,灵活度高了,性能又不赖,谁不愿意买哟?
dpdk只适合在x86平台下使用,其达到相当高的性能水平,仰赖的也完全是Intel硬件内部的独特机制(详情参照楼上技术剖析)。这非常明显地抬高了Intel硬件产品的身价。
这应该是Intel的主要目的。

需求
dpdk在我目前关注的领域(IP的做,非IP的也做;未来三五年的技术验证做,未来三五十年的概念原型也做),主要是用于开发内核尚不具备的新功能。就更新速度而言,内核更新慢,基于dpdk的网络功能更新快。
将一种新的网络功能写入内核并纳入发行版linux,需要较为复杂的调试和完善过程。一般要求该功能已经相当成熟可靠,且复杂度不高,适合在内核中运行。
而dpdk为厂商提供了更广阔的发挥空间,可以说很好地推动了新机制、新技术的试验和改良

首先dpdk总的来说是一个2层的东西,也就是说本来驱动做的事情放到用户层来做了,并且根据体系结构提供了各种各样的优化,一般只用来做IO,当然也提供了很多3层的库,转发的库,lpm的库等,dpdk并没有提供开源的高性能tcp/ip协议栈。
不清楚楼主说的基于内核协议栈的包处理器具体指什么,如果是指linux内核本身的协议栈的话,其实主要还是兼容性和通用性。当然也有一些硬件实现的Tcp offline engine,但是受限于硬件网卡内存的限制,在tcp的并发量和性能上并不会比基于dpdk的高。
至于具体性能,其实是可以量化的,10Gbps ,64bytes包长,如果一个包的处理时间大于67ns,那么肯定会丢包,也就是说所有处理基本只能全部在cache里,长时间稳定的不丢包还是很难做到的。
至于dpdk的轮询机制,不管有没有包,cpu都是100%,一旦收包的这个线程绑定的cpu被别的线程抢占,那么性能会大幅度下降。
dpdk高性能限制非常非常多,配置也基本无法通用,要充分考虑numa+nuio等各种体系结构,一旦cpu配置错了,性能渣得要死。
dpdk出来之前,也有很多类似的解决方案,基本原理都是大同小异,ioengine,netmap,ntop 10g系列。

不过dpdk和他们相比性能上没有多大优势,配置和操作上比他们都复杂的多,不稳定性也大,但是dpdk有一个他们没法比的巨大优势,就是dpdk支持几乎所有intel 网卡,包括最新出的网卡。如果过几年不想在你的驱动程序里手动添加新的intel网卡支持,那么选择dpdk没错的。

还有一个,就是可以用gdb调试了。

首先,DPDK和内核网络协议栈不是对等的概念。

DPDK只是单纯的从驱动拿数据,然后组织成数据块给人用,跑在用户态。功能相当于linux的设备无关接口层,处于socket之下,驱动之上。只不过linux协议栈的这部分在核心态。
你说的包处理器,很多时候是不用linux内核协议栈的,而是用专用包处理程序,类似于DPDK加上层应用处理。通常会有些硬件加速器,包处理效率更高些。缺点是一旦用不上某些功能,那些加速器就白费了。而纯软件处理就非常灵活,不过代价就是功耗和性能。

纯DPDK性能非常高,intel自己给出的数据是,处理一个包80时钟周期。一个3.6Ghz的单核双线程至强,64字节小包,纯转发能力超过90Mpps,也就是每秒9千万包。
不知你有没有看出来,80周期是一个非常惊人的数字?正常情况下,处理器访问一下ddr3内存都需要200个周期,而包处理程序所需要操作的数据,是从pcie设备送到ddr内存的,然后再由处理器读出来,也就是说,通常至少需要200周期。为啥现在80周期就能完成所有处理?我查了下文档,发现原因是使用了stashing或者叫direct cache access技术,对于PCIe网卡发过来的包,会存在一个特殊字段。x86的pcie控制器看到这个字段后,会把包头自动塞到处理器的缓存,无序处理器来干预。由于包头肯定是会被读取的,这样相当于提前预测,访问的时间大大缩短。

如果加上linux socket协议栈,比如跑个纯http包反弹,那么根据我的测量,会掉到3000-4000周期处理一个包,单核双线程在2.4Mpps,每秒两百四十万包,性能差40倍。

性能高在哪?关键一点,DPDK并没有做socket层的协议处理,当然快。其他的,主要是使用轮询替代中断,还有避免核心态到用户态拷贝,并绑定核,避免线程切换开销,还有避免进入系统调用的开销,使用巨页等。
还有很关键的一点,当线程数大于12的时候,使用linux协议栈会遇到互斥的瓶颈,用性能工具看的话,你会发现大部分的时间消耗在spin_lock上。解决方法之一是如github上面的fastsocket,改写内核协议栈,使包始终在一个核上处理,避免竞争等。缺点是需要经常自己改协议栈,且应用程序兼容性不够。
另外一个方法是使用虚拟机,每个特征流只在一个核处理,并用虚拟机隔绝竞争,底层用dpdk做转发,上层用虚拟机做包处理,这样保证了原生的linux协议栈被调用,做到完全兼容应用程序。不过这种方法好像还没有人做成开源的,最近似的是dpdk+虚拟交换机ovs的一个项目。
如果你只想要dpdk的高性能加tcp/ip/udp的处理,不考虑兼容性,那么还可以去买商业代码,我看了下供应商的网站介绍,纯转发性能大概在500-1000周期左右一个包。

时间: 2024-08-13 19:50:19

Intel 推出 DPDK 开发包的意义是什么?的相关文章

谷歌推出DAYDREAM开发包

<<< 谷歌推出Daydream开发包,VR应用爆发将至 >>> 2016年是虚拟现实元年,除了索尼.HTC和Oculus三大公司开发全功能头盔之外,不计其数的智能手机企业也推出了简易型头盔,希望能够在VR市场分一杯羹.在手机VR领域,野心勃勃的谷歌准备成为一家VR开发的标准制定企业.日前,谷歌面向VR开发准备的开发工具包"谷歌VR SDK 1.0"正式结束了测试期,面向所有虚拟现实开发者提供下载. 利用这一工具包,开发者可以面向所有符合Daydre

Android SDK开发包国内下载地址

原文:Android SDK开发包国内下载地址 不知道是因为最近kaihui还是怎么的,打开android sdk官方网站特别的慢,想下载最新版本的platform几乎变成不可能完成的任务,不知道为什么Google不像Apache那样在各国设立镜像站.为了预防今后再出现这样的情况,这次干脆把android开发所需要的各种包总结一下,顺便提供本地下载链接,省得以后找起来麻烦. 通过分析SDK Manager里要用到的repository文件,我下载了目前google提供的各类安卓开发包并上传到了网

更新 是 可用的 针对 安卓 软件开发包和工具 Updates are available for android software development packages and tools

作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:[email protected] E-mail: 313134555 @qq.com 更新 是 可用的 针对 安卓 软件开发包和工具 Updates are available for android software development packages and tools 安卓软件开发包更新 确保 你有最新的特性和 增强. 安卓工作室将更新下面的组件: 安卓模拟器 新版本 26.1.2 谷歌仓库新版本 57 安卓7.

高效简易websocket服务开发包beetle

websocket的主要是为了解决在web上应用长连接进行灵活的通讯应用而产生,但websocket本身只是一个基础协议,对于消息上还不算灵活,毕竟websocket只提供文本和二进制流这种基础数据格式.在实际应用则更偏向于对象消息的处理,而在这基础上更希望集成一系列的消息路由机制来解决消息处理上的问题.为了解决以上问题beetle针对websocket进行了一些高层次的封装,让服务端处理消息变得更简单灵活.以下通过不同的示例介绍Beetle websocket开发包的简易性. hello wo

手机视频开发包

概述: 手机视频开发包是面向集成或软件开发商使用,用于开展手机视频相关的产品开发和系统集成. 开发包提供手机端音视频采集.编码.压缩.音视频传输等功能:通过与后端移动视频直播服务器对接,实现手机视频即拍即传.手机视频直播.开发包提供视频拍摄位置信息,视频描述采集和发布:开发包提供拍摄端和服务器端的文字和语音的对讲等功能. 当前版本的手机视频开发包采集端支持iOS和Android平台. 后端的视频服务器通过标准协议与集成商或软件开发商的业务系统进行对接,从而形成手机端到服务器端的实时移动视频应用.

3G手机视频对讲开发包

一.概述 针对3G网络研发的"手机视频对讲开发包",使人们在任何能够使用手机的地方都可以随时随地进行视频对讲.视频会议.应急视频指挥等,突破了传统固网的限制,是3G业务的革命性产品.该开发包已经通过了稳定性测试,是目前最完善的适合于大规模商用的3G视频应用开发包,填补了国内空白. 手机视频开发包可为3G用户提供视频监控和告警信息.远程采集.传输.存储.处理与传播等方面的无线网络视频服务,是一种有效的安防及管理工具:手机会议平台是为用户提供手机视频会议的定制.配置.使用的手机视频会议系统

Python开发包推荐系列之xml、html解析器PyQuery

使用python,喜欢她的简洁是一方面,另外就是它有着丰富的开发包 好用又方便 接下来会给大家推荐一系列很赞的开发包. 在解析html.xml过程中,我们有不少的包可以用.比如bs.lxml.xmltodict等 如果说你想立即上手,那么pyquery必然是最佳之选. 从名字上就可以看出,她一定和jQuery有着一定的关系 在官方网站上就是这样描述它的 pyquery: a jquery-like library for python 没错,作者就是将html.xml的解析接口封装成了类似jQu

最新Android SDK_API_开发包_离线包_下载

[转载][资源]最新Android SDK_API_开发包_离线包_下载 开发Android应用少不了Android SDK,由于谷歌服务器的原因,在国内下载Android SDK速度非常慢,如果要把所有的Android SDK下载回来势必是一件非常痛苦的事情.因此,在这里把本人下载的所有的Android SDK打包分享,希望对广大Android 开发者能有所帮助. 所安装的Android SDK,  包括谷歌到目前为止发布的所有的Android API,和部分工具. SDK_API_开发包_离

Struts开发包下载(包含源文件和各种文档)

(1)找了大半天加上各种版本的Struts开发包,基本上要么是不全,要么根本不可以用: (2)奋战了很久终于找到了官网,特给大家地址分享: http://struts.apache.org/download.cgi#struts221 源代码在里边哦! (3)如果链接失效,回复邮箱 发给你们!