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();}
}

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

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

相关文章

理想滤波器、巴特沃斯滤波器、高斯滤波器实现(包含低通与高通,代码实现与分析)

本篇博客聚焦理想滤波器、巴特沃斯滤波器、高斯滤波器进行原理剖析、代码实现和结果总结,代码含有详细注释,希望帮助大家理解。 以下将从理想低通滤波器、理想高通滤波器、巴特沃斯低通滤波器、巴特沃斯高通滤波器、高斯低通滤波器、高斯高通滤波器六个…

Linux按键输入实验-按键的字符设备驱动代码框架

一. 简介 前面一篇文章学习了:在设备树文件中创建按键的设备节点。文章地址如下: Linux按键输入实验-创建按键的设备节点-CSDN博客 本文继续进行 Linux按键输入实验。本文主要编写字符设备(按键输入也是 gpio功能)驱动代码框架。 二. Linux按键输入实验-按键的字符设备…

【GPTs分享】每日GPTs分享之Image Generator Tool

今日GPTs分享:Image Generator Tool。Image Generator Tool是一种基于人工智能的创意辅助工具,专门设计用于根据文字描述生成图像。这款工具结合了专业性与友好性,鼓励用户发挥创造力,同时提供高效且富有成效的交互体验。 主要功能…

Debezium发布历史153

原文地址: https://debezium.io/blog/2023/07/10/custom-http-signaling-notification/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Debezium signaling and notifications - Part 2: Customisat…

<网络安全>《55 概念讲解<第二课 MAC地址>》

1 MAC地址是什么? MAC地址(Media Access Control Address)是一种标识网络设备的唯一地址,也被称为物理地址或硬件地址。它由网络设备制造商在生产过程中写入网卡的EPROM(一种可擦写的闪存芯片)。 IP地址和…

分布式锁选型+缓存db一致性

基于Redis Cluster模式 setnx就可以实现加锁,del实现解锁,但是这样不具备原子性,存在无法释放的可能。 因此可以使用在加锁时增加过期时间命令,做到原子性的加锁并且可以自动释放。 一些问题: key的过期时间不能设…

LabVIEW变压器振动信号数据采集与分析

LabVIEW变压器振动信号数据采集与分析 随着电力系统的快速发展,对变压器的安全监控和故障诊断需求日益增加。设计了一套基于LabVIEW的变压器振动信号数据采集与分析系统,提高变压器的运行安全性和可靠性,实现对变压器振动信号的实时监测和故…

产品经理学习-产品运营《什么是SOP》

目录 什么是SOP 如何执行SOP 执行SOP的重点 什么是SOP SOP就是项目流程操作的说明书 日常工作中的例行操作: 例行操作是指,在每一天,针对每一个用户,在每个项目之中,都必须完成的操作,这些必须完成的操…

微服务-微服务链路追踪组件Skywalking实战

自动化监控系统Prometheus&Grafana实战: 4 trem APM-性能监控项目班: https://vip.tulingxueyuan.cn/detail/p_602e574ae4b035d3cdb8f8fe/6 1. skywalking是什么 1.1 Skywalking主要功能特性 1.2 Skywalking整体架构 1.3 SkyWalking 环境搭建部…

计算机网络 数据链路层课后题

1.以太网帧有哪些不同的封装格式?他们有何区别和应用场景? 以太网II封装(Ethernet II):以太网II封装是最常用的以太网封装格式,也被称为DIX封装。它在数据链路层首部使用6个字节的目的MAC地址和6个字节的源…

用 SIL 和 PIL 仿真测试生成的代码

目录 PIL 的目标连接配置 对顶层模型运行 SIL 或 PIL 仿真 对 Model 模块运行 SIL 或 PIL 仿真 SIL 或 PIL 模块仿真 硬件实现设置 使用软件在环 (SIL) 和处理器在环 (PIL) 仿真,测试模型组件与从组件生成的生产代码之间的数字等效性。 使用 SIL 仿真,在您的开发…

【析】装卸一体化车辆路径问题的自适应并行遗传算法

0 引言 国内外有关 VRPSPD的文献较多,求解目标多以最小化车辆行驶距离为主,但现实中可能存在由租赁费用产生的单次派出成本,需要综合考 虑单次派车成本和配送路径成本。…

SwiftUI中的TextField

在SwiftUI中,TextField用于在用户界面中显示和输入文本。它是一个文本编辑控件,可以让用户编辑文本并将其提交给应用程序进行处理。 要创建一个TextField,您可以使用TextField视图,然后在括号中使用key和placeholder参数指定键和…

Doris实战——结合Flink构建极速易用的实时数仓

目录 一、实时数仓的需求与挑战 二、构建极速易用的实时数仓架构 三、解决方案 3.1 如何实现数据的增量与全量同步 3.1.1 增量及全量数据同步 3.1.2 数据一致性保证 3.1.3 DDL 和 DML 同步 Light Schema Change Flink CDC DML 和DDL同步 3.2 如何基于Flink实现多种数…

初学学习408之数据结构--数据结构基本概念

初学学习408之数据结构我们先来了解一下数据结构的基本概念。 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。 本内容来源于参考书籍《大话数据结构》与《王道数据结构》。除去书籍中的内容,作为初学者的我会尽力详细直白地介绍数据结构的…

day43

day43 零钱兑换 题目链接:518. 零钱兑换 II 题目描述 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种…

CSS面试题:说一说css优先级?

说一说css优先级&#xff1f; 从引入方式方面&#xff1a;行内style > 内嵌<style> > 链入<link> 从选择器权重方面&#xff1a; &#xff01;important > 行内选择器 1000 > Id选择器 100 > class选择器属性选择器伪类选择器 10 > 标签选择器伪…

YOLOv7改进 | 更换主干网络之GhostNet

前言:Hello大家好,我是小哥谈。GhostNet是一种轻量级的卷积神经网络架构,它的设计目标是在保持高精度的同时,减少模型的参数和计算量,以便在资源受限的设备上进行高效推理。GhostNet通过引入Ghost模块来实现这一目标,该模块利用低成本的附加通道来学习主要特征,并通过信…

FMM 笔记:在colab上执行FMM

windows上配置FMM很麻烦&#xff0c;一直没整好&#xff0c;于是尝试了在colab上执行FMM 参考内容&#xff1a;jalal1/fmm_jupyter: Install Fast map matching (FMM) using Jupyter Notebook (github.com) 1 下载数据 # download file from GitHub ! wget https://raw.gith…