当前位置: 首页 > news >正文

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

        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程序以满足需求。更深入地学习,则要深入了解这些库的具体实现,理解性能优化点,提高纠错排错能能力。

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

相关文章:

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

DPDK(Data Plane Development Kit)是一个框架,用于快速报文处理。 在linux内核提供的报文处理模型中,接收报文的处理路径为:首先由网卡硬件接收,产生硬中断,触发网卡驱动程序注册的中断函数处理,之后产生软…...

python基础 002 - 2 常用数据类型

python的常用数据类型 int , 整型 1,2,3float ,小数,浮点类型1.2bool , boolean 布尔,真假。判断命题。True Flasestr ,字符串 list , 列表 a []tuple, 元组 a ()dict , dictionary, 字典 a {}set , 集合 a {} 1 查看数据类型 typ…...

爆赞!GitHub首本Python开发实战背记手册,标星果然百万名不虚传

Python (发音:[ paiθ(ə) n; (US) paiθɔn ] n. 蟒蛇,巨蛇 ),是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。Python 具有脚本语言中最丰富…...

Spring源码-xxxAware实现类和BeanPostProcessor接口调用过程

xxxAware实现类作用 以ApplicationContextAware接口为例 ApplicationContextAware的作用是可以方便获取Spring容器ApplicationContext,从而可以获取容器内的Bean package org.springframework.context;import org.springframework.beans.BeansException; import or…...

Uni-app x

uni-app x,是下一代 uni-app,是一个跨平台应用开发引擎。 uni-app x 是一个庞大的工程,它包括uts语言、uvue渲染引擎、uni的组件和API、以及扩展机制。 uts是一门类ts的、跨平台的、新语言。uts在iOS端编译为swift、在Android端编译为kotli…...

Python 基础:文件

目录 一、从文件中读取数据1.1 读取整个文件1.2 逐行读取 二、写入文件2.1 写入空文件2.2 写入多行2.3 附加到文件 遇到看不明白的地方,欢迎在评论中留言呐,一起讨论,一起进步! 本文参考:《Python编程:从入…...

WebForms 母版页

WebForms 母版页 介绍 WebForms 母版页是 ASP.NET WebForms 应用程序中的一项功能,它允许开发人员创建一个包含页面布局和控件的模板,其他页面可以继承这个模板。使用母版页可以确保整个网站的一致性和减少重复代码。 如何创建母版页 在 Visual Stud…...

Java应用打包成Docker镜像

# 使用官方的OpenJDK17镜像作为基础镜像 FROM openjdk:17 # 设置工作目录 WORKDIR /app # 复制本地的Java应用程序文件到镜像中的指定目录 COPY target/bear-module-system-0.0.1-SNAPSHOT.jar /app/bear-module-system-0.0.1-SNAPSHOT.jar # 暴露API端口 EXPOSE 8888 …...

什么是自动驾驶中的CopyCat?

"CopyCat"这个词通常有两个含义: 字面意思:它可以指一个模仿别人的人,就像猫一样模仿其他猫的行为。在日常用语中,如果有人说某人是个"copycat",他们可能是在说这个人缺乏原创性,总是模仿别人的想法、风格或者行为。 心理学和犯罪学中的含义:在心…...

为什么没人详细说过智能猫砂盆?最受欢迎的好用智能猫砂盆解析!

不知道大家有没有发现,在快节奏的现代生活中,忙碌于上班的我们会发现自己越来越难以抽出足够的时间去细心照料自己的猫咪。每次下班回家,看到猫砂盆里堆积的粪便和尿液,自己都感到一阵头痛。这时,我开始考虑起智能猫砂…...

AI视频智能监管赋能城市管理:打造安全有序的城市环境

一、方案背景 随着城市化进程的加速和科技的飞速发展,街道治安问题日益凸显,治安监控成为维护社会稳定和保障人民安全的重要手段。当前,许多城市已经建立了较为完善的治安监控体系,但仍存在一些问题。例如,监控设备分…...

多态性(Java)

本篇学习面向对象语言的第三个特性——多态。 目录 1、多态的概念 2、继承多态实现条件 3、重写 4、重新与重载的区别: 5、向上转移和向下转型 5、1向上转型: 5、2 向下转型 1、多态的概念 多态的概念:通俗来说,就是多种形态…...

国际期货行情相关术语

1)合约:期货行情表提供了期货交易的相关信息 ,行情表中每一个期货合约都有合约代码(由期货合约交易代码和合约到期月份组成)来标识。 (2)开盘价:当日某一期货合约交易开始前五分钟集…...

LeetCode20.有效的括号

题目描述 分析 我们刚上来的思路可能是:找出这三种括号的个数 如果都是偶数 说明匹配 但是这里还有一个顺序问题 比如 " )( "这样是不匹配的! 所以这种思路不可取! 我们想 如果遇到左括号,把他读到一个顺序表中&#…...

尚玩助手广告变现app开发

尚玩助手广告变现app的开发涉及到多个关键环节。首先,市场调研与定位是不可或缺的步骤,通过了解当前市场上流行的小游戏类型、用户偏好以及竞争对手的情况,来确定app的定位和目标用户群体。 其次,游戏设计与规划也是关键的一环&a…...

Anti-human IL-10 mAb (12G8), biotin:Mabtech热销品

Anti-human IL-10 mAb (12G8), biotin该单克隆抗体能够在ELISpot、FluoroSpot和ELISA等免疫分析方法中特异性检测人白介素10(IL-10)。可以将该单克隆抗体12G8作为检测抗体与单克隆抗体9D7(ca#3430-3)作为捕获抗体配对用于ELISpot、…...

【植物大战僵尸杂交版】致敬传奇游戏玩家——一个普通人的六年坚持

目录 缘起 波澜 凌云 缘起 曾​​​​​​佳伟是《植物大战僵尸》的忠实粉丝,这款游戏给了他很多乐趣,也成为了他度过困难时期的精神支柱。他决定制作杂交版,部分原因是出于对原版游戏的热爱和致敬。 六年前,出于对一些pvz续作…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 部门组队编程(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…...

民生银行信用卡中心金融科技24届春招面经

本文介绍2024届春招中,中国民生银行下属信用卡中心的金融科技(系统研发方向) 岗位2场面试的基本情况、提问问题等。 2024年04月投递了中国民生银行下属信用卡中心的金融科技(系统研发方向) 岗位,暂时不清楚…...

HTML李峋同款跳动的爱心代码(双爱心版)

目录 写在前面 跳动的爱心 完整代码 代码分析 系列推荐 最后想说 写在前面 在浩瀚的网络世界中,总有一些小惊喜能触动我们的心弦。今天,就让我们用HTML语言,探索既神秘又浪漫的李峋同款跳动的爱心代码吧。 首先,让我们一起…...

【linux】内核从tcp层调用IP层摸索中

合入代码: 登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/commit/f5a93955e16d148a70f98e0f300f455b3ab594f3 这是运行日志: https://gitee.com/r77683962/linux-6.9.0/raw/master/test_log/kern_tcp_ip.log 日志截取部分(也…...

Python 中的 Pandas(数据分析与处理)

Pandas 是 Python 中最受欢迎的数据处理库之一,其名字源自于“Panel Data”(面板数据)的缩写。它提供了三种主要的数据结构:Series , DataFrame , Panel(在新版本已经被弃用) 数…...

【文档智能 RAG】RAG增强之路-智能文档解析关键技术难点及PDF解析工具PDFlux

前言 在私域知识问答和企业知识工程领域,结合Retrieval-Augmented Generation(RAG)模型和大型语言模型(LLM)已成为主流方法。然而,企业中存在着大量的PDF文件,PDF解析的低准确性显著影响了基于…...

五大API接口:提升你的应用性能与用户体验

引言: 简述API接口的重要性引入API接口对于提升应用性能和用户体验的贡献 API接口简介: 定义:解释什么是API接口作用:概述API接口在软件开发中的作用 1. 数据访问API 功能描述:提供快速、安全的数据存取功能提升性…...

RabbitMQ实践——在Ubuntu上安装并启用管理后台

大纲 环境安装启动管理后台 RabbitMQ是一款功能强大、灵活可靠的消息代理软件,为分布式系统中的通信问题提供了优秀的解决方案。无论是在大规模数据处理、实时分析还是微服务架构中,RabbitMQ都能发挥出色的性能,帮助开发者构建高效、稳定的系…...

Ubuntu中防火墙的使用 和 开放 关闭 端口

目录 1.查看防火墙的状态 2.开启ufw防火墙 3.重启ufw防火墙 4.关闭ufw防火墙 5.设置外来访问默认权限 6.开放普通端口 7.关闭普通端口 8.开放规定协议的端口 9.关闭指定协议端口 10.重启防火墙,是配置生效 1.查看防火墙的状态 sudo ufw status 2.开启uf…...

ansible 模块进阶及变量

yum 模块进阶 - name: install pkgs hosts: webservers tasks: - name: install web pkgs # 此任务通过yum安装三个包 yum: name: httpd,php,php-mysqlnd state: present # 根据功能等,可以将一系列软件放到一个组中,安装软件包组,将会把很…...

MYSQL数据库安装

一.编译安装MySQL服务 1.安装环境依赖包 2.将安装mysql 所需软件包传到/opt目录下 mysql-boost-5.7.44.tar tar zxvf mysql-boost-5.7.44.tar.gz 3.配置软件模块 cd /opt/mysql-5.7.44/ cmake \ -DCMAKE_INSTALL_PREFIX/usr/local/mysql \ -DMYSQL_UNIX_ADDR/usr/local/mysq…...

Pycharm配置远程调试

第1步:添加SSH Inerpreter 打开Settings --> Project interpreter配置项,配置如下两项 Project Interpreter添加SSH inerpreter 首次使用的远程环境需要填写ip及账号密码,建立ssh连接,然后选择对应的远端python路径 Path mapp…...

【Java面试】二十二、JVM篇(下):JVM参数调优与排查

文章目录 1、JVM的参数在哪里设置2、常见的JVM调优参数有哪些3、常见的JVM调优工具有哪些4、Java内存泄漏的排查思路5、CPU飙高的排查思路 1、JVM的参数在哪里设置 war包部署,在tomcat中设置,修改TOMCAT_HOME/bin/catalina.sh 文件 jar包启动&#xff0…...

怎么找响应式网站/app001推广平台

在之前,曾经写过一篇博客对于Validated的使用说明,但是对于参数校验不通过之后的异常信息,又如何封装到一个JSON对象返回给前端呢? controller层的代码: 如图所示,如果我们仅仅使用Validated进行校验&…...

没有网站如何做cpa/深圳app推广平台

疑难杂症 该画廊特效的特点就是前后元素有层级关系。 我想很多人应该看过或者用过这个插件carousel.js,网上也有相关的教程。不知道这个插件的原型是哪个,有知道的朋友可以告诉我。 该插件相对完美,但是实际在项目中使用时却发现了一个令人…...

WordPress追番页面/杭州网络优化公司排名

今天参加了苹果树的面试,整体面试难度还好,问题涉及的范围很广,顺序和内容也比较杂。 面试时长:35分钟 CPU百分百怎么定位?这个问题频率好高,一着急,jstack命令都忘记了,linux的还要…...

第二季企业网站开发/平台推广渠道

二十年后的家乡文/成浩永“呜”的一声,时空穿梭机带我来到了2040年的台州——我的家乡。我一下机,就被眼前的情景吓了一跳:这里的马路不是用水泥铺成的,而是由一种新型材料铺就,据说用生活废料提炼而成;路上…...

阿里巴巴1688官网登录/杭州网站优化公司哪家好

vue运行为v-on在监听键盘事件时&#xff0c;添加了特殊的键盘修饰符&#xff1a;<input v-on:keyup.13"submit">vue还非常贴心地给出了常用按键的别名&#xff0c;这样就不必去记keyCode ~ ~上面代码&#xff0c;还可以在这样写&#xff1a;<input v-on:key…...

网站做付款页面/河南seo技术教程

一、awk简介&#xff1a;awk 是一种编程语言&#xff0c;用于在 linux/unix 下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件&#xff0c;或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能&#xff0c;是linux/unix下的一个强大编程工具。它在…...