【转】DPDK: Data Plane Development Kit 简介

What it is

DPDK is a set of libraries and drivers for fast packet processing. It was designed to run on any processors knowing Intel x86 has been the first CPU to be supported. Ports for other CPUs like IBM Power 8 are under progress. It runs mostly in Linux userland. A FreeBSD port is now available for a subset of DPDK features.

DPDK is an Open Source BSD licensed project. The most recent patches and enhancements, provided by the community, are available in master branch.

Main libraries

  • multicore framework

  • huge page memory

  • ring buffers

  • poll-mode drivers

Usage

These libraries can be used to:

  • receive and send packets within the minimum number of CPU cycles (usually less than 80 cycles)

  • develop fast packet capture algorithms (tcpdump-like)

  • run third-party fast path stacks

For example, some packet processing functions have been benchmarked up to 160 Mfps (million frames per second, using 64-byte packets) with a PCIe Gen-2 NIC.

What it's not

DPDK is not a networking stack and does not provide functions such as Layer-3 forwarding, IPsec, firewalling, etc. Within the tree, however, various application examples are included to help with the development of such features.

If you need some specific drivers or networking stacks, you should contact a company that provides such extensions.

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/1254http://lenky.info/?p=1254

备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来信讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。


你可能感兴趣的:(【转】DPDK: Data Plane Development Kit 简介)