零知识学习之DPDK与RDMA(2)—— 认识DPDK(2)

接前一篇文章:零知识学习之DPDK与RDMA(1)—— 认识DPDK(1)

本文内容参考:

《Linux高性能网络详解 从DPDK、RDMA到XDP》 刘伟著 人民邮电出版社

https://blog.51cto.com/u_15301988/5181201

特此致谢!

一、认识DPDK

3. DPDK体系结构

DPDK为需要快速处理数据包的数据平面应用提供了一个简单、完整的框架。该框架通过创建环境抽象层(environment abstraction layer,EAL)为特定环境提供一组库。这里提到的特定环境,指的是CPU体系结构(比如32位或64位x86处理器)、GCC编译器或某些特定平台。这些环境通过使用meson文件和配置文件来指定。一旦创建了EAL(环境抽象层),用户就可以与该库链接以执行自己的应用程序。

DPDK也提供了EAL之外的其它库,比如哈希(hash)、最长前缀匹配(LPM)库等。此外,DPDK代码中的示例应用程序可以帮助用户了解如何使用DPDK提供的各种功能。

DPDK为处理数据包实现了一个“运行到完成”(run to completion)的模型在执行数据平面处理逻辑之前,必须先分配所有资源,然后以逻辑核上执行单元(线程)的形式运行。该模型不支持调度器,以轮询的方式访问所有设备处理数据包时不使用中断,主要原因是中断处理会产生较大的性能开销。

(1)核心组件

DPDK中的核心组件是一组库,这些库为应用程序提供了高性能处理数据包所需的所有元素。DPDK的核心组件(库)以及它们之间的依赖关系如下图所示。库的名称中rte前缀的意思是运行时环境(run time environment)。具体到代码编译后生成的库文件,还要在名称前加上lib,比如librte_mbuf。

1)环形缓冲器(librte_ring)

环形缓冲器(ring manager)使用环形队列,在有限大小的表中,提供了无锁的多生产者、多消费者的先进先出队列(FIFO)以及操作队列的API。与普通无锁队列相比,它有一些优势,比如易实现、适合批量操作、速度快等。

内存池管理器就使用了此模块提供的机制。

另外,环形队列还可用作逻辑核间或单个逻辑核上连接在一起的执行块之间的通用通信机制。

2)内存池管理器(librte_mempool)

内存池管理器(memory pool manager)负责分配内存中的对象池。池(pool)由名称标识,并使用环(ring)管理空闲(free)的对象。它还提供了一些可选服务,例如每个核的对象缓存和对齐协助(填充对象,使对象在所有DDR通道上均匀分布)。

3)网络数据包缓存管理(librte_mbuf)

此库提供了创建和销毁数据缓存的功能,这些数据缓存被DPDK应用程序用来保存网络数据包。数据缓存在DPDK启动时作为一个整体被创建,存储在mempool中。librte_mbuf库提供了API来分配/释放mbuf,mbuf适用于操作存储数据包的缓存的数据结构。

4)时间管理器(librte_timer)

该库为DPDK执行单元提供定时器服务和异步执行函数的功能。它可以提供周期性函数调用也可以提供一次性函数调用。它使用环境抽象层提供的定时器接口以获取精确的时间基准,并可以根据需要在每个核上启动。

5)环境抽象层(librte_eal)

环境抽象层负责访问底层资源,如硬件和内存空间。它提供了一组通用接口,可以对应用程序和其它库隐藏环境细节,使得应用程序不需要知道当前运行的环境上使用了什么样的CPU,编译时用的什么编译器等。

环境抽象层提供的服务包括:

  • DPDK的加载和启动;
  • 支持多进程和多线程执行;
  • 设置处理器核的亲和性(affinity)或任务分配(创建执行实例);
  • 系统内存的分配/释放;
  • 原子/锁操作;
  • 时间基准(time reference);
  • PCI总线访问;
  • 跟踪和调试功能;
  • CPU特征识别;
  • 中断处理(注册/撤销针对某个中断源的处理函数);
  • 警告(alarm)操作(设置/删除在特定时间运行的回调函数);
  • 内存分配(malloc)。

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

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

相关文章

FineReport填报列权限控制

近期换东家啦,又回归使用帆软啦,对于填报报表列权限的控制我这边顺带记录一下 首先讲解下场景:填报报表需要不同角色决定对不同列是否有填写或者查看权限 以填写权限为例,首先考虑用到的是 帆软自带的权限编辑,其次考虑…

SQL Server2014 公司速通版

1、SQL Server 了解 SQL Server 2014是Microsoft公司推出的一款关系型数据库管理系统,它在数据库领域具有广泛的影响力和应用。 1.1 SQL Server 2014 主要特性【简单了解就行】 SQL Server 2014 引入了一系列新特性和改进,这些特性和改进旨在提高性能、增…

Charles 证书迁移/复制,实现手机安装一次证书可以连接多个设备的 charles 效果

如果你希望在一个手机上安装一次证书,但是使用这个手机可能在不同的时候去连接你自己安装了Charles的不同设备。比如你在公司有有一个电脑,你在家里也有一个电脑,甚至还有一个笔记本等。 如果想实现只给手机安装一次证书,就可以都…

基于halcon的眼在手外(Eye-to-Hand)标定

前言 上个月写了一个《基于halcon的眼在手上(Eye-in-Hand)标定》的文章,通过官方的示例代码进行了简单的叙述,想学习的小伙伴可以点击链接进行学习。之前博主认为眼在手上(Eye-in-Hand)的案例更多&#xff…

Embedding是什么?为什么重要?

本文为 Simon Willison 在 PyBay 上发表的演讲视频的文字改进版 原文链接: https://simonwillison.net/2023/Oct/23/embeddings/ 演讲视频链接: https://youtu.be/ArnMdc-ICCM Embedding 是一个非常巧妙的技术,但常常和一堆令人生畏的术…

国内首现AIGC环幕巨屏作品《大闹天宫》人工智能已经不知不觉的出现在我们身边了!

前言 春节期间在佛山紫薇星空光影艺术馆,由元响空间影音打造的AIGC作品《大闹天宫》迎来了第一批线下体验者,揭开一场深度融合了AIGC创作和空间影音技术的视听盛宴。 没想到全网火爆的AIGC,竟然已经真真切切的出现在了我们身边。春节期间在…

YOLOv10训练自己的数据集(图像目标检测)

目录 1、下载代码 2、环境配置 3、准备数据集 4、yolov10训练 可能会出现报错: 1、下载代码 源码地址:https://github.com/THU-MIG/yolov10 2、环境配置 打开源代码,在Terminal中,使用conda 创建虚拟环境配置 命令如下&a…

【数据结构】--栈

👌个人主页: 起名字真南 🤣个人专栏:【数据结构初阶】 【C语言】 目录 1 栈1.1 栈的概念和结构1.2 栈的实现1.2.1 头文件1.2.2 初始化1.2.3 销毁1.2.4 打印所有元素1.2.5 入栈1.2.6 出栈1.2.7 获取栈顶数据1.2.8 判空1.2.9 获取元素个数 1 栈 1.1 栈的概…

apk右键一键签名方法

使用说明 1 修改reg文件最后一行,修改为自己的电脑路径 2 修改bat文件apksigner_path路径为自己的SDK路径,将签名文件命名为platform.keystore放在该文件夹内 3 运行reg文件添加注册表后,要签名的apk右键选择“cux”系统签名即可 一键cux系…

ABAP开发:动态Open SQL编程案例介绍

动态Open SQL是Open SQL的扩展。它不是要求整个SQL语句都是动态指定的。通过熟悉的静态ABAP编码表达静态已知的部分,动态元素的部分通过动态标记指定。动态片段不明确包含在ABAP源代码中,而是源代码包含一个ABAP变量,用括号括起来作为占位符。…

【网络架构】lvs集群

目录 一、集群与分布式 1.1 集群介绍 1.2 分布式系统 1.3 集群设计原则 二、LVS 2.1 lvs工作原理 2.2 lvs集群体系架构 ​编辑 2.3 lvs功能及组织架构 2.4 lvs集群类型中术语 三、LVS工作模式和命令 3.1 lvs集群的工作模式 3.1.1 lvs的nat模式 3.1.2 lvs的dr模式 …

python-docx 使用xml为docx不同的章节段落设置不同字体

本文目录 前言一、完整代码二、代码详细解析1、处理过程解释(1) 引入库并定义路径(2) 创建docx的备份文件(3) 定义命名空间(4) 打开并处理.docx文件(5) 分析和组织文档结构(6) 设置字体(7) 保存结果前言 本文主要解决的内容,就是为一个docx的不同章节段落设置不同的字体,因为…

2024年公司加密软件排行榜(企业加密软件推荐)

在信息时代,企业数据安全至关重要,防止数据泄露和未授权访问是首要任务之一。以下是2024年备受好评的企业加密软件排行榜: 固信加密软件https://www.gooxion.com/ 1.固信加密软件 固信加密软件是新一代企业级加密解决方案,采用先…

7月开始,考研数学0️⃣基础线代30天满分规划

线代零基础? 那千万不要去跟李永乐老师的线代课程,因为李永乐老师的线代课程比较进阶,适合有一定基础的同学去听,下面这两位才是零基础线代的神! 一个是喻老,另外一个是汤家凤! 这两个老师的…

stencil 组件

stencil 组件 装饰器生命周期应用加载事件 组件定义组件如何响应数据变化 组件使用如何传递 slot如何暴露组件内部的方法供外部使用?Element 装饰器 Host 组件样式函数组件 stencil 提供一些装饰器、生命周期钩子和渲染函数去编写一个组件。 装饰器 装饰器是一组用…

Web网页端IM产品RainbowChat-Web的v7.0版已发布

一、关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统,是RainbowChat的姊妹系统(RainbowChat是一套基于开源IM聊天框架 MobileIMSDK (Github地址) 的产品级移动端IM系统)。 ► 详细介绍:http://www.52im.net/thread-2…

【Sklearn驯化-回归指标】一文搞懂机器学习中回归算法评估指标:mae、rmse等

【Sklearn驯化-回归指标】一文搞懂机器学习中回归算法评估指标:mae、rmse等 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免…

大学计算机

项目一 了解计算机 1.1 了解计算机的诞生及发展阶段 1.2 认识计算机的特点、应用和分类 1.计算机的特点 1. 计算机的特点 2.计算机的应用 3.计算机的分类 4.数量单位 1.3 了解计算机操作系统的概念、功能与种类 1.操作系统概念 2.操作系统的作用 1&#xff0e…

Linux 中变量的取用与设定

优质博文:IT-BLOG-CN Linux是一个多人多任务的环境,每个人登录系统都能取得一个bash shell,每个人都能够使用bash下达mail这个指令来接收自己的邮箱等等。问题是,bash如何得知你的邮箱是那个文件?这就需要『变量』的帮…

jmeter性能测试

一.jmeter基本使用 1.元件执行顺序 配置元件; 前置处理器; 定时器; sampler; 后置处理器;(关联,正则表达式提取器) 断言; 监听;(不涉及顺序&…