【KPDK】概述

DPDK的主要目标是为数据平面应用程序中的快速数据包处理提供一个简单、完整的框架。用户可以使用代码来理解所采用的一些技术,构建原型或添加自己的协议栈。可提供使用DPDK的替代生态系统选项。
DPDK框架通过创建环境抽象层(EAL)为特定环境创建一组库,EAL可能特定于英特尔体系结构(32位或64位)模式、Linux*用户空间编译器或特定平台。这些环境是通过使用介子文件和配置文件创建的。一旦创建了EAL库,用户就可以链接到该库来创建自己的应用程序。还提供了EAL之外的其他库,包括哈希、最长前缀匹配(LPM)和环库。提供的示例应用程序有助于向用户展示如何使用DPDK的各种功能。
DPDK为数据包处理实现了一个从运行到完成的模型,其中所有资源必须在调用数据平面应用程序之前分配,这些应用程序作为逻辑处理核心上的执行单元运行。该模型不支持调度程序,所有设备都通过轮询访问。不使用中断的主要原因是中断处理带来的性能开销。
除了运行到完成模型之外,还可以通过经由环在核心之间传递分组或消息来使用流水线模型。这允许分阶段执行工作,并且可以允许更有效地使用内核上的代码。

1.开发环境

DPDK项目安装需要Linux和相关的工具链,如一个或多个编译器、汇编程序、meson实用程序、编辑器和各种库来创建DPDK组件和库。
一旦为特定环境和体系结构创建了这些库,它们就可以用于创建用户的数据平面应用程序。
在为Linux用户空间创建应用程序时,将使用glibc库。
有关设置开发环境的信息,请参阅DPDK入门指南。

2.环境抽象层

环境抽象层(EAL)提供了一个通用接口,它对应用程序和库隐藏环境细节。EAL提供的服务包括:
DPDK装载和发射
支持多进程和多线程执行类型
核心亲和力/分配程序
系统内存分配/取消分配
原子/锁定操作
时间参考
PCI总线访问
跟踪和调试功能
CPU特征识别
中断处理
报警操作
内存管理(malloc)
EAL在环境抽象层中有充分的描述。

3.核心组件

核心组件是一组库,提供高性能数据包处理应用程序所需的所有元素。
核心组件体系结构

3.1环形管理器(librte_Ring)

环形结构在有限大小的表中提供了一个无锁的多生产者、多消费者FIFO API。与无锁定队列相比,它具有一些优势;更易于实现,适用于批量操作且速度更快。环由内存池管理器(librte_mempool)使用,并且可以用作逻辑核上连接在一起的核和/或执行块之间的通用通信机制。
这个环形缓冲区及其用法在环形库中有详细描述。

3.2内存池管理器(librte_mempool)

内存池管理器负责分配内存中的对象池。池由名称标识,并使用环来存储空闲对象。它提供了一些其他可选服务,如每个核心对象缓存和对齐帮助程序,以确保对象被填充,从而在所有RAM通道上均匀分布。
这个内存池分配器在Mempool Library中有描述。

3.3网络数据包缓冲区管理(librte_mbuf)

mbuf库提供了创建和销毁缓冲区的功能,DPDK应用程序可以使用这些缓冲区来存储消息缓冲区。消息缓冲区在启动时创建,并使用DPDK内存池库存储在内存池中。
这个库提供了一个API来分配/释放mbufs,操作用于承载网络数据包的数据包缓冲区。
网络数据包缓冲区管理在Mbuf库中进行了描述。

3.4计时器管理器(librte_Timer)

此库为DPDK执行单元提供计时器服务,提供异步执行函数的能力。它可以是周期性的函数调用,也可以只是一次调用。它使用环境抽象层(EAL)提供的定时器接口来获得精确的时间参考,并且可以根据需要在每个核心的基础上启动。
Timer library中提供了库文档。

3.5以太网轮询模式驱动程序体系结构

DPDK包括用于1GbE、10GbE和40GbE的轮询模式驱动程序(PMD),以及半虚拟化的virtio以太网控制器,这些控制器设计为在没有异步、基于中断的信令机制的情况下工作。
请参阅轮询模式驱动程序。

3.6支持数据包转发算法

DPDK包括散列(librte_Hash)和最长前缀匹配(LPM,librte_LPM)库,以支持相应的数据包转发算法。
有关详细信息,请参阅哈希库和LPM库。

3.7librte_net

librte_net库是IP协议定义和方便宏的集合。它基于FreeBSD*IP堆栈中的代码,包含协议号(用于IP标头)、与IP相关的宏、IPv4/IPv6标头结构以及TCP、UDP和SCTP标头结构。

4.源码组织

4.1库

库位于dpdk/lib的子目录中。按照惯例,库是指为应用程序提供API的任何代码。通常,它会生成一个归档文件(.a),但内核模块也会位于同一目录中。

4.2驱动程序

驱动程序是为设备(硬件设备或伪/虚拟设备)提供轮询模式驱动程序实现的特殊库。它们包含在drivers子目录中,按类型进行分类,并各自编译为librte_X_Y.a格式的库,其中X是设备类名,Y是驱动程序名。
注意
几个driver/net目录包含一个子目录。基本目录通常包含不应由用户直接修改的代码。任何增强都应该通过该目录中的X_osdep.c和/或X_osdep.h文件来完成。请参阅基本目录中的本地自述文件

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Rocky Linux中安装nmon

一、环境基础 [rootlocalhost nmon16d]# cat /etc/redhat-release Rocky Linux release 9.2 (Blue Onyx) [rootlocalhost nmon16d]# uname -r 5.14.0-284.11.1.el9_2.x86_64 [rootlocalhost nmon16d]# 二、安装步骤 在Rocky Linux和AlmaLinux等基于RHEL 的发行版上&#xff…

剪切空间与归一化设备坐标【NDC】

有了投影变换的知识,我们现在可以讨论剪切空间(Clip Space)和 归一化设备坐标(NDC:Normalized Device Coordinates)。 为了理解这些主题,我们还需要深入了解齐次坐标的有趣世界。 NSDT工具推荐&…

【PTA-C语言】实验三-循环结构I

如果代码存在问题,麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 实验三-循环结构I 7-1 求交错序列前N项和 (分数 15)7-2 寻找250(分数 15)7-3 最大公约数和最小公倍数(分数 15)7-4 统计字符&#xff0…

二十五、DSL查询文档(全文检索查询、精确查询、地理查询、复合查询)

目录 一、全文检索查询 1、match查询 语法: 2、multi_match查询 语法: 3、match和mult_match的区别 二、精确查询 1、term查询: 语法: 2、range查询:(范围查询) 语法: 三、地理查询 1、geo_bou…

Springboot如何快速生成分页展示以及统计条数

这是表结构: 前置知识: 分页查询公式(): -- 推导一个公式 -- select * from emp -- order by empno -- limit 每页显示记录数 * (第几页-1),每页显示记录数 统计条数公式: select count…

【动态规划】LeetCode-931.下降路径最小和

🎈算法那些事专栏说明:这是一个记录刷题日常的专栏,每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目,在这立下Flag🚩 🏠个人主页:Jammingpro 📕专栏链接&…

Wordpress自动定时发布怎么开通-Wordpress怎么自动发布原创文章

在当今数字化时代,博客已经成为许多人分享观点、经验和知识的重要平台。然而,对于博主们来说,每天按时发布一篇又一篇的文章可能是一项具有挑战性的任务。为了解决这个问题,一些创新的工具应运而生,其中包括WordPress的…

Collection的其他相关知识

前置知识:可变参数 就是一种特殊参数,定义在方法 构造器的形参列表里,格式是:数据类型...参数名称; 可变参数的特点和好处 特点:可以不传数据给它;可以传一个或者同时传多个数据给它&#xff…

爬虫学习(三)用beautiful 解析html

安装库 import requests from bs4 import BeautifulSoup headers {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"} for start_num in range(0,250…

【工作生活】汽车ECU开发内容简介

目录 1. 目标 2. 要分享什么 3.1 行业知识 3.1.1车载行业知识: 3.1.2项目: 3.1.3开发测试工具: 3.2 硬件平台 3.3 基础知识 3.4 工作生活 3. 我们是谁 1. 目标 随着新能源汽车的快速崛起,汽车电子行业开始快速发展&…

设计模式-结构型模式之外观设计模式

文章目录 七、外观模式 七、外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类…

【华为OD题库-043】二维伞的雨滴效应-java

题目 普通的伞在二维平面世界中,左右两侧均有一条边,而两侧伞边最下面各有一个伞坠子,雨滴落到伞面,逐步流到伞坠处,会将伞坠的信息携带并落到地面,随着日积月累,地面会呈现伞坠的信息。 1、为了…

关于微信小程序中如何实现数据可视化-echarts动态渲染

移动端设备中,难免会涉及到数据的可视化展示、数据统计等等,本篇主要讲解原生微信小程序中嵌入echarts并进行动态渲染,实现数据可视化功能。 基础使用 首先在GitHub上下载echarts包 地址:https://github.com/ecomfe/echarts-for…

【JavaEE初阶】Thread 类及常见方法、线程的状态

目录 1、Thread 类及常见方法 1.1 Thread 的常见构造方法 1.2 Thread 的几个常见属性 1.3 启动⼀个线程 - start() 1.4 中断⼀个线程 1.5 等待⼀个线程 - join() 1.6 获取当前线程引用 1.7 休眠当前线程 2、线程的状态 2.1 观察线程的所有状态 2.2 线程状态和状…

大数据Hadoop-HDFS_架构、读写流程

大数据Hadoop-HDFS 基本系统架构 HDFS架构包含三个部分:NameNode,DataNode,Client。 NameNode:NameNode用于存储、生成文件系统的元数据。运行一个实例。 DataNode:DataNode用于存储实际的数据,将自己管理…

Buzz库python代码示例

Buzz库来编写一个下载器程序。 php <?php require_once vendor/autoload.php; // 引入Buzz库 use Buzz\Browser; use Buzz\Message\Response; $browser new Browser(); // 设置 $browser->setHttpClient(new HttpClientProxy([ host > , port > , ])…

单片机学习1——点亮一个LED灯

Keil软件编写程序&#xff1a; 特殊功能寄存器声明&#xff1a; #include<reg52.h>sbit LED P1^0;void main() {LED 0;while(1); } 代码说明&#xff1a; sbit 语句是特殊功能位声明。 生成HEX文件&#xff0c;这个文件是下载到单片机里的文件。Options for Target…

大数据Doris(三十二):Doris高级功能

文章目录 Doris高级功能 一、​​​​​​​表结构变更

hql面试题之字符串使用split分割,并选择其中的一部分字段的问题

版本&#xff1a;20231109 1.题目&#xff1a; 有两张表,a表有id和abstringr两个字段&#xff0c;b表也有id和bstr两个字段&#xff0c;具体如下 A表&#xff1a; 1abc,bcd,cdf2123,456,789 B表: 1acddef2123456 在a表的abstring字段中用‘,’分割&#xff0c;并取出前两…

数据结构实验任务六 :基于 Dijsktra 算法的最短路径求解

本次代码为实验六:基于 Dijsktra 算法的最短路径求解实现。本实验的重点在于对于Dijsktra算法的理解。有关Dijsktra的资料可以参考有关博文&#xff1a; 图论&#xff1a;Dijkstra算法——最详细的分析&#xff0c;图文并茂&#xff0c;一次看懂&#xff01;-CSDN博客 以下附上…