首页 > 其他分享 >初识DPDK

初识DPDK

时间:2024-09-23 21:24:03浏览次数:9  
标签:优化 代码 网卡 初识 DPDK 数据包 dpdk

初识DPDK

背景

DPDK (Data Plane Development Kit)
DPDK最初是为了证明intel处理器能够应对高性能的网络数据包而提出的
以Linux为例子,网卡收包流程概述如下
1、网络数据包通过网线到达网卡
2、网卡通过DMA将数据写入内存
3、网卡发起中断通知CPU数据到达内存
4、驱动读取数据送到内核协议栈进行处理
5、数据拷贝到用户态

内核针对高速网络数据处理做了很多优化,比如当网络IO速度越来越快时,每次来一个数据包都发起一起中断开稍很大,所以内核做一些优化,如发起一次中断后改成轮询的方式继续收包,直到轮询不到数据包时再换中断方式,减少了中断次数,再比如数据从内核态拷贝到用户态时在使用共享内存等手段减少没必要的拷贝。linux已经作了这么多优化,是否还有进一步优化的空间呢?

40G带宽下传输64B大小的数据包需要16.8ns
CPU主频为2GHz即一个时钟周期0.5ns
如果能够在间隔33个周期(16.8/0.5)内准备好数据就可以达到满带宽
同样的1024B大小的数据包能在417个周期准备好数据可以达到满带宽

通常读取LLC (last level cache )命中需要40个周期,没命中需要140周期,主频为2GHz的处理器传输64B大小数据包不能达到满带宽,但是1024B是有可能的。

处理器的瓶颈在哪里呢?对于传输64B大小数据,瓶颈在LLC读取,对于1024B大小的数据包,瓶颈又在哪里?找到处理器的瓶颈点就知道如何进一步优化,比如读取LLC命中是40周期,不命中是140周期,优化命中率,性能将会提升一大截。

DPDK优化方法

DPDK是一套专门针对数据包处理能力的性能优化最佳实践,尽可能的最大化使用处理器的能力处理网络数据包。DPDK通过多维度(网卡、CPU、内存),多种方法(减少缓存命中、减少资源竞争)进行性能优化。总之想尽各种办法通过软件的手段提升网络数据包处理的性能。

  • 通过大页增加TLB命中
  • 通过NUMA感知增加内存访问速度
  • 通过cache对齐减少内存访问次数
  • 通过轮询+绑核减少中断次数等使得软件能快速感知数据到底
  • 通过无锁数据结构减少资源竞争
  • CAS等减少资源等待时间
  • 多指令并行多数据并行等增加单个指令周期处理能力
  • 预取等手段增加cache命中率
    ……

代码获取

DPDK有自己的开源社区,代码仓库可以从社区上获取,也会同步到github上

社区代码位置如下http://git.dpdk.org/
在这里插入图片描述

一般关注两个仓库即可

  • dpdk-stable 稳定分支,一般实际生产环境使用该仓代码,该分支不会大改动,只会回合一些后续发现的bug
  • dpdk-next-net 最新的代码,开发迭代一般基于该仓
    最新代码下载下来的代码结构如下
    在这里插入图片描述
  • app/ 基于DPDK的应用,一些用于测试的应用,比如test-pmd测试驱动功能的、pro-info获取进程信息等
  • config/ 构建配置相关,比如平台参数配置、网卡参数配置默认等
  • devtols/ 开发者使用的工具,代码检查脚本等
  • doc/ 文档目录,基于rst(reStructuredText)编写的官方文档
  • drivers/ 驱动目录,驱动代码都在这
  • examples/ DPDK示例,使用者可以参考这个目录的写法学习某项功能的用法
  • lib/ 通用依赖,框架代码都在这
  • usertools/ 用户常用的工具,比如设置大页的脚本dpdk-hugepages.py、绑网卡的脚本dpdk-devbind.py等

编译运行

DPDK基于meson+ninja的方式进行编译

meson build
cd build
ninja

其中example默认不编译,需要加参数,如下编译所有example

meson build -Dexamples=all

其中,编译相关参数可以通过文件根目录的文件meson_options.txt查看

在这里插入图片描述
通过脚本配置大页

./usertools/dpdk-hugepages.py -p 2M --setup 128

绑定网卡

./usertools/dpdk-devbind.py -s    //查看可使用的网卡PDF
./usertools/dpdk-devbind.py -b vfio-pci 0000:01:00.0

执行DPDK应用

./example/hello

标签:优化,代码,网卡,初识,DPDK,数据包,dpdk
From: https://blog.csdn.net/dengdui/article/details/142440348

相关文章

  • [Mysql]基础入门篇_关于数据库的简介_初识DQL语句
    @[TOC]文章目录何为数据库数据库类型数据库管理系统(本博主使用的是Mysql数据库)何为SQL准备工作及select查询操作的简单使用何为数据库数据库是一个有组织的数据集合,允许高效存储、管理和检索信息。它通过结构化的方式存储数据,通常使用数据库管理系统(DBMS)来执行操作,如......
  • 初识算法
    持续更新数据结构与算法专题,欢迎关注.......1.1什么是算法?定义在数学和计算机科学领域,算法是一系列有限的严谨指令,通常用于解决一类特定问题或执行计算Inmathematicsandcomputerscience,analgorithm(/ˈælɡərɪðəm/)isafinitesequenceofrigorousinstru......
  • 九宫格(html css实现)---初识flex布局
    记录flex属性并实现一个九宫格flex属性Flex容器:需要注意的是:当时设置flex布局之后,子元素的float、clear、vertical-align的属性将会失效.container{display:flex;}//块状元素.container{inline-flex;}//行内元素块状元素1.***独占一行:块元素会自动......
  • 初识数据结构和算法
    说在前面:⭐看到这篇文章的友友你好啊,在学习的路途中欢迎你的私信、留言,交流互动啊,我们一起学习、一起进步呀!⭐目录数据和结构解释含义数据的属性划分数据和算法的关系算法中复杂度时间复杂度空间复杂度数据和结构解释含义......
  • 如何在 ASP.NET Core Web API 方法执行前后 “偷偷“ 作一些 “坏“ 事?初识 ActionFil
    前言:什么是ActionFilterAttribute?ActionFilterAttribute是一种作用于控制器Action方法的特性(Attribute),通过它,你可以在操作执行前后、异常处理时等不同的阶段插入自定义逻辑。比如在执行操作方法之前修改请求参数、记录日志、进行权限验证等操作,在执行操作方法之后发送邮件......
  • shell编程初识
    1.Shell概述,编程语言.1.1编程概述应用广泛:Shell占据的Linux半壁江山.企业要求:面试要求运维人员必会.目标:1.能够熟练书写超过多行的脚本:检查类:系统巡检,系统加固,优化:(检查,配置优化)系统优化(初始化)(第2阶段开头).......
  • 业务初识-思考问题-分析数据-输出结论
    思考问题:确认问题(目的(明确程度,原因是解决还是什么),背景,思路)检测数据完善性拆解问题-经典分析框架-搭建自己的分析框架sg:拆解问题总结:一个原则四个方法MECE法则:拆解部分要相互独立、完全穷尽时间流程法、模型框架法、量化公式法、穷尽要素法时间流程法:最常用,根据时间......
  • 深度学习 初识学习 9.16
    什么是SVMSVM(SupportVectorMachine,支持向量机)是一种监督学习模型,用于分类和回归分析。其基本思想是找到一个超平面,使得两类样本在该超平面上的间隔最大化。这个间隔被称为“最大间隔”,而位于最大间隔边界上的样本点则被称为“支持向量”。SVM的关键概念:超平面:在n维空间中,一......
  • 初识Docker容器
    初识Docker容器1.什么是DockerDocker是一个开源的容器化平台,用于自动化部署和管理应用程序。它通过将应用程序及其所有依赖打包成一个轻量级、可移植的容器来解决传统虚拟化中的性能开销问题。Docker容器可以在任何支持Docker的环境中运行,无论是本地开发环境、测试服务器......
  • 【webpack4系列】webpack初识与构建工具发展(一)
    为什么需要构建工具?转换ES6语法转换JSXCSS前缀补全/预处理器压缩混淆图片压缩前端构建演变之路ant+YUIToolgruntgulp、fis3webpack、rollup、parcel为什么选择webpack?社区⽣态丰富配置灵活和插件化扩展官⽅方更新迭代速度快初识webpack,简单的例子入手......