DPDK简介和原理

本文分享自天翼云开发者社区《DPDK简介和原理》,作者:s****n

DPDK是一种绕过内核直接在用户态收发包来解决内核性能的瓶颈技术。 什么是中断 了解DPDK之前,首先需要先了解什么是中断,其实中断就是电信号,中断分两种:硬中断和软中断。

什么是硬中断?硬中断是由与系统相连的外设(比如网卡、硬盘)自动产生的,主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。

什么是软中断?软中断为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。

硬中断和软中断有两个明显的区别: 其一软中断是执行中断指令产生的,而硬中断是由外设引发的; 其二硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。

了解DPDK网络处理流程 了解完中断的原理,我们来对比下传统网络处理流程和有DPDK加持下的处理流程有何不同。 传统网络处理流程:

image

dpdk处理流程:

image

可以明显看出区别,dpdk可以感知中断,应用层通过内存映射实现和网卡的通讯,减少了IO处理流程。

DPDK的UIO机制

image

为了让驱动运行在用户态,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

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

IO多路复用

用户空间和内核空间Userspace(用户空间):用户程序的运行空间Kernelspace(内核空间):Linux内核的运行空间当进程运行在内核空间时就处于内核态,当进程运行在用户空间时就处于用户态。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。Kernelspace可以执行任意

IPTABLES简介

iptables防火墙工作原理简介:iptables防火墙工作在网络层,针对TCP/IP数据包实施过滤和限制,iptables防火墙基于内核编码实现,具有非常稳定的性能和高效率;   iptables属于“用户态”的防火墙管理体系。!(https://oscimg.oschina.net/oscnet/691dc3c1cdd75580e336

Linux系统调用原理

一、什么是系统调用系统调用 跟用户自定义函数一样也是一个函数,不同的是 系统调用 运行在内核态,而用户自定义函数运行在用户态。由于某些指令(如设置时钟、关闭/打开中断和I/O操作等)只能运行在内核态,所以操作系统必须提供一种能够进入内核态的方式,系统调用 就是这样的一种机制。系统调用 是Linux内核提供的一段

DPDK

背景最近在做将基于dpdk16.11.1开发的程序,转移到基于dpdk18.11版本下开发。遇到了网卡RSS配置的问题,在这里纪录一下。问题dpdk16.11.1在dpdk16.11.1上的程序如下:staticuint8_trss_intel_key40{0x6D,