Intel DPDK
Intel DPDK的相关介绍无需多说,能接触到它的人自然知道,无法接触到的人知道了也没用,目前从因特网下载不到源码,因为据说DPDK尚处于“Early Access”阶段,仅在签订NDA协议的前提下提供给相关企业客户使用,不过intel有计划未来进行大幅的广播该工具包(见intel官网帖子:http://embedded.communities.intel.com/thread/4935内MichaelLynch的回复,不过这已经是2011年3月份的事情),当然现在还是有很多企业已经在用,或尝试在用。用这个Kit制作的demo发包工具,同等条件下的性能比pktgen要好上一倍,当然,之前测试的pktgen模块未做任何优化,所以这种比较有点不公正,不过毕竟利用DPDK开发的程序都在应用层,所以测试与调试相对都会比较方便。
Intel DPDK的介绍没讲,但它的技术点却想讲一下,因为这些技术点并没有什么特别,所以虽然我们也许无法使用DPDK,但可以使用这些技术点,DPDK主要用到三个技术点分别为hugetlbpage、uio以及cpu affinity。
关于hugetlbpage,之前讲过,它的主要好处当然是通过利用大内存页提高内存使用效率;而uio是实现用户空间下驱动程序的支撑机制,由于DPDK是应用层平台,所以与此紧密相连的网卡驱动程序(当然,主要是intel自身的千兆igb与万兆ixgbe驱动程序)都通过uio机制运行在用户态下。
cpu affinity机制是多核cpu发展的结果,在越来越多核心的cpu机器上,如何提高外设以及程序工作效率的最直观想法就是让各个cpu核心各自干专门的事情,比如两个网卡eth0和eth1都收包,可以让cpu0专心处理eth0,cpu1专心处理eth1,没必要cpu0一下处理eth0,一下又处理eth1,还有一个网卡多队列的情况也是类似,等等;扯远了,后续再写专篇来总结CPU亲和性问题。回到DPDK这里,DPDK利用cpu affinity主要是将控制面线程以及各个数据面线程绑定到不同的cpu,省却了来回反复调度的性能消耗,各个线程一个while死循环,专心致志的做事,互不干扰(当然还是有通信的,比如控制面接收用户配置,转而传递给数据面的参数设置等),该干啥干撒。
所以,这样看来,DPDK并不高深,用到的东西也都是Linux本身提供的特性,还有额外的内存池、环形缓存等,虽然封装得很好,但的确都是非常熟悉的东东,至少我目前了解到的情况是如此。
转载请保留地址:http://www.lenky.info/archives/2012/03/1254 或 http://lenky.info/?p=1254
备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来信讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。
法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。
我去,以前一直以为DPDK是收费的,Gongsi基于这个开发的要开代码都不让的,居然有源供下载,历害啊。。
幸好不时来这里看看。。
@abc
这个要顶!!!
@abc
我去, dpdk.org
@lenky
已经有官网啦
dpkg.org
转自一QQ好友的说说:
下载下来看了一下,根据记忆,的确是DPDK的源码。
额,我当然有看到源码,:)
都没看到源码,楼上是怎么知道的,
呵呵~~
@wwwlkk
没有。你应该有进行进程cpu绑定吧?另外,你可以想办法把系统的其它所有(系统或服务)进程都绑定到某个特定的cpu上,以不让这些进程和你的dpdk进程竞争cpu。
lenky有测试过DPDK的延迟吗?
我这边的测试结果是:(千兆网卡82580,纯转发模式)
平均延迟可以在20us以内,但是最大延迟总会超过1000us,就算是10Mbit每秒的低压力下,最大延迟也会超过1000us。
我想可能是dpdk自身的原因吧:DPDK使用进程来读取和发送数据包,而进程的优先级是较低的,cpu随时都可能被硬中断或者软中断占用,或者其它进程占用,这就可能导致DPDK在较长时间内无法使用cpu,最终导致丢包,或者延迟加大。
目前国内使用DPDK的公司应该不多吧,个人感觉DPDK作为一个基础平台,开发的还是非常不错的,前景应该很广阔的,贵公司也在使用DPDK吗,具体怎么使用DPDK能交流一下吗。邮箱wwwlkk@126.com
DPDK模型目前有个比较突出的问题是应用层驱动要采取轮询方式收包,没有中断优先级的概念,如果收包逻辑夹杂有其它业务逻辑可能会导致收包不及时而丢包,所以需要根据每一个包的处理逻辑复杂度来调节每间隔处理多少包就必须去进行一次收包操作;要么单独出计算资源(也就是cpu)专注收包,然后对包进行cpu间传递给其它业务计算资源进行处理,要么增加定时器,定时收包,但不管怎样,这都将对整体架构设计上带来一些困难,并且导致性能严重下降。