dpdk的研究与思考

一、DPDK概念

DPDK是X86平台报文快速处理的库和驱动的集合,大多数情况下运行在linux的用户态空间,目前最新版本1.5.0可以到官方网站dpdk.org下载。

DPDK不是网络协议栈,不提供二层,3层转发功能,不具备防火墙ACL功能,但通过DPDK可以轻松的开发出上述功能。

多核架构

大页内存

队列缓存

轮询驱动

主要的功能

在最小的CPU周期内接受和发送数据包

开发快速获取数据包的算法(类似tcpdump-like)

运行第三方快速路径栈

二、     API

http://www.dpdk.eu/doc/api/

三、     不足和改进

1.  在dpdk中,缓存的实现是基于一个环形的队列,支持单线程出入队和无锁的多线程出入对,单线程时执行较为简单,当为多线程时,每当一个线程入队时,都需要判断队列的头部是不是和其他的线程发生了竞争,如果发生了就需要无限循环等待的去判断这个队头什么时候可以用,而不是当队头可以用时,去通知线程可以处理这个缓存队列,在一定程度上浪费了系统资源去循环判断。同样,当线程出队时,都需要判断队尾是不是和其他线程发生了竞争,存在同样无限循环等待的过程。拟通过类似内存池机制,实现多线程下的缓存分配策略。

2.  在dpdk中,网卡的驱动是基于linux nio实现的轮询驱动,当每次返回时都需要去轮询所有的网卡,当网卡数不多时,这样的策略是可以接受的,如果要应对以后的不定的情况,效率会随着网卡的增多而下降,拟实现像epoll机制一样,只需要获得某些活跃的网卡,而不是轮询所有。

 

 

你可能感兴趣的:(dpdk的研究与思考)