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

DPDK系列之三十一DPDK的并行机制简介

一、并行机制

什么是并行机制?这个很多开发者的眼中,其实是模糊的。可能说起来头头是道,但是细一查究竟,发现都是飘在空中的东西。在前面的“多核和多CPU编程”中,对并行机制已经进行了较深入的分析,这里只简单说明一下。
说起并行(parallelism),就不得不提并发(concurrent)。并发一般是指多线(进)程在一个执行单元上进行轮流执行(时间片),而并行指多线(进)程在多个执行单元上同时执行。大多数开发者一个最明显的谬误往往就在于把并发和并行混淆。当然,有的书籍中,把二者说的不太清楚,甚至从某个角度上有意无意的误导了学习者也是一个重要原因。之所以产生这个现象,一个最重要的原因在于大学课程中的操作系统和计算机原理为了更容易说明进程线程的机制,而简化了很多东西。这样,就导致很多开发者在一开始就把学习的知识想当然的扩展了,这在国外的教科书中就做的比较好(所以搞计算机,教科书尽量用国外的,技术尽量上国外的官网)。
另外一个就是在计算机普及的过程中,并发比并行更简单,实现成本更低。这也导致很多老的开发者,如果技术没有跟进,也会产生这种误解。起初的大型机和小型机上,多CPU的很正常,所以并行编程其实出现的很早。而并发编程,也就是现在开发者理解的多线(进)程(早期的多道程排除出去),其实比并行编程要出现的晚,就一如线程这个概念一样。
对并发和并行的表述很明白,但理解却不是这样简单,没有上面的说的那么清晰明白。因为很多实际的应用程序在现有的机器上执行时,并发和并行是同时存在的。所以可以形象的把并发和并行统一起来,即在应用者的眼中(前端)看来,都是并发,而是否并行,看底层(后端)执行单元(CPU或核心数量)来决定(这会不会是种误导?)。这个有点编译器发展的方向,前后端分离。
其实这也是一个计算机硬件进化的历史,从单核到多核的一个过程。现在主流的计算机,PC端一般是单CPU多核心为主,服务器以多CPU多核心为主。而其它异构的产品如手机等,更是细分了不同的执行和计算单元,从某种程度可以理解成多CPU多核心。而PC端随着GPU编程的发展,CPU和GPU协同工作其实也是一种并行的机制。
故而现在已经无法简单的把并发和并行严格区分出来。当然,实际上,大多数的PC端的应用程序仍然是以并发编程为主,这个是一时半会不会有太大的改变的。
需要注意的是:
上面虽然以多线(进)程为例说明,但一定要记清楚,这是任务分配(前端),到底决定是并行还是并发,还是看执行(后端)是同一执行单元还是多执行单元。另外不要混淆并行和并发混合(M:N:M个线程,N个执行单元,M>N这种情况)。
还有一个说明点,所谓异步和协程(Java21的虚拟线程这些都算)这些都是在以此为基础的另外一种抽象的应用,不要硬夹杂进来。

二、DPDK中的并行

明白了什么是并行机制后,现在看一下DPDK中是如何引入并行机制的。前面在“DPDK系列之五DPDK的线程模型”中已经初步对其进行了一个认识,这里开始进行一个较为全面的分析和介绍。
从宏观上来看,提高执行效率不外乎以下几点:
1、执行(计算等)单元的数量。从简单理论(不考虑竞态)上理解,越多越好(人多好干活嘛)。
2、线(进)程的调度。简单来说,没有调度这种理想状态效率最好(人多更要合理分工)。
3、动态的扩展性。即运行过程中动态的增减来达到效率的最高,否则一个单元执行足以应付,即有九十九个线程闲置也是低效,即达到线性的伸缩(人员需求动态可调配)。
而算法等的完善和优化(提高人员素质),这属于计算机提高效率的细节了或者说具体的业务范畴,这里暂时不做讨论。
在DPDK中应对上面的这些解决方式有:
1、支持多CPU和多核心,并进一步支持以此演进的NUMA。
现代的CPU一般可以有多个安装在一台服务器上,一个CPU上有多个Core,而一个Core又会有多个逻辑核心(超线程技术)。甚至从宏观上看,分布式的系统都可以看做一个大型的计算机,这个扯远了。扯回来,这样,通过多个CPU(含核心),可以最大限度保持非关联的并行度。而多个CPU又进一步衍生出NUMA,保证内存访问的安全和快捷,用来保持内存访问的效率。

2、支持线程亲和性和线程独占,这个有点类似于减少调度(尽量减少线程开销提高Cache命中率)。
多个核心就很容易保持着不相关的线程的并行执行,这其实就是干活的人多了,假如你做为一个包工头,如何保证这些多的人产生出更高的结果?那么最简单的一种办法,如果某个人擅长打字,你就让他专职打字,而不是打一会字就去搬砖。有些人有力气,你非要让他搬一会砖就去打字,除了让这两人感到痛苦,还会直线降低工作效率。这就是CPU的亲和性,这在NUMA的机器上非常重要。同样,亲和性只是让任务偏重于少调度而不是不调度。所以就又有线程独占,也就是绑定到CPU(核心)上,也就是说,这个核心不会再调度,只和绑定的线程快乐的玩耍。
当然,这些是有条件的,如果你的任务需要密集性的计算或者非常复杂和对实时性要求非常高等,才会要求这样做。这和大页内存的限制条件原理是类似的。举个例子,某人擅长打字,但打字的工作一天就一个小时,总不能余下的时间都让他歇着吧?

3、可扩展性
DPDK通过配置等手段可以实现对CPU核心数量的支持来实现计算的可扩展性,同样利用内存的管理实现内存的可扩展性操作,其它也是如此,特别是虚拟化的支持,其实已经从底层更好的支持了可扩展性。

之所以这样做,和整体任务计划中的局部性、减少互斥访问和避免多核调度以及锁的粒度尽量小(或者尽快通过临界区)是密不可分的。但即使如此,在实际的应用中,不可避免的会出现并行的并行控制问题。这其实又重新回到了一个数学概率的问题以及具体到某个场景的数学概率问题。

三、DPDK的应用

在DPDK中,在代码分析中可以知道其通过POSIX库创建线程的方式来Spawn线程并且通过上述的方式来绑定到具体的核心,来实现DPDK的高效率真通信的目标。它分为主从两类,分布在主从核心上。一般控制线程做为主线程,而数据线程做为从线程。
其实DPDK也是针对上面的几个方面进行了实现,只不过在逻辑上划分出来主从,来区分管理和业务,能够更好的满足实际的需求。

四、总结

DPDK的内存机制基本告一段落,那么高效的另外一个重点就是并行。以目前的计算机资源的使用来看,没有一个高效的并行框架基本上是无法达到榨干资源的可能的。就如资本一样,不浪费每一个资源,每一个资源的每一部分,是计算机开发者的终极目标。整体上要推进资源的技术进步,在无法短时间内实现技术进步的前提下,组合应用各种技术把对资源的利用达到极致,这就是计算机技术的宏观的目的。
DPDK就是这其中一个典型的代表,所以,这个并行的机制,就不得直面对待。

相关文章:

DPDK系列之三十一DPDK的并行机制简介

一、并行机制 什么是并行机制?这个很多开发者的眼中,其实是模糊的。可能说起来头头是道,但是细一查究竟,发现都是飘在空中的东西。在前面的“多核和多CPU编程”中,对并行机制已经进行了较深入的分析,这里只…...

【Java】复制数组的四种方式

1. System.arraycopy() 用来将一个数组的(一部分)内容复制到另一个数组里面去。 定义: void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);例: int[] arr1 { 1, 2, 3, 4, 5 }; int[] arr2 new…...

设计模式5、原型模式 Prototype

解释说明:使用原型实例指定待创建对象的类型,并且通过复制这个原型阿里创建型的对象 UML 结构图: 抽象原型(Prototype):规定了具体原型对象必须实现的clone()方法 具体原型(ConcretePrototype&…...

驱动挂载物理页代码示例

驱动挂载物理页代码示例 使用的实验环境为32位xp系统在101012分页模式下 此实验用于测试对分页模式的掌握程度 代码思路如下: 获取目标进程的cr3在目标进程中申请新的物理页拆分新申请的物理页的线性地址通过差分出的内容获取pte将pte写入到要挂载的线性地址的p…...

【新版】系统架构设计师 - 层次式架构设计理论与实践

个人总结,仅供参考,欢迎加好友一起讨论 文章目录 架构 - 层次式架构设计理论与实践考点摘要层次式体系结构概述表现层框架设计MVC模式MVP模式MVVM模式使用XML设计表现层表现层中UIP设计思想 中间层架构设计业务逻辑层工作流设计业务逻辑层设计 数据访问层…...

大数据Flink(九十):Lookup Join(维表 Join)

文章目录 Lookup Join(维表 Join) Lookup Join(维表 Join) Lookup Join 定义(支持 Batch\Streaming):Lookup Join 其实就是维表 Join,比如拿离线数仓来说,常常会有用户画像,设备画像等数据,而对应到实时数仓场景中,这种实时获取外部缓存的 Join 就叫做维表 Join。…...

Docker方式创建MySQL8的MGR集群

目录 一、MGR简述二、安装环境及要求2.1 系统版本2.2 网络要求 三、安装步骤3.1 创建容器3.2 创建用户3.3 安装插件3. 4 启动集群3.5 加入集群 四、查看集群查看 MGR 组成员列表查看 MGR 组成员拓扑信息 五、其他说明集群配置要求集群配置限制集群相关变量和状态 一、MGR简述 …...

问 ChatGPT 关于GPT的事情:扩展篇

一、GPT预训练有什么节省显存和算力的技巧吗?我如何拿四块A100完成175B模型的预训练? 对于GPT预训练,有一些技巧可以帮助节省显存和算力。以下是一些常用的技巧: 按批次截断:在较长的文本序列中,将其切割…...

Spring Boot 集成 MinIO 实现文件上传、下载和删除

MinIO 是一种开源的对象存储服务,它基于云原生架构构建,并提供了高性能、易于扩展和安全的存储解决方案。 一.安装和配置 MinIO 服务器 为了演示方便,本文采用Windows安装 1.在官方网站下载MinIO 安装文件,地址:ht…...

Polygon Miden交易模型:Actor模式 + ZKP => 并行 + 隐私

1. 引言 前序博客: Polygon Miden:扩展以太坊功能集的ZK-optimized rollupPolygon Miden zkRollup中的UTXO账户混合状态模型 Polygon Miden为: ZK-optimized rollup由客户端生成证明完善Polygon ZK系列解决方案,致力于成为网络…...

Java流的体系结构(二)

文章目录 一、对象流的使用1.概念2.序列化机制3.代码案例:序列化过程:将内存中的java对象保存到磁盘中或通过通络传输出去4.反序列化,将磁盘文件中的对象还原为内存中的一个java对象 二、RandomAccessFile的使用1.说明2.代码案例 提示&#x…...

python计算阶层

阶层(Factorial)是指从1到一个正整数n的所有整数相乘,即n! 1 2 3 … n。下面是Python代码计算阶层: def factorial(n):"""计算阶层:param n: 正整数:return: n的阶层"""if n 1 or n 0:retu…...

前端架构师之01_ES6_基础

1 初识ES6 简单来说,ECMAScript是JavaScript语言的国际标准,JavaScript是实现ECMAScript标准的脚本语言。 2011年,ECMA国际标准化组织在发布ECMAScript 5.1版本之后,就开始着手制定第6版规范。 存在的问题:这个版本…...

银行卡号识别

# 导入工具包 from imutils import contours import numpy as np import argparse import cv2 import myutils# 设置参数 # ap = argparse.ArgumentParser() # ap.add_argument("-i", "--image", required=True, # help="path to input image")…...

【Idea】idea、datagrip设置输入法

https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5 下载后解压并重命名为 jbr, 然后替换对应 ide…...

回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于RF-Adaboost随机森林结合…...

最小生成树 | 市政道路拓宽预算的优化 (Minimum Spanning Tree)

任务描述: 市政投资拓宽市区道路,本着执政为民,节省纳税人钱的目的,论证是否有必要对每一条路都施工拓宽? 这是一个连问带答的好问题。项目制学习可以上下半场,上半场头脑风暴节省投资的所有可行的思路&a…...

Java实现使用多线程,实现复制文件到另一个目录,起不一样的名字,创建100万个数据

目录 1 需求2 实现 1 需求 我现在有一个300MB 的文件,想要根据这个文件,创建100万个大小一样的,名称不一样,如何实现,如何比较快点实现 2 实现 1 先准备好这个文件 2 准备好目录 3 写代码 private static void crea…...

uni-app:canvas-图形实现1

效果 代码 <template><view><!-- 创建了一个宽度为300像素&#xff0c;高度为200像素的canvas元素。canvas-id属性被设置为"firstCanvas"&#xff0c;可以用来在JavaScript中获取该canvas元素的上下文对象。 --><canvas style"width:200p…...

【算法分析与设计】动态规划(下)

目录 一、最长公共子序列1.1 最长公共子序列的结构1.2 子问题的递归结构1.3 计算最优值1.4 举例说明1.5 算法的改进 二、最大子段和2.1 代码2.2 最大子段和问题的分治算法2.3 代码2.4 分治算法的时间复杂度2.5 最大子段和问题的动态规划算法 三、凸多边形最优三角剖分3.1 三角剖…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...