DPDK概述

文章目录

  • 1. DPDK概述
    • 1.1 DPDK 内存管理
    • Mbuf单帧结构:
    • 1.2 DPDK内核驱动 igb_uio驱动
    • 1.3 DPDK源码下载方式
    • 1.4 pktgen源码下载方式
    • 1.5 DPDK相关名词解释


1. DPDK概述

Intel DPDK全称Intel Data Plane Development Kit,是Intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持,它不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。Linux内核将DPDK应用程序看作是一个普通的用户态进程,包括它的编译、连接和加载方式和普通程序没有什么两样。DPDK程序启动后只能有一个主线程,然后创建一些子线程并绑定到指定CPU核心上运行
在这里插入图片描述
DPDK 有三大法宝:
①ByPass Kernel : UIO/VFIO
②微架构优化: Cache/DDIO/SIMD
③内存管理: HugePage/mbuf/mempool

1.1 DPDK 内存管理

①hugetlbfs:
在这里插入图片描述
②Mbuf:为了高效访问数据,DPDK将内存封装在Mbuf(struct rte_mbuf)结构体内。
Mbuf主要用来封装网络帧缓存,也可用来封装通用控制信息缓存(缓存类型需使
用CTRL_MBUF_FLAG来指定)。
网络帧元数据的一部分内容由DPDK的网卡驱动写入。这些内容包括VLAN标签、RSS哈希值、网络帧入口端口号以及巨型帧所占的Mbuf个数等。
对于巨型帧,网络帧元数据仅出现在第一个帧的Mbuf结构中,其他的帧该信息为空。

Mbuf单帧结构:

在这里插入图片描述
Mbuf巨型帧结构(有多个segment):在这里插入图片描述
③Mempool:在DPDK中,数据包的内存操作对象被抽象化为Mbuf结构,而有限的rte_mbuf结构对象则存储在内存池Mempool中。内存池使用环形缓存区来保存空闲对象。
rte_mempool 内部管理是基于rte_ring(无锁队列,巧妙运用了CAS)实现的
当一个网络帧被网卡接收时,DPDK的网卡驱动将其存储在一个高效的环形缓存区中,同时在Mbuf的环形缓存区中创建一个Mbuf对象。
为了减少多核访问造成的冲突,引入了local_cache对象缓冲区。该local_cache非硬件上的cache,而是为了减少多核访问ring造成的临界区访问,coreX app会优先访问该local_cache上的对象。

在这里插入图片描述

在这里插入图片描述
④malloc: 通常,这些类型的分配不应该在数据面处理中进行,因为他们比基于池的分配慢,并且在分配和释放路径中使用了锁操作。 但是,他们可以在配置代码中使用。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
struct malloc_heap - 用于在每个插槽上跟踪可用内存空间:数据结构malloc_heap用于管理每个插槽上的可用内存空间。 在内部,每个NUMA节点有一个堆结构,这允许我们根据此线程运行的NUMA节点为线程分配内存。 虽然这并不能保证在NUMA节点上使用内存,但是它并不比内存总是在固定或随机节点上的方案更糟。
struct malloc_elem - 库内部分配和释放空间跟踪的基本要素:数据结构malloc_elem用作各种内存块的通用头结构。 它以三种不同的方式使用,如上图所示:
a).作为一个释放/申请内存的头部 – 正常使用
b).作为内存块内部填充头
c).作为内存结尾标记

1.2 DPDK内核驱动 igb_uio驱动

igb_uio驱动主要做的就是注册一个pci设备。但是igbuio_pci_driver对应的保存pci设备信息的id_table指针为空,这样在内核插入igb_uio驱动时,会找不到匹配的设备,就不会调用igb_uio驱动中的探测probe函数,只会在/sys目录下创建igb_uio相应的目录。

在这里插入图片描述
变量igbuio_intr_mode_preferred表示中断的模式,它由igb_uio驱动模块的参数intr_mode决定,有MSIX中断和Legacy中断两种模式,默认的是MSIX中断模式(我们修改成了默认是MSI模式
那么何时调用igb_uio驱动中的probe函数?在下面的测试说明中有提到,进行加密设备绑定(bind)时会进行probe。
进行设备bind时igb_uio驱动做了什么?
记录设备的资源:igb_uio驱动也会遍历PCI设备的BAR空间,但是它不会直接使用功能BAR空间的物理地址,而是调用ioremap函数将物理地址映射为虚拟地址,驱动在内核态读写操作映射出来的虚拟地址
注册一个uio设备:在Linux上的驱动设备一般都是运行在内核态的,提供接口函数给用户态函数调用即可。而新引入的UIO技术,则是将驱动的大部分事情移到了用户态。前面讲到probe函数会记录设备的资源,具体而言就是PCI设备BAR空间的物理地址、大小等信息记录下来传给用户态。除了记录BAR空间资源信息,uio框架还会在内核态实现中断处理相关的初始化工作。

内核uio驱动框架
①背景: 通常一些非标准设备的驱动被实现为字符驱动。这些驱动使用了很多内核内部函数和宏。而这些内部函数和宏是变化的。这样驱动的编写者必须编写一个完全的内核驱动,而且一直维护这些代码。而且这些驱动进不了主内核源码。于是就出现了用户空间I/O框架(Userspace I/O framework)

②原理:UIO(Userspace I/O)是运行在用户空间的I/O技术。Linux系统中一般的驱动设备都是运行在内核空间,而在用户空间用应用程序调用即可,而UIO则是将驱动的很少一部分运行在内核空间,而在用户空间实现驱动的绝大多数功能。
在这里插入图片描述

a).开发运行在内核的UIO模块,因为硬中断只能在内核处理
b).通过/dev/uioX读取中断
c).通过mmap和外设共享内存

在这里插入图片描述

1.3 DPDK源码下载方式

①DPDK官网: http://core.dpdk.org/download/
②DPDK git仓库(该仓库只能clone): git://dpdk.org/dpdk-stable
③某github主仓库(该仓库可以导入成私有仓库,便于git管理):https://github.com/chaudron/dpdk-stable

1.4 pktgen源码下载方式

DPDK pktgen官网: git://dpdk.org/apps/pktgen-dpdk

1)下载后,查看pktgen-dpdk的git tag,切换到与dpdk版本对应的tag

$ git tag

我测试用的dpdk版本是18.11, 经编译对比测试,dpdk18.11选用pktgen-3.7.2最为合适

$ git checkout pktgen-3.7.2

2)切换到tag pktgen-3.7.2后, 直接输入make即可

3)编译好后,生成的app/x86_64-native-linuxapp-gcc/pktgen就是我们要的发包工具

在这里插入图片描述
注:pktgen编译可能需要的前提步骤如下:

$ pip3 install --user meson
$ pip3 install --user ninja

Ubuntu16.04安装lua5.3

$ sudo apt install liblua5.3-dev
$ sudo apt remove liblua5.3-dev #若要删除的话

1.5 DPDK相关名词解释

DPDK: Data Plane Development Kit: 数据平面开发工具包
EAL: Environment Abstraction Layer: 环境抽象层/环境适配层
NIC: Network Interface Cards: 网卡
PMD: Poll Mode Driver: (基于用户态的)轮询模式驱动
UIO: Userspace I/O: 运行在用户空间的I/O技术
RTE: RunTime Environment: 运行环境?
SDK: Software Development Kit: 软件开发工具包
另外关于SEC snoop ICV含义:
ICV: Integrity Check Value: 完整性检查值, 用于内部进行hash计算,并比较计算结果是否与预期值相同(正确: job output ring status返回0, 错误:返回其它值:0x2000004a)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/773570.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI语音工具——Fish Speech:使用简单,可训练专属语音模型!

今天给大家介绍一款超好用的AI语音工具——Fish Speech,使用简单,还可以训练自己的语音模型! 工具介绍 Fish Speech是由 Fish Audio 开发的免费开源文本转语音模型。经过十五万小时的数据训练,Fish Speech能够熟练掌握中文、日语…

binutils ifunc 流程图

上图是x86 binutils 的流程图。 函数说明_bfd_x86_elf_link_hash_table_createInit local STT_GNU_IFUNC symbol hash.elf_x86_64_check_relocsAdd support for handling STT_GNU_IFUNC symbols_bfd_elf_x86_get_local_sym_hashFind and/or create a hash entry for local sym…

SSL/CA 证书及其相关证书文件解析

在当今数字化的时代,网络安全变得至关重要。SSL(Secure Socket Layer)证书和CA(Certificate Authority)证书作为保护网络通信安全的重要工具,发挥着关键作用。 一、SSL证书 SSL证书是数字证书的一种&…

前端八股文 说一下盒模型

网页中任何一个元素都可以视为一个盒子,由里到外,盒模型包括外边界(margin)、边框(border)、内边界(padding)和内容(content)。 盒模型基本分为3种&#xff1…

【遥感语义分割】UNetFormer

原文:UNetFormer: An UNet-like Transformer for Efficient Semantic Segmentation of Remotely Sensed Urban Scene Imagery Libo Wang1, 2, Rui Li1, Ce Zhang3, 4, Shenghui Fang1*, Chenxi Duan5, Xiaoliang Meng1, 2 and Peter M. Atkinson3, 6, 7 1) 中国…

【机器学习】分类算法-KNN算法实践

一、前言 前面的一篇文章介绍了KNN算法的基本思想,接下来我们就根据B站UP主【abilityjh】老师的节奏,做一个关于KNN算法运用于“约会网站配对”的算法实现。当然,这个实践的代码是一样的,但是理解的话,我是用自己的话来…

考到PMP证书后 如何获得PDU?

目前仅续证一次,也是在威班PMP考试后免费积攒的。其实获取PMP的渠道很多,网上也有很多售卖的,积攒起来也挺容易,不过在续证的时候千万不要找不明渠道来源的人去搞,不靠谱。续证期有三年的,三年时间积攒60PD…

第十二章 执行引擎

一、执行引擎概述 概述 执行引擎是 Java 虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引…

简单的git pull fail Can‘t update has no tracked branch解决记录

简单的git pull fail Can‘t update has no tracked branch解决记录 1. 问题描述 上午同事使用idea拉取代码的时候,发现拉取不了,提示用户权限问题,之后修改了git用户信息,发现还是拉取不了分支代码,然后删除了git r…

docker介绍与详细安装

1 docker 介绍 1.1 虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实…

Vue 详情实战涉及从项目初始化到功能实现、测试及部署的整个过程

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

全面解析找不到msvcp71.dll无法继续执行的原因及修复方法

在使用Windows操作系统时,可能会遇到“msvcp71.dll文件丢失”的问题,从而导致部分应用程序无法正常运行。msvcp71.dll属于Microsoft Visual C 2008 Redistributable package的一部分,其包含了运行基于该编译器开发的软件所需的运行时库函数。…

react v18 less使用(craco)

方案一、弹出配置(不推荐) 安装依赖:yarn add less less-loader 首先 执行 yarn eject 弹出配置项文件(注意:弹出配置不可逆!) 在 config 文件夹中 找到 webpack.config.js,在如图…

苹果手机耗电太快怎么办?6个有效解决方法大揭秘

现代智能手机功能越来越强大,但随之而来的电量消耗问题也让许多用户头疼不已。尤其是苹果手机,虽然以其流畅的用户体验和强大的功能著称,但电池续航问题仍然是很多用户的共同困扰。 那么,苹果手机耗电太快怎么办呢?别…

震惊!张宇25版高数18讲发布,656页惹争议!

这个张宇老师在微博已经解释过了! 我觉得张宇老师本意是好的,在考研数学教学创新这方面,他真的有自己的思考。 他为什么要这么做? 其实作为一个考研高数老师,他完全可以像其他老师一样,什么都不做&#x…

fyne的几种multiLine

fyne的几种multiLine 创建一个MultiLine有一个专门的函数: widget.NewMultiLineEntry()进入方法看看源码: // NewMultiLineEntry creates a new entry that allows multiple lines func NewMultiLineEntry() *Entry {e : &Entry{MultiLine: true, Wrapping: fyne.TextTr…

springboot大学生实习管理系统-计算机毕业设计源码97434

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 图2-4 添加信息流程图 2.2.5 修改信息流程 2.2.6 删除信息流…

Java的数据类型(复习版)

思维导图 一.字面常量 什么是常量?在我的理解看来常量就是在一个程序运行期间,保持不变的量就是常量。 例如: System.out.println(100);System.out.println(a);System.out.println(3.114);这些都可以称为常量。 字面常量的分类:…

论文速览 | CVPR 2022 | Autofocus for Event Cameras | 首个事件相机自动对焦算法:让事件相机在黑暗中也能清晰成像

论文速览 | CVPR 2022 | Autofocus for Event Cameras | 首个事件相机自动对焦算法:让事件相机在黑暗中也能清晰成像 项目主页: https://eleboss.github.io/eaf_webpage/ 1 引言 在计算机视觉和机器人领域,事件相机因其高动态范围和低延迟的特性而备受关注。然而,事件相机的…

浅析基于量子成像的下一代甚高灵敏度图像传感器技术

高灵敏度探测成像是空间遥感应用中的一个重要技术领域,如全天时对地观测、空间暗弱目标跟踪识别等应用,对于甚高灵敏度图像传感器的需求日益强烈。随着固态图像传感器技术水平的不断提高,尤其背照式及埋沟道等工艺的突破,使得固态…