Data Plane Development Kit

背景

传统网络设备的局限:基于ASIC进行高速数据转发,迭代慢,bug修复慢,封闭,难维护。

X86等平台的优势:万物皆可虚拟化,包括路由交换防火墙等系统,物理接口已经具备10GE的转发能力。

传统网络设备与计算平台融合的问题:转发的数据的行为需要系统内核控制产生大量系统中断并直接导致CPU介入,高速转发时资源占用率高,转发效率低下。

为解决以上问题,dpdk提供了在X86、ARM等平台进行数据高速转发的方案。

原理

dpdk提供了一种绕过内核的数据处理方式:

左边是原来的方式数据从 网卡 -> 驱动 -> 协议栈 -> Socket接口 -> 业务

右边是DPDK的方式,基于UIO(Userspace I/O)旁路数据。数据从 网卡 -> DPDK轮询模式-> DPDK基础库 -> 业务

用户态的好处是易用开发和维护,灵活性好。并且Crash也不影响内核运行,鲁棒性强。

DPDK支持的CPU体系架构:x86、ARM、PowerPC(PPC)

DPDK支持的网卡列表:https://core.dpdk.org/supported/,我们主流使用Intel 82599(光口)、Intel x540(电口)

UIO

为了让驱动运行在用户态,Linux提供UIO机制。使用UIO可以通过read感知中断,通过mmap实现和网卡的通讯。

PMD

DPDK的UIO驱动屏蔽了硬件发出中断,然后在用户态采用主动轮询的方式,这种模式被称为PMD(Poll Mode Driver)。

UIO旁路了内核,主动轮询去掉硬中断,DPDK从而可以在用户态做收发包处理。带来Zero Copy、无系统调用的好处,同步处理减少上下文切换带来的Cache Miss。

运行在PMD的Core会处于用户态CPU100%的状态

网络空闲时CPU长期空转,会带来能耗问题。所以,DPDK推出Interrupt DPDK模式。

Interrupt DPDK:

结束

dpdk比较难上手,涉及到驱动级别的代码编写,目测不适合我,所以只简单记录,知道有这种高科技就好了。

参考资料

绝对干货!初学者也能看懂的DPDK解析