DPDK 数据传输流程

news2024/11/23 11:26:40

在进行正式的收发包之前,DPDK需要做一些初始化操作,包括:

  1. 初始化一个或多个mbuf_pool,用来存储从网卡中接受的数据包
  2. 修改网卡配置,指定其接受队列的个数(通常每个转发核一个),长度(也就是能存储的接收描述符的最大个数),以及接受队列的选择方法(通常根据数据包头中的关键字进行哈希)等等。
  3. 接受队列中实际存储的是一个个的接收描述符,接下来为每个接受描述符初始化一个mbuf pool中的地址。

由于在初始化阶段,DPDK会为每lcore在每个设备,也就是port的实体上创建一个发送队列和接收队列,以此来尽最大可能避免冲突。

因此本质上DPDK的收包流程和发包流程都是一个单生产者单消费者的问题。

在DPDK的一次完整收发包中,数据包的整个接受流程如下:

  • 网卡收到数据包,根据预定义的算法选择一个接受队列。
  • 在接收队列中找到可用描述符(dd位为0)
  • 根据接收描述符的mbuf地址,通知对应DMA将数据包拷贝到mbuf中,同时将接受描述符的dd位置1,表明该描述符可以被读取。
  • 用户进程循环访问接收队列,当发现有描述符dd位=1时,表面有数据包可以处理,并从描述符中获取对应的mbuf地址。
  • 从mbuf pool中申请一块新的地址,并将描述符的地址指针指向新的地址,再将dd位置0,表示此描述符可以被网卡驱动重新写入。
  • 将原mbuf对应的地址返回给用户,用户便可以访问到数据包中的数据了。
    在这里插入图片描述
    发包流程与收包流程在很多地方都很类似,发送流程如下:
  1. 用户将想要发送的mbuf地址传给发送函数,同时指定想要从哪个设备发出,以及对应的tx_queue_id
  2. 发送函数根据port_id和queue_id在对应的发送队列中寻找空闲(dd位为0)的发送描述符。
  3. 如果空闲描述符上已经绑定了mbuf,需要将对应的mbuf释放回对应的mbuf pool
  4. 为发送描述符绑定待发送的mbuf地址,并将描述符的dd位置1,发送函数返回
  5. 网卡驱动异步遍历发送队列,从中选取dd=1的描述符。驱动DMA从描述符绑定的mbuf中将数据拷贝至自身缓存,并执行发包操作。发包完成后dd位置0。
    发包流程与收包流程类似,在此就不专门再画流程图了。需要注意的一点是,用户调用的发包函数只是负责将待发送的mbuf地址与空闲的发送描述相绑定,并不会真正等待发送结束再返回。

而网卡在发送完成之后是没有办法主动释放内存中的mbuf的。
因此引入了步骤3,在绑定之前查看空闲描述符是否还绑定着mbuf地址,如果有说明此mbuf已经被成功发送过了,可以释放回内存池。

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

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

相关文章

【Hadoop 2.7.1】HDFS Shell操作的简单试验

【Hadoop 2.7.1】HDFS Shell操作的简单试验 HDFS提供了多种数据访问的方式,其中,命令行的形式是最简单的,同时也是开发者最容易掌握的方式 文章目录【Hadoop 2.7.1】HDFS Shell操作的简单试验HDFS Shell命令的使用上传文件(put)查看文件列表(…

全网最详细Centos7搭建Redis集群

1、准备三台服务器 没有服务器的话,虚拟机也一样 2、每台服务器安装上redis 相关网址: CentOS7安装Redis完整教程_长头发的程序猿的博客-CSDN博客_centos7 redis安装 3、修改“139.196.105.140(主机)”的配置文件 vim /etc/r…

路由策略简介、配置举例

路由策略简介、配置举例 定义 路由策略主要实现了路由过滤和路由属性等设置功能,他通过改变路由属性(包括可达性)来改变网络流量所经过的路径。 目的优势 目的 路由协议在发布、接收和引入路由信息时,根据实际组网需求实施一些策…

25个网络安全搜索引擎备忘录

©网络研究院 下面介绍一个包含 25 个网络安全搜索引擎的列表,每个网络爱好者都应该在互联网中了解这些搜索引擎。 此列表没有特定顺序,主要基于使用偏好。 1. 搜索连接到互联网的设备 https://www.shodan.io/ 2. 无线网络数据库,带…

矩阵篇(五)-- 特征值分解(EVD)和奇异值分解(SVD)

1 特征值分解(EVD) 设AnnA_{n \times n}Ann​有nnn个线性无关的特征向量x1,…,xn\boldsymbol{x}_{1}, \ldots, \boldsymbol{x}_{n}x1​,…,xn​,对应特征值分别为λ1,…,λn\lambda_{1}, \ldots, \lambda_{n}λ1​,…,λn​ A[x1⋯xn][λ1x1⋯…

基于jsp+ssm的家庭理财系统

项目介绍 在这科技不断的进步,让我们的生活改变了很多,信息技术的迅速发展,使各种行业在信息技术应用方面变得非常普遍。信息时代的到来,已成为一种必然趋势。本系统的标题是基于B/S模式的家庭理财系统的设计开发,其目…

公钥密码(非对称加密)

实例 投币寄物柜是这样使用的: 首先,将物品放人寄物柜中。然后,投入硬币并拔出钥匙,就可以将寄物柜关闭了。关闭后的寄物柜,没有钥匙是无法打开的。只要有硬币,任何人都可以关闭寄物柜,但寄物…

Locust学习记录2-locust用户类属性【HttpUser,wait_time,weight和fixed_count】

HttpUser 每个模拟用户定义的类,都必须继承HttpUser,目的时为每个用户提供一个client属性,该属性是一个实例HttpSession,可用于向我们要进行负载测试的目标系统发出HTTP请求 当测试开始时,locust将为它模拟的每个用户…

vue项目分环境打包的具体步骤 --- 区分测试环境与线上环境的打包引用路径

第一步: 安装cross-env npm install --save-dev cross-env 运行跨平台设置和使用环境变量的脚本 第二步:修改package.json 在package.json 里设置打包命令 --- 主要是基于使用vue-cli创建的项目,配置文件基于 NODE_ENVproduction 去处…

图文多模态模型CLIP

前言 CLIP带给我的震撼是超过transformer的,这是OpenAI的重要贡献之一。就如官网所描述的: CLIP: Connecting Text and Images 用对比学习(Contrastive Learning)来对齐约束图像模型和文本模型。用文本嵌入指导图像学习&#xff…

C++11特性-其他特性

1.字符串的原始字面量 表达式:R"xxx(原始字符串)xxx"或者R"(原始字符串)",xxx要写的话,必须一样 //两种申明形式string a "aaa";//没有转义的时候就是原始字面量string b R"aaa(…

Ansible最佳实践之 AWX 作业创建和启动

写在前面 分享一些 AWX 作业创建和启动的笔记博文内容涉及: 创建作业模板涉及相关参数,作业模板角色配置介绍运行作业模板并测试的Demo 食用方式: 需要了解 Ansible理解不足小伙伴帮忙指正 傍晚时分,你坐在屋檐下,看着…

Js逆向教程20-Hook基础

Js逆向教程19-Hook基础 一、jshook Hook就是在这些流程任意环节插入自己的代码,让浏览器先执行自己的代码 然后再执行原本网站的 hook在以下流程中可以做的事情: 1.1 html流程 联机服务器:获取ip地址,ws获取参数拿回资源&…

IntelliJ IDEA 2022.3正式发布,配置云同步支持Redis好用到炸

本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“…

【iOS】AFNetworking

AFNetworking是MAC/iOS为了简化网络操作设计的一套网络框架,专注与网络数据传输 ,以及网络中多线程的处理,只需要简单几步就可以完成网络请求任务。 小说明 ANF的特性: 登录传参数时 , 传递 字典 即可 .( 键名为参数名 , 键值为…

【网络层】IP组播(多播)、硬件组播、IGMP、组播路由选择协议、移动IP、路由器详解、路由表和路由转发

注:最后有面试挑战,看看自己掌握了吗 文章目录IP多播----只给有相同需求的路由器传信息以看视频为例-----组播路由器支持--------运行组播协议的路由器IP组播地址------多播组的设备都有一个组播组IP地址---------一群共同需求主机的相同标识-------看直…

数据安全事故频发以及防范措施

误删除事故 最近在和IT群友的聊天中得知,一个小伙因为看错了一个语句,直接将生产数据库中所有数据全部删除了,并且该库在设计的时候虽然做了备份,但在运行过程中因某些原因把备份关闭了。 传统数据运维模式 受到科技制裁的原…

opencv c++ 霍夫直线检测

目的:在进行图像边缘提取后,将数据从平面坐标转换到极坐标空间,即完成了直线的信息提取。 1、原理 平面坐标系:通过之间的斜率k和截距b来确定一条直线。y kxb 极坐标系:通过半径r、角度θ来确定一条直线。r xcosθ …

计算机毕业设计基于Springboot+vue口腔牙科诊所管理系统

项目介绍 口腔卫生是关系民生的一个重要问题。口腔健康会直接影响全身的健康,口腔基本常见的有龋齿,牙周炎等问题,而且人类的牙齿只有2次更换周期,一旦牙齿彻底完成更换终生将不再更换,所以越来越多的人开始关系口腔问…

C++中的多态和虚函数及多态原理

定义 多态:事物的一种形态,在不同的子类中表现为多种形态,就称为多态; 分类 多态分为静态和动态多态 静态多态包括运算符重载和函数重载,复用函数名; 动态多态包括虚函数派生类; 区别&…