【KPDK】概述

news2025/1/24 22:51:55

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.coloradmin.cn/o/1279264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode Hot100 169.多数元素

题目: 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 方法一:哈希表 ​ class Solution {public int…

记录一次vscode markdown的图片路径相关插件学习配置过程

插件及说明查找过程 csdn搜索markdown图片路径,找到关于这一款插件的回答。打开vscode拓展搜索Paste Image这款插件,看到下载量挺高的,应该不赖。 点击仓库,进入该插件开源的github仓库,查看README文件阅读说明. 淡然在Vscode 插件项目下的细…

C语言之结构体

一.前言引入. 我们知道在C语言中有内置类型,如:整型,浮点型等。但是只有这些内置类 型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要名字、年龄、学号、⾝⾼、体…

vue $nextTick 样式私有化

$nextTick 先updated中更新,再nextTick 状态更改做什么事情: updated $nextTick 同步执行完之后,把当前放到队列中 $forceUpdate->sub.update() // 把更新操作放在队列里面 队列机制 基于发布订阅模式,callbacks队列 更新完毕…

Java类的初始化顺序

类初始化顺序遵循以下三个原则(优先级依次递减) 1、静态对象(变量)优先于非静态对象(变量)初始化,其中静态对象(变量)只初始化一次,而非静态对象&…

揭秘原型链:探索 JavaScript 面向对象编程的核心(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

[UnityWebGL]修改webgl启动模板

首先了解什么是WEBGGL启动模板,如下图: 其次,启动模板在哪里设置,如下图: 最后,怎么改启动模板里面的内容(提供最简单的方式,直接改官方的): 1、首先在Asset…

Spring Cloud Gateway与spring-cloud-circuitbreaker集成与理解

官方文档 spring-cloud-gateway文档地址: https://spring.io/projects/spring-cloud-gateway#overview spring-cloud-circuitbreaker文档地址: https://spring.io/projects/spring-cloud-circuitbreaker 两者关系 首先spring-cloud-gateway集成了断路…

[c++]——string类____详细初步了解string类的运用

在成为大人的路上喘口气. 目录 🎓标准库类型string 🎓定义和初始化string对象 💻string类对象的常见构造 💻string类对象的不常见构造 💻读写string对象 🎓 string类对象的修改操作 &#x1f4…

Opencv制作电子签名(涉及知识点:像素过滤,图片通用resize函数,像素大于某个阈值则赋值为其它的像素值)

import cv2def resize_by_ratio(image, widthNone, heightNone, intercv2.INTER_AREA):img_new_size None(h, w) image.shape[:2] # 获得高度和宽度if width is None and height is None: # 如果输入的宽度和高度都为空return image # 直接返回原图if width is None:h_ratio …

git-6

1.如何用project管理issue? 用project看板管理issue 有五种类型:None、Basic kanban、Automated kanban、Automated kanban with reviews、Bug triage 首先选用Bug triage 利用看板就会很直观,很便捷,Issues也支持,有…

OpenTelemetry系列 - 第4篇 OpenTelemetry K8S生态

目录 一、【Helm】添加OTel Helm repo二、【Helm Chart】OTel Collector2.1 daemonset2.2 deloyment 三、【K8S Operator】OTel Operator3.1 安装OTel Operator3.2 部署OpenTelemetryCollector3.2.1 Deloyment Mode3.2.2 DeamonSet Mode3.2.3 StatefulSetMode3.2.4 Sidecar Mod…

思维模型 莫扎特效应

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。音乐激发无限潜能。 1 莫扎特效应的应用 1.1 莫扎特效应在教育领域的应用-Baby Einstein”公司 在美国,有一家名为“Baby Einstein”的公司,该公司生产和销售专门为…

SQL自学通之简介

目录 一、SQL 简史 二、数据库简史 1、Dr. Codds 对关系型数据库系统的十二条规则 2、设计数据库的结构 3、数据库的前景 4、对于什么是客户机/服务器型电脑系统 BernardH.Boar的定义如下: 5、交互式语言 6、易于实现 7、SQL 总览 三、流行的 SQL 开发工具…

前端小记--2.element-ui中级联选择器cascader如何默认展开下拉框

最近做项目时,遇到一个需求:在一个排班表中,展示人员的值班情况,点击单元格,弹出下拉框,修改人员排班信息。 由于下拉框选择内容是树状结构,这里使用了element-ui中级联组件cascader&#xff0c…

一起学docker系列之十七Docker Compose 与手动操作的比较与优势分析

目录 1 前言2 不使用 Docker Compose2.1 启动 MySQL 容器2.2 启动 Redis 容器2.3 启动微服务容器 3 使用 Docker Compose4 使用 Docker Compose 的优势5 结语参考地址 1 前言 在当今容器化应用的开发与部署中,容器编排工具的选择对于简化流程、提高效率至关重要。本…

6-69.鸭子也是鸟

按要求完成下面的程序: 1、定义一个Bird类,包含一个void类型的无参的speak方法,输出“Jiu-Jiu-Jiu”。 2、定义一个Duck类,公有继承自Bird类,其成员包括: (1)私有string类型的成员na…

WPF实现文字纵向排布的TabItem

文章目录 基本用法文字竖排显示 WPF布局 基本用法 WPF中的TabControl是一个容器控件,用于在单个窗体或页面中承载多个选项卡。每个选项卡可以包含不同的控件,用于显示不同的内容,其最简单的调用方法如下,只需在TabControl中无脑…

德迅云安全的日常网站安全性措施、以及更多网站安全工具的推荐与使用。

要确保网站的安全性,可以采取以下措施: 更新和维护:定期更新网站的操作系统、应用程序和插件,确保使用的是最新版本,以修复已知的安全漏洞。 强密码策略:使用强密码,包含字母、数字和特殊字符的…

合成相机模型【图形学】

相机在计算机图形学中有两个方面的考虑:相机的位置和相机的形状。 要了解后者,我们需要了解相机的工作原理。 NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - R…