DPDK源码分析之DPDK技术简介

news2024/11/26 18:54:33

Cache和内存技术

1. Cache一致性

多核处理器同时访问同一段cacheline时,会出现写回冲突的情况,操作系统解决这个问题会消耗一部分性能,DPDK采用了两个技术来解决这个问题:

  • 对于共享的数据,每个核都定义自己的备份lcore[RTE_MAX_LCORE],这样多核处理事务时只处理自己的部分,lcore[idx]
  • 利用单网卡有着多队列的能力,当多核处理同一个网卡的数据包时,进行分队列处理,例如核1使用队列1、2,核2使用队列3,4

2. 巨页技术

内存管理单元(MMU)完成从虚拟内存地址到物理内存地址的转换。内存管理单元进行地址转换需要的信息保存在一个叫页表(Page Table)的数据结构里面,页表查找是一种极其耗时的操作。DPDK则利用巨页技术,首先页表增大到1GB,这样会大大减少cache miss,其次所有的内存都是从巨页里分配,实现对内存池(Mempool)的管理,并预先分配好同样大小的mbuf,供每一个数据分组使用。

3. DDIO

传统方式,当一个网络报文送到服务器的网卡时,网卡通过外部总线(比如PCI总线)把数据和报文描述符送到内存。接着,CPU从内存读取数据到Cache进而到寄存器。进行处理之后,再写回到Cache,并最终送到内存中

DPDK使用了DDIO技术使外部网卡和CPU通过LLC Cache直接交换数据,绕过了内存这个相对慢速的部件。

4. NUMA

NUMA是起源于AMD Opteron的微架构,同时被英特尔Nehalem架构采用。在这个架构中,处理器和本地内存之间拥有更小的延迟和更大的带宽,而整个内存仍然可作为一个整体,任何处理器都能够访问,只不过跨处理器的内存访问的速度相对较慢一点。

DPDK做了一些优化以适应NUMA系统,使其运行速度更快:

  • per-core memory,每个核都有属于自己的内存,即对于经常访问的数据结构,每个核都有自己的备份
  • 如果有一个PCI设备在node0上,就用node0上的核来处理该设备,处理该设备用到的数据结构和数据缓冲区都从node0上分配,即本地设备本地处理

无锁环形队列

环形队列一般符合生产者-消费者模型,用于报文收发的缓存区或者是线程收发消息的队列,DPDK提供了一种无锁的环形队列,大家知道加锁操作十分耗费性能,下图是横向多种锁机制的比较,其中第一个是无锁:

DPDK的无锁环形队列的优缺点:

DPDK无锁队列的实现方法,我以单生产者-单消费者进行举例:

单生产入队总共分三步:

  • 生产者通过Cas原子锁将ring队列中的prod_head复制到自己的线程变量中,然后将prod_next置为pro_head的下一个位置。
  • 接着将obj4对象拷贝到prod_head指向的地方,然后用线程变量的prod_next去更新ring状态的prod_head。
  • 最后修改ring状态的prod_tail指向prod_head。

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

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

单消费者入场消费总共分三步,和生产者类似不赘述了:

多线程绑核技术

DPDK的线程基于pthread接口创建,属于抢占式线程模型,受内核调度支配。DPDK通过在多核设备上创建多个线程,每个线程绑定到单独的核上,减少线程调度的开销,以提高性能。DPDK的线程可以作为控制线程,也可以作为数据线程。在DPDK的一些示例中,控制线程一般绑定到MASTER核上,接受用户配置,并传递配置参数给数据线程等;数据线程分布在不同核上处理数据包

其次DPDK充分利用指令的并发,比如说rte_memcpy,虽然功能只是简单的内存拷贝功能,但是它的实现使用了平台所支持的最大宽度的Load和Store指令(Sandy Bridge为128bit, Haswell为256bit)。此外,由于非对齐的存取操作往往需要花费更多的时钟周期,rte_memcpy优先保证Store指令存储的地址对齐利用处理器每个时钟周期可以执行两条Load这个超标量特性来弥补一部分非对齐Load所带来的性能损失

网卡性能优化技术

DPDK采用了轮询或者轮询混杂中断的模式来进行收包和发包,此前传统的方法都是系统内核态的网卡驱动程序基于异步中断处理模式,我们都知道中断是十分耗性能的。

DPDK纯轮询模式是指收发包完全不使用中断处理的高吞吐率的方式。DPDK所有的收发包有关的中断在物理端口初始化的时候都会关闭,具体轮询步骤如下:

  1. DPDK的轮询驱动程序负责初始化好每一个收包描述符,其中就包含把包缓冲内存块的物理地址填充到收包描述符对应的位置,以及把对应的收包成功标志复位
  2. 驱动程序修改相应的队列管理寄存器来通知网卡硬件队列里面的哪些位置的描述符是可以有硬件把收到的包填充进来的
  3. 网卡硬件会把收到的包一一填充到对应的收包描述符表示的缓冲内存块里面,同时把必要的信息填充到收包描述符里面,其中最重要的就是标记好收包成功标志
  4. DPDK都会有一个对应的软件线程负责轮询里面的收包描述符的收包成功的标志。一旦发现某一个收包描述符的收包成功标志被硬件置位了,就意味着有一个包已经进入到网卡,这时候驱动程序会解析相应的收包描述符,提取各种有用的信息

硬件卸载技术

硬件的能力提升迅速,在一块小小的网卡上,处理器能够提供的性能已经远远超出了简单的数据包接收转发的需求,这在技术上提供了将许多原先软件实现的功能下移由网卡硬件直接完成的可能。

DPDK支持的网卡种类已经非常多,以下是dpdk的软件接口:

Reference

dpdk应用基础 (豆瓣) (douban.com)

深入浅出DPDK (豆瓣) (douban.com)

深入理解dpdk rte_ring无锁队列_NTF的博客-CSDN博客_rte_ring_create

谈谈DDIO你该知道的事_白鹿港的博客-CSDN博客

NUMA架构详解_bob的博客-CSDN博客_numa架构

无锁队列、自旋锁队列、互斥锁队列性能对比测试_bandaoyu的note-CSDN博客

原文链接:https://zhuanlan.zhihu.com/p/434996311 

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

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

相关文章

区块链学习2-合约开发

概述 智能合约本质上是运行在某种环境(例如虚拟机)中的一段代码逻辑。 长安链的智能合约是运行在长安链上的一组“动态代码”,类似于Fabric的chaincode,Fabric的智能合约称为链码(chaincode),…

对氯间二甲苯酚在活性污泥发酵过程中重塑ARGs的机制类别

2022年8月,凌恩生物客户河海大学罗景阳教授团队在《Science of the Total Environment》期刊上发表研究论文“Para-chloro-meta-xylenol reshaped the fates of antibiotic resistance genes during sludge fermentation: Insights of cell membrane permeability, …

ChatGPT技术解构

ChatGPT的训练主要分为三个步骤,如图所示: Step1: 使用有监督学习方式,基于GPT3.5微调训练一个初始模型;训练数据约为2w~3w量级(根据InstructGPT的训练数据量级估算,参照https://arxiv.org/pdf…

【内网安全-防火墙】防火墙、协议、策略

目录 一、基础知识 1、防火墙五个域 2、协议模型 二、出入站策略 1、单个机器防火墙 2、域控的防火墙 3、安全策略 一、基础知识 1、防火墙五个域 1、Untrust(不信任域,低级安全区域): 用来定义Internet等不安全的网络,用于网络入口线的接入 ——…

沁恒 CH32V003J4M6 开发测试

一、概述 具体看图,SOP8价格在0.6R,TSSOP20价格在0.7R,优势太大了 二、开发准备 通过原厂可以拿到样片,目前我拿到这颗是SOP8,另外官方淘宝可以买到TSSOP20的测试板,也带样片购买WCHLINK,TB…

Mysql 进阶(面向面试篇)锁

全局锁、表级锁(表锁、元数据锁、意向锁(意向共享锁、意向排它锁))、行级锁(行锁(共享锁、排它锁)、间隙锁、临键锁) 表级锁(表锁(表锁分为:表共…

仅差一步!如何缩短加入购物车与成单的距离?

不知不觉,2022年已接近尾声,经历了卡塔尔世界杯、黑色星期五等跨境电商狂欢节后,不少跨境电商卖家都在开展复盘行动,为接下来的圣诞节运营计划打下扎实基础。时常关注跨境电商行业的人都知道,衡量跨境电商广告效率的关…

Python函数、类和对象、流程控制语句if-else while的讲解及演示(图文解释 附源码)

一、函数 函数是完成某个功能的代码段,可被其他代码调用,调用的代码可以将数据传递给函数,函数可将对数据的处理结果返回给调用代码。 def mysubt( a, b 0 ): # 定义一个自己的减法函数,第二个参数为默认值为0的默认参数c a -…

2023年湖北报考施工员要多少钱?甘建二告诉您

2023年湖北报考施工员要多少钱?甘建二告诉您 2023年湖北报考施工员要多少钱,甘建二告诉您 2023年武汉报考施工员要多少钱,甘建二告诉您 2023年黄冈报考施工员要多少钱,甘建二告诉您 2023年黄石报考施工员要多少钱,甘…

HBase Java API 开发:批量操作 第3关:批量导入数据至HBase

每一次只添加一个数据显然不像是大数据开发,在开发项目的时候也肯定会涉及到大量的数据操作。 使用Java进行批量数据操作,其实就是循环的在Put对象中添加数据最后在通过Table对象提交。 如何进行批量操作呢,讲到批量操作,相信大…

秋招必备!阿里产出的高并发+JVM豪华套餐送给你,绝对硬核干货

**3、设计了方案,但细节掌握不透彻:**讲不出方案要关注的技术点和可能带来的消极影响。比如读性能有瓶颈会引入缓存,但是忽视了缓存命中率、数据一致性、热点key等问题。 面对马上就要到来的双十一的秒杀环节,你是否已经有备无患…

[附源码]Node.js计算机毕业设计高校第二课堂管理系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

数据结构为何重要(《数据结构与算法图解》by 杰伊•温格罗)

本文内容借鉴一本我非常喜欢的书——《数据结构与算法图解》。学习之余,我决定把这本书精彩的部分摘录出来与大家分享。 基础数据结构:数组 数组是计算机科学中最基本的数据结构之一。如果你用过数组,那么应该知道它就是一个含有 数据的列表…

免费U盘文件恢复,你不知道的10款u盘恢复软件

U盘是我们在工作和生活中经常使用的移动存储设备。在操作U盘时,里面重要的文件可能会因为疏忽而被删除。通过电脑回收站、备份等方法都不能恢复U盘里面的数据,我们该怎么办?其实U盘删除的文件在删除后不会被完全删除,通过u盘恢复软…

以太网 STP、RSTP、MSTP基础配置、STP生成树安全保障操作命令介绍

2.13.0 以太网 STP、RSTP、MSTP配置、生成树安全保障操作 主要参考:华为S2750, S5700, S6700 V200R005(C00&C01&C02&C03) 产品文档 《命令手册》 MSTP快速生成树STP配置RSTP配置MSTP配置生成树的安全保障操作(1)根桥保护&#xf…

jdk1.8下载与安装教程(win11)

一、JDK下载 1.首先在Oracle官网上下载jdk1.8 打开官网:https://www.oracle.com/ 2.选择Developer Services的Java 3.选择Oracle JDK 4.选择Java8 Window点击: jdk-8u351-windows-x64.exe下载 5.接受Oracle Java SE的Oracle技术网络许可协议 …

Folate-PEG-DBCO,DBCO-PEG- FA,叶酸聚乙二醇环辛炔

●中文名:叶酸聚乙二醇环辛炔,叶酸聚乙二醇二苯基环辛炔,DBCO-PEG-叶酸 ●英文名:FA-PEG-DBCO , Folate-PEG-DBCO,DBCO-PEG- FA,DBCO-PEG-Folate,DBCO-PEG- Folic acid ●外观以及…

游戏合作伙伴专题:BreederDAO 与 SuperGaming 建立 SuperCharged 合作伙伴关系

BreederDAO 很高兴地宣布与 SuperGaming 建立合作伙伴关系,SuperGaming 是一家充满激情的游戏工作室,希望通过 Tower Conquest:Metaverse Edition 进军 Web 3 行业,这是一款基于 Polygon 区块链的免费多人塔防游戏。 征服新领域 S…

产品设计学习过程中的技术和方法

在产品设计的过程中,当你心中有创意设计时,你需要写下这个创意设计,并生成一个例子标记,以便总结你以前的想法。此时,你需要设计性能。在设计性能的过程中,我们需要使用各种设计工具,这些设计工…

自定义Springboot Starter

1.创建一个父项目&#xff1a; demo 1.1 项目结构&#xff1a; 1.2 pom文件内容&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/X…