DPDK 简介和原理
本文分享自天翼云开发者社区《DPDK简介和原理》,作者:s****n
DPDK 是一种绕过内核直接在用户态收发包来解决内核性能的瓶颈技术。
什么是中断
了解 DPDK 之前,首先需要先了解什么是中断,其实中断就是电信号,中断分两种:硬中断和软中断。
什么是硬中断?硬中断是由与系统相连的外设(比如网卡、硬盘)自动产生的,主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。
什么是软中断?软中断为了满足实时系统的要求,中断处理应该是越快越好。linux 为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。
硬中断和软中断有两个明显的区别:
其一软中断是执行中断指令产生的,而硬中断是由外设引发的;
其二硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。
了解 DPDK 网络处理流程
了解完中断的原理,我们来对比下传统网络处理流程和有 DPDK 加持下的处理流程有何不同。
传统网络处理流程:
dpdk 处理流程:
可以明显看出区别,dpdk 可以感知中断,应用层通过内存映射实现和网卡的通讯,减少了 IO 处理流程。
DPDK 的 UIO 机制
为了让驱动运行在用户态,Linux 提供 UIO 机制。使用 UIO 可以通过 read 感知中断,通过 mmap 实现和网卡的通讯。
要开发用户态驱动有几个步骤:
开发运行在内核的 UIO 模块,因为硬中断只能在内核处理
通过/dev/uioX 读取中断
通过 mmap 和外设共享内存
DPDK 核心优化:PMD 模式
DPDK 的 UIO 驱动屏蔽了硬件发出中断,然后在用户态采用主动轮询的方式,这种模式被称为 PMD(Poll Mode Driver)。
UIO 旁路了内核,主动轮询去掉硬中断,DPDK 从而可以在用户态做收发包处理,带来 Zero Copy、无系统调用的好处,同步处理减少上下文切换带来的 Cache Miss。
判断环境是否采用 dpdk
检验判断环境中是否采用 dpdk 有两种常用的方法:
1、在计算节点上 virsh dumpxml 虚机 uuid ,看 interface 部分,tapxxx 就是 ovs kernel,vhuxxz 就是 ovs dpdk
2、nova show 看 vm 详情,能看到 flavor extra specs,有 huge page 基本就是用了 ovs dpdk
评论