dpdk协议栈之udp架构优化

dpdk优势

传统网络架构与 DPDK(Data Plane Development Kit)网络架构之间存在许多区别,而 DPDK 的优势主要体现在以下几个方面:

数据包处理性能:传统网络架构中,网络数据包的处理通常由操作系统的网络协议栈负责,涉及多次内核态和用户态的切换,以及复杂的协议处理。这种方式对于高速数据包处理来说会产生较大的性能开销。而 DPDK 提供了一个用户空间的数据平面库,绕过了操作系统的网络协议栈,直接操作硬件和内存,实现了零拷贝和零中断的高效数据包处理,从而显著提升了数据包处理性能。

硬件抽象:传统网络架构中,网络设备的驱动程序是与特定硬件和操作系统紧密耦合的,不同的硬件需要编写不同的驱动程序。而 DPDK 提供了通用的抽象层,使得网络设备驱动可以更容易地在不同的硬件和操作系统上移植和使用,降低了硬件的依赖性。

高性能队列:传统网络架构中,操作系统提供的网络队列通常具有较高的延迟和较低的吞吐量,限制了数据包处理的性能。而 DPDK 采用基于Linux 内核的无锁环形缓冲 kfifo优化的无锁环形队列,针对单个或多个数据包生产者、单个数据包消费者的出入队列提供无锁机制,有效减少系统开销。

多核支持:传统网络架构中,由于操作系统的网络协议栈通常在单个核心上运行,无法充分利用多核处理器的性能。而 DPDK 支持多核并行处理,能够将数据包处理任务分配到多个核心上并行执行,从而充分利用多核处理器的性能优势。

采用HugePage:减少TLB Miss,降低访存开销;

采用精巧的内存池技术:创建Mbuf直接映射到实际报文,内核空间和用户空间的内存交互
不进行拷贝,只做控制权转移,避免拷贝开销;

利用CPU 亲和性:将线程绑定到指定CPU上,一方面减少了CPU线程间切换的开销,另一方
面避免了 CPU 缓存的局部失效性,增加了 CPU 缓存的命中率;

总体而言,DPDK 的优势在于其高性能、低延迟、硬件抽象和多核支持等特点,使得它成为高性能网络应用的理想选择。它被广泛应用于网络功能虚拟化、数据中心网络、云计算等场景,能够实现高速数据包的处理和转发,满足现代网络对性能和效率的要求

架构优化

主要采用三线程以及两组环形队列进行异步处理提升性能,此外,也很好的体现分层思想,具体架构如下:
在这里插入图片描述
因为暂时的功能不多,先实现上图中的框架,之后有新功能再不断完善。
这次代码太多先上伪代码


int pkt_process{
	while (1) {
		udp_process(); //处理UDP包
		rte_ring_mp_enqueue(); //将ring->in中的数据内容 送到新的环形队列host->rcvbuf中
		pthread_cond_signal(&host->cond);//条件变量 通知udp server 有数据需要处理
		udp_out();//从host->sndbuf中取出数据来封装响应的udp包,并将包放入环形队列ring->out中
	}
}

int udp_server_entry(){
	nsocket();
	nbind();
	while (1) {
		nrecvfrom();//从host->rcvbuf取数据
		nsendto();//将要发送的数据写入host->sndbuf中
	}
}

int main{
	//创建环形队列,准备收包
	ring->in = rte_ring_create("in ring",RING_SIZE,rte_socket_id(),RING_F_SP_ENQ | RING_F_SC_DEQ);
	ring->out = rte_ring_create("out ring",RING_SIZE,rte_socket_id(),RING_F_SP_ENQ | RING_F_SC_DEQ);
	
	//启动用户态协议栈中处理数据包的线程
	rte_eal_remote_launch(pkt_process,mbuf_pool,lcore_id);
	
	//启动udp server 线程
	rte_eal_remote_launch(udp_server_entry,mbuf_pool,lcore_id);
	
	while(1){
		//将收到的包直接送入环形队列ring->in中
		rte_eth_rx_burst();
		rte_ring_sp_enqueue_burst();
		
		//从环形队列ring->out中取出数据包发送
		rte_ring_sc_dequeue_burst();
		rte_eth_tx_burst();
	}
}

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

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

相关文章

测试环境搭建整套大数据系统(七:集群搭建kafka(2.13)+flink(1.14)+dinky+hudi)

一:搭建kafka。 1. 三台机器执行以下命令。 cd /opt wget wget https://dlcdn.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz tar zxvf kafka_2.13-3.6.1.tgz cd kafka_2.13-3.6.1/config vim server.properties修改以下俩内容 1.三台机器分别给予各自的broker_id…

网络安全与IP安全网络安全

网络安全与IP安全网络安全 网络安全 是指网络系统的硬件,软件以及系统中的数据收到的保护。 保护的基本属性为:机密性,身份认证,完整性和可用性; 基本特征:相对性,时效性,相关性…

vue3 + vite + ts 中使用less文件全局变量

文章目录 安装依赖新建css变量文件全局引入css变量文件使用css变量 一、安装依赖 npm install less less-loader --save-dev 二、新建CSS变量文件 (1) :在根目录下的src文件中 src-> asset -> css ->glibal.less // glibal.less :root{--public_background_font_Col…

Leetcoder Day23| 回溯part03:组合+分割

语言:Java/Go 39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的所有不同组合 ,并以列表形式返回。你可以按任意顺序返回这些组合。 candidates 中的同一个…

LDR6020双盲插音频随便插充电听歌随便插

随着智能手机的普及和功能的日益丰富,手机已经成为我们日常生活中不可或缺的一部分。音乐、电影、游戏等娱乐内容更是丰富了手机的使用体验。而在这其中,音频转接器的作用愈发凸显,特别是在边听边充的场景下,一款高效且便捷的手机…

【底层解读】ArrayList源码学习

成员变量 学习源码前,我们还是先看一下ArrayList中成员变量有哪些 构造函数 ArrayList一共有三个构造函数。 第一个:带有指定初始容量的构造函数 第二个:空参构造 第三个:包含指定集合的构造函数 OK,看完构造函数&a…

Gemma谷歌(google)开源大模型微调实战(fintune gemma-2b)

Gemma-SFT Gemma-SFT(谷歌, Google), gemma-2b/gemma-7b微调(transformers)/LORA(peft)/推理 项目地址 https://github.com/yongzhuo/gemma-sft全部weights要用fp32/tf32, 使用fp16微调十几或几十的步数后大概率lossnan;(即便layer-norm是fp32也不行, LLaMA就没有这个问题, …

Open CASCADE学习|视图

目录 Mainwin.h Mainwin.cpp Mainwin.h ​#pragma once#include <QtWidgets/QMainWindow>#include "Displaywin.h"#include "OCC.h"class Mainwin : public QMainWindow{ Q_OBJECTpublic: Mainwin(QWidget* parent nullptr); ~Mainwin();​pri…

Python中高效的爬虫框架,你用过几个?

在信息时代&#xff0c;数据是无价之宝。许多开发者和数据分析师需要从互联网上采集大量的数据&#xff0c;用于各种用途&#xff0c;如分析、建模、可视化等。Python作为一门强大的编程语言&#xff0c;提供了多种高效的爬虫框架&#xff0c;使数据采集变得更加容易和高效。本…

IT资讯——全速推进“AI+鸿蒙”战略布局!

文章目录 每日一句正能量前言坚持长期研发投入全速推进“AI鸿蒙”战略 人才战略新章落地持续加码核心技术生态建设 后记 每日一句正能量 人总要咽下一些委屈&#xff0c;然后一字不提的擦干眼泪往前走&#xff0c;没有人能像白纸一样没有故事&#xff0c;成长的代价就是失去原来…

HashMap的put()方法执行流程

HashMap的数据结构在jdk1.8之前是数组链表&#xff0c;为了解决数据量过大、链表过长是查询效率会降低的问题变成了数组链表红黑树的结构&#xff0c;利用的是红黑树自平衡的特点。 链表的平均查找时间复杂度是O(n)&#xff0c;红黑树是O(log(n))。 HashMap中的put方法执行过…

机器视觉运动控制一体机在光伏汇流焊机器人系统的解决方案

一、市场应用背景 汇流焊是光伏太阳能电池板中段加工工艺&#xff0c;其前道工序为串焊&#xff0c;在此环节流程中&#xff0c;需要在多个太阳能电池片表面以平行方式串焊多条焊带&#xff0c;形成电池串。串焊好的多组电池串被有序排列输送到汇流焊接工作台&#xff0c;通过…

springboot+vue实现微信公众号扫码登录

通常在个人网站中&#xff0c;都会有各种第三方登录&#xff0c;其中微信登录需要认证才能使用&#xff0c;导致个人开发者不能进行使用此功能&#xff0c;但是我们可以使用微信公众号回复特定验证码来进行登录操作。 微信关键词处理 微信公众号关键词自动回复&#xff0c;具体…

第四套CCF信息学奥赛c++ CSP-J认证初级组 中小学信奥赛入门组初赛考前模拟冲刺题(完善程序题)

第四套中小学信息学奥赛CSP-J考前冲刺题 三、完善程序题 第一题 田忌赛马 田忌赛马&#xff0c;田忌每赢一次齐王的马就得200金&#xff0c;,当然输了就扣200金币&#xff0c;平局则金币数 不变。 #include<iostream> using namespace std; int main(){int n;while(c…

ARM系列 -- 虚拟化(二)

上一篇介绍了虚拟化和hypervisor的基本概念。为了配合虚拟化&#xff0c;ARM做了许多工作&#xff0c;首先是定义了四个异常等级&#xff08;Exception Level&#xff0c;简称EL&#xff09;。 前面介绍异常和特权的文章中有介绍&#xff0c;此处再啰嗦几句。每个异常级别都有…

css transform 会影响position 定位

比如通过以下代码.实现导航条上的每个li栏目,以不同的时间间隔,从上向下移动进来并显示 .my-navbar ul li {position: relative;opacity: 0;transform: translateY(-30px);transition: transform .6s cubic-bezier(.165,.84,.44,1),opacity .6s cubic-bezier(.165,.84,.44,1);…

Delphi 报错 Type androidx.collection.ArraySet is defined multiple times

Delphi 11 建立一个新的 Multi-Device Application 编译成app的时候报错 报错信息 [PAClient Error] Error: E7688 Unable to execute "E:\Program\Java\jdk1.8.0_301\bin\java.exe" -cp "e:\program\embarcadero\studio\22.0\bin\Android\r8-3.3.28.jar"…

【学习笔记】Vue3源码解析:第二部分-实现响应式(2)

课程地址&#xff1a;【已完结】全网最详细Vue3源码解析&#xff01;&#xff08;一行行带你手写Vue3源码&#xff09; 第二部分-实现响应式&#xff08;2&#xff09;&#xff1a;&#xff08;对应课程的第6-9节&#xff09; 第6节&#xff1a;《实现proxy代理以及解决重复代…

基于DPU和HADOS-RACE加速Spark 3.x

背景简介 Apache Spark&#xff08;下文简称Spark&#xff09;是一种开源集群计算引擎&#xff0c;支持批/流计算、SQL分析、机器学习、图计算等计算范式&#xff0c;以其强大的容错能力、可扩展性、函数式API、多语言支持&#xff08;SQL、Python、Java、Scala、R&#xff09…

SAP PO接口行项目json缺少中括号[]问题

PO接口小问题问题&#xff1a;如果需要同时传输DATA与ITEM&#xff0c;此处选择很重要&#xff0c;如果选择&#xff1a;HTTP Header ITEM将缺少[].需要注意 PO接口小问题 问题&#xff1a;如果需要同时传输DATA与ITEM&#xff0c;此处选择很重要&#xff0c;如果选择&#…