Overview
Intel DPDK: Intel Data Plane Development Kit
-
Intel 开发在IA架构上用于高性能网络数据面处理的基础库。
-
针对IA 处理器的数据包处理性能进行了大量优化。
-
绕过Linux内核,在应用层开发高性能网络包处理程序。
-
DPDK不是网络协议栈,不提供二层,三层转发功能,不具备防火墙ACL功能,但通过DPDK可以轻松开发出上述功能。
-
采用BSD开源协议
Performance limitation factors
使用linux socket进行开发存在如下一些性能瓶颈:
-
cpu瓶颈:调度,上下文切换,中断,系统调用
-
内存瓶颈:为每个packet分配释放内存,复杂的sk_buffer结构,
copy_from/to_user,TLB miss
-
冗长而非必要的内核协议栈路径
下图为sk_buffer结构:
该图是linux内核协议栈草图:
结论:标准的数据面只是用于通用环境
DPDK优化
-
每个应用程序线程通过Pthead亲和性绑定到特定的硬件线程。程序在该线程所在socket上分配分配内存。
-
重载malloc,所有内存分配基于hugepage,减少tlb miss
-
实现对象缓冲池mempool,对象着色,确保所有对象均匀分配到cpu cache上。
-
网络包结构采用mbuf。mbuf 在程序启动时预先从mempool中分配。
-
Lockless ring队列,所有对象均采用此设计进行连接
-
针对Intel 网卡的Poll mode driver,无中断机制,能够高速收发报。数据包进出应用程序中实现了零拷贝。 驱动采用run-to-completion机制,数据包收发处理都在一个硬件线程