DPDK

在大数据时代,网络数据包的快速处理是面临的难题之一,传统的收发报文都需要硬中断做处理,耗时,从内核态到用户态切换带来cpu消耗,全局竞争锁和cache miss,经过路径太长等因素。而靠硬件的堆砌成本太大,于是出现了从软件方向改善性能的工具如dpdk。

dpdk是运行在用户空间的加速处理网络数据包的库和函数的集合,不是一个协议,是一个软件程序。

传统的网络数据包处理的顺序是:网卡->硬中断->取包发送至内核线程->软件中断->内核协议栈处理->处理完通知用户层->用户层接受包->网络层->逻辑层->业务层。

dpdk的思想是绕过内核协议栈直接让用户层去处理数据包,内核只负责处理硬中断,然后用户层直接映射对应的接口设备,接收数据包进行处理,即:网卡->硬中断->放弃中断流程,而是用户层通过映射取包->用户层协议栈处理->逻辑层->业务层。

dpdk优势:

dpdk基石是uio,linux提供了uio机制可以让驱动运行在用户态。uio原理即:一般的驱动都运行在内核空间,uio则是将驱动的很少一部分运行在内核,用户空间实现大部分功能,内核仅做设备分配和注册记录。

dpdk核心优化是PMD,即用户态轮询驱动,uio驱动屏蔽了硬中断,在用户控件采用轮询的方式。uio旁路了内核,pmd屏蔽硬中断,使得收发数据包均在用户空间,带来zero copy,减少系统调用带来的开销。

通过大页内存HugePage技术,减少cache miss,提高cpu利用率。

通过cpu的亲和性绑定网卡和线程到特定的核,减少线程切换开销提高cache命中。

通过无锁队列减少资源竞争。

 

 

 

你可能感兴趣的:(DPDK)