【DPDK学习路径】二、DPDK简介

news2024/11/26 11:53:25

        DPDK(Data Plane Development Kit)是一个框架,用于快速报文处理。

        在linux内核提供的报文处理模型中,接收报文的处理路径为:首先由网卡硬件接收,产生硬中断,触发网卡驱动程序注册的中断函数处理,之后产生软中断,触发协议栈注册的中断处理函数,之后则交给协议栈处理,如果报文最终目的是本机应用层,则需要从内核拷贝至用户程序;发送报文的处理路径为:应用层封装后逐层调用协议栈的报文封装函数,并添加到网卡的发送队列中,最终由网卡发送出去。

        linux内核协议栈处理可以参考 Linux网络详解:链路层-CSDN博客  及  https://blog.csdn.net/weixin_58966834/article/details/137572176

        在这一内核模型中,最常遇到的瓶颈是中断,中断的开销使得报文处理所需的时钟周期大幅提升,这意味着,流量大的情况下cpu将很快被占满。除此之外,I/O效率、内存访问效率,也是性能限制因素。此外,在报文输入/输出的情况下,报文需要从内核拷贝到用户态,或者是由用户态拷贝到内核,也是性能瓶颈之一。

        为了解决上述问题,涌现了许多的解决方案。比如硬件转发,硬件转发的本质就是在网卡上实现报文的转发功能,cpu不用于转发计算,因此cpu就不会成为转发性能瓶颈,并且硬件的处理效率远高于软件,它的缺点也很明显,硬件不容易编程。基于软件的解决方案也有不少,比较著名的如tc、xdp、dpdk,tc、xdp主要用于流量控制,它们类似于netfilter框架中的钩子,可以在比较靠前的位置处理报文,在面对DDoS攻击的情况下,二者可以通过丢包的方式避免报文进入内核,因此提高了DDoS防御能力,此外XDP可以通过选择性地让报文跳过部分内核处理,因此提高报文的处理效率。总的来说,二者的做法都是跳过内核协议栈的处理,因此提高报文处理效率,但是可以执行的操作都比较受限,并且无法改变网卡的I/0方式(中断/轮询)。XDP提供的功能更多一些,但要编写一个符合内核规范的XDP程序可不太容易,开发的进度比较容易受限。

        DPDK所作的事情更多一些,它可以使用轮询取代中断,这样的好处是在高数据量的时候报文处理更加高效,坏处是CPU每时每刻都被占用 100% ,除报文处理外的其他工作可能会受影响。不过,现代计算机大多都是多核结构,即使路由器、交换机等嵌入式设备也是如此,因此,某一个核一直被使用也不是多么不能接受的事情了。此外,DPDK实际可以在应用程序中随时启用/禁用网卡的中断,因此可以在流量较小时使用中断的方式处理报文。

        此外,通过用户态驱动程序,DPDK可以直接将网卡的I/O地址映射到用户态,使得用户态程序可以直接读取网卡中的数据包而无需经过内核-用户态拷贝过程。

        并且,在内存方面,DPDK可以通过分配大页内存,减少快表MISS的可能性,并支持NUMA架构下内存的读取优化。在CPU方面,DPDK可以将报文处理限制在特定核心,以减少线程调度的消耗。最后,DPDK对缓存也进行了优化。

        DPDK所作的一切事情,都是通过库的方式提供的,可以说,DPDK本质上就是一堆库。比较重要的库有:rte_eal、libc、rte_debug、rte_malloc、rte_timer、rte_mempool、rte_ring、rte_mbuf等。它们的功能及引用关系如下图:(此图为DPDK官方文档copy过来)

        其中,rte_eal是对硬件的抽象,包括网卡、cpu、内存等,rte_mbuf、rte_mempool、rte_ring是首先接收/发送队列所必须的库,所提供的无锁环形队列也是报文处理性能提升点之一。其他的库则如名字所示,提供一些基础功能。

        使用DPDK构建自己的数据平面,必须依赖于DPDK提供的这些库,当然,对于不同的DPDK程序,所需要的库也是不同的。

        简单学习DPDK,无非就是了解这些库的用法,并用它们构建一个DPDK程序以满足需求。更深入地学习,则要深入了解这些库的具体实现,理解性能优化点,提高纠错排错能能力。

        我们将由浅入深,慢慢学习。

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

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

相关文章

【吊打面试官系列-Mysql面试题】优化数据库的方法?

大家好,我是锋哥。今天分享关于 【优化数据库的方法?】面试题,希望对大家有帮助; 优化数据库的方法? 1、选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置 NOTNULL, 例…

【Android面试八股文】你能描述一下JVM中的类加载过程吗?

文章目录 一、Java类的生命周期二、JVM类加载过程1. 加载(Loading)2. 链接(Linking)a. 验证(Verification)b. 准备(Preparation)b.1 准备阶段的初始值b.2 用户定义的初值b.3 常量的初始化c. 解析(Resolution)3. 初始化(Initialization)3.1 什么是 `<clinit>`…

嵌入式系统中常用的参数存储方法

一、有哪些参数需要管理? 在智能硬件产品中,一般有三类数据需要存储并管理: 1. 系统设置数据 系统设置数据是指产品自身正常工作所依赖的一些参数。 这类数据的特点:只能在生产过程中修改,出厂后用户无权限修改。 比如:产品 SN、产品密钥/token/license、传感器校准值…

我与Python的一夜情

期末突击看这篇才够味&#xff01; 环境搭建 首先就是相关工具的安装&#xff0c;直接搜就好&#xff0c;但是还是贴个网址吧&#xff1a; Welcome to Python.orghttps://www.python.org/ 然后就是根据自己的系统选择咯&#xff1a; 谁能闲来无事送我个mac玩玩 Windows的一…

Spring 整合 MyBatis 底层源码解析

大家好&#xff0c;我是柳岸花开。今天我们要讲的是 Spring 整合 MyBatis 的底层源码解析。希望大家能更深入理解 Spring 和 MyBatis 的整合原理&#xff0c;并应用到实际项目中。 由很多框架都需要和Spring进行整合&#xff0c;而整合的核心思想就是把其他框架所产生的对象放到…

学习cel-go了解一下通用表达语言评估是什么

文章目录 1. 前言2. cel-go2.1 cel-go关键概念Applications(应用)Compilation(编译)Expressions(表达式)Environment环境解析表达式的三个阶段 3. cel-go的使用4. cel-go使用5. 说明6. 小结7. 参考 1. 前言 最近因为在项目里面实现的一个使用和||来组合获取字段值的功能有点儿…

有监督学习——支持向量机、朴素贝叶斯分类

1. 支持向量机 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;最初被用来解决线性问题&#xff0c;加入核函数后能够解决非线性问题。主要优点是能适应小样本数量 高维度特征的数据集&#xff0c;甚至是特征维度数高于训练样本数的情况。 先介绍几个概念&am…

王思聪日本街头在被偶遇

王思聪日本街头再被偶遇&#xff0c;甜蜜约会日常成网友热议焦点近日&#xff0c;有网友在日本街头再次偶遇了“国民老公”王思聪&#xff0c;这次他不仅携带着一位美丽的女友&#xff0c;还展现出了两人之间亲密无间的互动&#xff0c;让不少网友感叹&#xff1a;这真的是每天…

【MySQL】E-R图-关系数据模型-3NF--精讲+练习(巨全面)

一.知识储备 E-R图 E-R图&#xff0c;即实体-关系图&#xff08;Entity-Relationship Diagram&#xff09;&#xff0c;是数据库建模的一种工具&#xff0c;用于表示实体类型、属性以及它们之间的关系。 在E-R图中&#xff0c;实体用矩形表示&#xff0c;属性用椭圆表示&…

Java SSTI服务端模版注入漏洞原理与利用

文章目录 前言Velocity基础语法基础示例命令执行 靶场实践漏洞代码漏洞验证检测工具 FreeMarker基础示例漏洞示例CMS案例 Thymeleaf基础示例漏洞示例安全方案 总结 前言 SSTI&#xff08;Server Side Template Injection&#xff09;全称服务端模板注入漏洞&#xff0c;在 Jav…

Swift开发——元组

Swift语言的数据类型包括整型、浮点型、字符串、布尔型、数组、元组、集合和字典等,本文将详细介绍元组。 01、元组 严格意义上,元组不属于数据类型,而属于数据结构。元组将一些变量或常量或字面量组织成一个有序的序列,索引号从0开始,用圆括号“()”括起来,各个元素间用…

笔记100:使用 OSQP-Eigen 对 MPC 进行求解的方法与代码

1. 前言&#xff1a; 我们在对系统进行建模的时候&#xff0c;为了减少计算量&#xff0c;一般都将系统简化为线性的&#xff0c;系统如果有约束&#xff0c;也是将约束简化为线性的&#xff1b; 因此本篇博客只针对两种常见系统模型的 MPC 问题进行求解&#xff1a; 线性系统…

【ARM-Linux篇】智能家居语音模块配置

1. pin脚配置&#xff1a; 2. 命令词自定义基本信息&#xff1a; 3. 命令词自定控制详情: • 测试&#xff1a;串口模块可先通过串口助手验证每个指令的准确性&#xff0c; 然后运行wiringOP中的serialTest程序(需把/dev/ttyS2改成/dev/ttyS5) 然后语音接收到指令后(比如喊你好…

如何在 Postman 中进行 HTTPS 请求

https 请求是一种安全的网络通信方式&#xff0c;它使用 SSL/TLS 协议来加密数据和验证身份。在 postman 中发起 https 请求的步骤如下。 Postman 发起 https 请求 1、打开 postman 应用程序&#xff0c;点击左上角的“”号按钮&#xff0c;创建一个新的请求。 2、在请求标签…

MB-iSTFT-VITS 模型论文思路与实验分享:基于VITS架构优化的轻量级文本转语音模型

参考文献&#xff1a; [1] Kawamura M, Shirahata Y, Yamamoto R, et al. Lightweight and high-fidelity end-to-end text-to-speech with multi-band generation and inverse short-time fourier transform[C]//ICASSP 2023-2023 IEEE International Conference on Acoustics…

万能破题方法包(3)暴力破解法

一、前言 暴力破解法是指通过尝试所有可能的密码组合来破解密码 1.1、概念 暴力破解法是一种通过尝试所有可能的密码组合来破解密码的方法。它基于暴力的方式&#xff0c;不依赖于任何密码漏洞或特殊技巧&#xff0c;而是通过穷举所有可能性来找到正确的密码。 1.2、解决步骤 …

华为数通题库HCIP-821——最新最全(带答案解析)

单选1、下面是一台路由器的输出信息&#xff0c;关于这段信息描述正确的是 A目的网段1.1.1.0/24所携带的团体属性值是no—export表明该路由条目不能通告给任何BGP邻居 B目的网段5.1.1.0/24所携带的团体属性值是no—advertise表明该路由条目不能被通告给任何其他的BGP对等体 C…

【秋招突围】2024届秋招笔试-小红书笔试题-第一套-三语言题解(Java/Cpp/Python)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系计划跟新各公司春秋招的笔试题 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f4e7; 清隆这边…

若依Ruoyi-vue和element admin的区别,该如何选择。

提到中后台的前端框架&#xff0c;每个人都能列举出很多&#xff0c;这其中提及率比较高的就是Ruoyi和element admin两款&#xff0c;很多小伙伴分不清二者&#xff0c;本文为大家详细讲解一下。 一、若依Ruoyi-vue是什么&#xff1f; 若依Ruoyi-Vue是一款基于 Vue.js 开发的…

英伟达开源3400亿参数巨兽,98%合成数据训练出最强开源通用模型!性能媲美GPT-4o

英伟达刚刚再次证明了其在AI创新领域的领导地位。 它全新发布的Nemotron-4 340B&#xff0c;是一系列具有开创意义的开源模型&#xff0c;有望彻底改变训练LLM的合成数据生成方式&#xff01; 这一突破性进展标志着AI行业的一个重要里程碑—— 各行各业无需依赖昂贵的真实世界数…