​DPDK 高效原因初探

news2024/12/25 3:14:08

Linux处理Packets主逻辑

系统接受数据包的过程

  • 当网卡收到第一个包时候,通过DMA把这个包发送给接受队列(rx)
  • 系统通过中断的方式通知新数据包的到来,同时也需要把数据包传递给内核的buffer(每个包一个buffer,sk_buff struct).一个数据包到来会触发多次的中断,内核处理完毕后,数据包再次传输到用户态空间

瓶颈分析

  • 内核在处理很多包的时候,会消耗非常多的资源,同时也会触发很多次中断,这会严重影响系统处理数据包的性能
  • 内核的sk_buff的设计是为了内核协议栈兼容多个协议。因此所有的协议的元数据都会存储在sk_ bff中,这对于包的处理很多协议是不必须要的。
  • context上下文切换,当一个用户态app需要发动或者接受数据包时候,会调用系统调用(recv/send),这会导致app进程陷入到内核态,引起了上下文切换,这样会消耗比较多的系统资源

NAPI 解决的问题

  • 为了解决上面的问题。在kernel 2.6以后引入的NAPI,它能够每个包的请求不是每次都触发中断,而是多个包到了以后在触发中断,减少中断的次数
  • 当网卡在中断模式下工作,一旦数据包到达网卡,它自身会注册一个poll queue和禁用中断,内核周期性检查queue中即将处理的数据包,一旦数据包被处理,网卡会删除queue中的数据包,然后再次触发中断。

DPDK工作流程

  • 上图中的左边是传统的数据包处理过程,右边是DPDK数据包处理的过程。内核中每个driver会bind和unbind多个文件可以通过如下命令查看.对于驱动中的unbind 一个设备,设备总线的编号会写入到unbind 文件中。类似的对于驱动中bind一个设备,对应的总线编号会写入到bind文件中。DPDK会通过命令来知道哪些ports会被vfio_pci,igb_uio或者uio_pci_generic驱动管理。这些驱动在用户态直接和网卡设备交互,这样网卡设备就可以直接和DPDK进行交互。
# ls /sys/bus/pci/drivers/mlx4_core
bind  module  new_id  remove_id  uevent  unbind

复制

  • DPDK需要配置大页,DPDK处理包需要申请内存,这些大页内存被用户DPDK中包的处理,这个和传统的使用DMA处理数据包的用途相同。

DPDK收发数据包的逻辑

  • 到达的数据包会被放到ring buffer中,上层的app周期性检查buffer中的新的数据包
  • 如果ring buffer中有新的数据包描述符,上层app会在DPDK内存池中分配数据包的缓冲区。
  • 如果ring buffer中没有任何数据包,上层app会网卡设备排队到DPDK,再次触发Ring

DPDK 高性能数据结构支撑

EAL: Environment Abstraction

  • EAL是DPDK的环境抽象层的库,它的作用是在特殊硬件环境和系统中工作的可编程的工具,在DPDK中EAL实现是在rte_eal的目录中
rte_lcore.h  - 管理处理器cores和sockets
rte_memory.h - 内存管理
rte_pci.h 	  - 提供访问pci的地址空间接口
rte_debug.h 	- 提供trace和debug的函数
rte_interrupts.h 	- 中断处理

复制

Managing Queues: rte_ring

  • 当网络数据包被网卡接受后,会发送给ring buffer.DPDK的ring buffer是充当接受队列。接受到的数据在DPDK中发送到ring buffer,ring buffer的实现是在rte_ring中。rtr_ring是从FreeBSD ring buffer二次开发而来。rte_ring 基于lock free模式的FIFO实现,ring buffer是一个对象数组指针,指针分为4类分别是:pro_tail/prod_head/cons_tail/cons_head
  • prods是生产者的简称,cons是消费者的简称。生产者的数据是给点时间由进程写数据到buffer,消费者的数据是进程从buffer中移除。tail是在环形缓冲区上发生写操作位置,head是在给定时间读取缓冲区的位置
  • 这样设计会到来很多好处,首先数据写入到buffer非常快,每次从queue中add或者remove大量对象,cache miss情况会发生很少。唯一的弊端是ring buffer是固定大小,一定初始化就不能动态更改。

Memory Management: rte_mempool

  • DPDK强烈推荐设置2M的大页内存,这些2M大页会被合并在多个segment,然后划分到多个zone中。这些内存对象是被上层app或者DPDK中queues、packets buffer使用。这些内存对象是通过rte_memory创建,同时采用了对齐技术提供更高的性能.
  • Posix提供mlock的系统调用是为了让virtual page(默认是4K)有对应的physical page对应(物理内存中page),实际这仅仅是为了保证虚拟内存不会被swap出去,但是virtual page对应的physical page会改变。但是使用hugepages(默认大页大小有2M/8M/1G),内核对于hugepages不同于常规的4K page.操作系统从来不会去改变通过hugepages申请的virtual page(虚拟内存页面)对应physical page应(物理内存页面)位置。
  • 为了防止有瓶颈,每个cpu core会设置一个memory pool的local cache.

Buffer Management: rte_mbuf

  • 在linux 网络协议栈中所有的数据包都是通过sk_buff数据结构表示,而在DPDK中数据包是用数据结构rte_mbu.h中的ret_mbuf结构表示。相比sk_buff,rte_mbuf相对会比较小。

DPDK高性能的原因总结

  • Processor affinity,通过每个CPU CORE一个进程以达到进程的亲和性
  • Huge pages,大页技术,增加TLB的命中率
  • UIO,用户态直接和网络驱动进行交互,避免了用户态到内核态拷贝
  • Polling,摒弃传统中断的方式采用Polling方式,减少中断的开销
  • Lockless synchronization,避免等待
  • Batch packets handing,批量包处理,提供更高包处理的吞吐

原文链接:https://cloud.tencent.com/developer/article/2074545 

(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂

更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! !   

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

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

相关文章

.net-----语言集成查询LINQ

语言集成查询LINQ前言相关语言要素初始值设定项匿名类型相关语言要素Lambda表达式扩展方法LINQ的概念和基本操作集成语言查询LINQLINQ查询操作标准查询运算符数据排序数据筛选数据投影数据分组联接运算数据分区限定运算聚合运算集合运算生成运算元素操作串联运算相等运算数据类…

【新知实验室 基于WEB的实时音视频(TRTC)案例搭建】

文章目录1. 实时音视频(TRTC)1.1 实时音视频(TRTC)概述1.2 实时音视频(TRTC)功能集成1.2.1 含 UI 组件集成方案1.2.2 无 UI 组件集成方案1.3 实时音视频(TRTC)架构2. 使用体验2.1 注册腾讯云2.2 申请实时音视频(TRTC)应用2.3 下载SDK的Demo源码2.4 获取 …

前后端结合解决Excel海量公式计算的性能问题

背景 在数据密集的业务领域,尤其是金融,保险,税务等行业中,经常需要利用Excel模型,来对业务进行分析和处理。例如: 1.金融投资: 根据模型进行估值计算,并对投资风险进行评估&#x…

降本增效这九个月,爱奇艺从“穿越火线”,到“冷静增长”

在互联网行业一致宣称降本、提质、增效的小周期里,爱奇艺已经把这个趋势彻底吃透,展现出成熟的一面。 11月22日美股盘前,爱奇艺发布了2022年第三季度业绩,连续三个季度运营盈利,而且当季净增会员数超千万,…

iwebsec靶场 数据库漏洞通关2-Redis数据库漏洞

iwebsec靶场的redis漏洞为未授权漏洞,如下所示。 一、Redis未授权漏洞原因 那么这个未授权漏洞的原理是什么呢?Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任…

PreScan快速入门到精通第三十九讲基于车道线识别传感器的车道保持辅助算法Demo讲解

车道保持辅助系统介绍: 什么是车道保持辅助系统? 疲劳和分心是无意中偏离车辆行驶车道线的最常见原因。车道保持辅助系统主动帮助驾驶者将其车辆保持在车道内,避免或者降低事故的发生。 车道保持辅助系统使用一个前置的摄像头,一般安装在车内后视镜附近,用来检测车辆前方…

项目风险管理十大黄金法则!高质量项目管理必杀技!

随着新冠疫情的发生,在这个VUCA时代越来越多企业开始重视风险管理。其实项目风险管理的好处是巨大的,如果您以积极的方式处理不确定的项目事件,则可能赚很多钱或提前拿到现金流。结果是您可以最大程度地减少项目威胁的影响并抓住发生的机会。…

野火FPGA强化(1):串口

文章目录第31讲:串口RS232串口数据接收模块:Uart_rx串口数据发送模块:Uart_tx底层模块:rs232第32讲:使用SignalTap II嵌入式逻辑分析仪在线调试第33讲:串口RS485key_filterwater_ledbreath_ledled_ctrluart…

Linux 内存之vmstat

文章目录前言一、vmstat简介1.1 processes1.2 memory1.3 block IO1.4 System1.5 cpu activity二、使用步骤2.1 vmstat -a2.2 vmstat -f2.3 vmstat -m2.4 vmstat -s2.5 vmstat -d/D三、vmstat 数据来源参考资料前言 NAMEvmstat - Report virtual memory statisticsvmstat 报告有…

Gang Scheduling Performance Benefits for Fine-Grain Synchronization

Gang Scheduling Performance Benefits for Fine-Grain Synchronization 题目 什么是 gang secheduling ? 组调度,要么一组全部执行,要么都不执行什么是 fine-grain 同步 ?细粒度同步 CSDN 博客 摘要 gang scheduling, where …

SSM框架的基本整合

整合SSM框架要做哪些事情: SpringMVC: pom web.xml a. 前端调度器servlet b. 编码过滤器filter c. 支持rest的过滤器springmvc.xml a. 扫描controller包 b. 添加 c. 视图解析器 d. 静态资源解析添加控制器类… Spring:web.xml a. 监听器(在启动web容器时…

Qt QHeaderView 添加复选框

有两种方法&#xff1a; 1. 重载paintSection 主要是重载paintSection和mousePressEvent这两个函数 headview.h #ifndef HEADERVIEW_H #define HEADERVIEW_H#include <QObject> #include <QHeaderView> #include <QPainter> #include <QCheckBox> …

后端进阶知识 Buffer pool 图文详解 之 free链表

Buffer pool 图文详解 之 free 链表 前言数据页缓存页描述信息初始化 Buffer poolfree 链表获取空闲页数据页是否缓存可关注专栏 》MySQL 进阶知识 收藏点赞加关注 前言 Buffer pool 是 InnerDB 存储引擎的一个重要组件&#xff0c;MySQL 的所有 CRUD 操作都是围绕 Buffer poo…

MariaDB 数据文件 迁移

1. 需求 原MariaDB采用默认安装&#xff0c;安装在/所在的分区下&#xff0c;现在该服务器的磁盘空间不补足了&#xff0c;现在扩展插入了一块新的磁盘&#xff0c;并且挂载到了/www/目录下&#xff0c;现在需要将原来的数据库数据迁移至该目录下。 2. 查询数据存储目录 首先…

预测足球世界杯比赛

目录 1. 下载数据集 2. 数据预处理 3. 模型训练与选择 4. 预测 1. 下载数据集 下载后数据如下&#xff1a; FIFA World Cup | Kaggle 2. 数据预处理 reprocess_dataset() 方法是数据进行预处理。预处理过的数据如下&#xff1a; save_dataset() 方法是对预处理过的数据&…

LibreOJ_10010

链接 点此跳转 思路 题目描述 有 nnn 个小朋友坐成一圈&#xff0c;每人有 aia_iai​ 颗糖果。 每人只能给左右两人传递糖果。每人每次传递一颗糖果的代价为 111 。 求使所有人获得均等糖果的最小代价。 分析 设 xix_ixi​ 表示第 iii 个朋友向第 i−1i-1i−1 个小朋友…

爬虫与云服务器云数据库

腾讯云轻量应用服务器TDSQL-MYSQL数据库PYTHON做爬虫 实现目标&#xff1a;轻量应用服务器上运行Python爬虫&#xff0c;把数据写到TDSQL-MYSQL数据库中。 最近双十一&#xff0c;趁着这一波福利&#xff0c;在腾讯云购买了一个轻量应用服务器和TDSQL-MYSQL版的数据库。买来之…

OpenGL学习

1.1&#xff0c;状态机-上下文-对象 GPU渲染流程 OpenGL自身是一个巨大的状态机(State Machine)&#xff1a;一系列的变量描述OpenGL此刻应当如何运行。 状态机&#xff1a;变量&#xff08;描述该如何操作&#xff09;的大集合 OpenGL的状态通常被称为OpenGL上下文(Contex…

异构图注意力网络Heterogeneous Graph Attention Network ( HAN )

文章目录前言一、基础知识1.异构图&#xff08;Heterogeneous Graph&#xff09;2.元路径3.异构图注意力网络二、异构图注意力网络1.结点级别注意力&#xff08;Node-level Attention&#xff09;2.语义级别注意力&#xff08;Semantic-level Attention&#xff09;总结前言 异…

微信商城小程序怎么开发_分享微信商城小程序的搭建

如何搭建好一个微信商城&#xff1f;这三个功能要会用&#xff01; 1.定期低价秒杀&#xff0c;提高商城流量 除了通过私域流量裂变&#xff0c;低价秒杀是为商城引流提高打开率的良好手段。 以不同节日作为嘘头&#xff0c;在情人节、38妇女节、中秋国庆、七夕节等日子&…