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

VMware替换关键技术:核心业务系统中,访存密集型应用的性能优化

越来越多用户采用虚拟化、超融合以及云平台环境来承载其核心业务,核心业务的高并发对性能的要求尤为严格,在VMware替换的热潮下,原VMware用户也更为关注新平台在核心业务上的性能表现是否对标,或实现超越。深信服将通过系列解析,为大家从不同维度分享提升平台性能的关键技术。

在当前用户的核心业务系统中,访存密集型应用越来越多,如金融行业的高频交易系统、风险管理系统;医疗行业的电子健康记录(EHR)系统、物流行业的仓库管理系统等。这些系统对于访存要求的提升,与其后端使用了很多如分布式缓存Redis、大数据处理引擎Spark,分析型数据库HANA、AI引擎/模型等服务组件有很大关系。以Redis为例,其为内存型数据库,内存访问速度会直接影响其性能表现。

NUMA作为当前主流的服务器CPU架构,在NUMA架构下,如何提升访存速度是虚拟化性能优化的重要课题之一。本文将详细解析深信服在NUMA架构优化方面的技术,展示如何通过这些技术提升虚拟化平台的性能,满足用户核心业务高并发运行的要求,以及在VMware替代过程中的性能需求。

NUMA架构背景

在早期的计算机系统中,通常只有一个处理器用于执行所有的计算任务。然而,随着计算机应用的复杂性和需求的增加,单个处理器无法满足高性能计算的要求,计算机系统逐渐向多核架构演进。

传统的多核方案采用的是SMP (Symmetric Multi-Processing) 技术,即对称多处理器结构。在SMP架构下,每个处理器的地位都是平等的,对内存的使用权限也相同。任何一个线程都可以分配到任何一个处理器上运行,在操作系统的支持下,可以达到非常好的负载均衡,让整个系统的性能、吞吐量有较大提升。但是,由于多个核使用相同的总线访问内存,随着核数的增长,总线将成为瓶颈,制约系统的扩展性和性能。

在这里插入图片描述
NUMA架构可以很好地解决SMP架构的内存访问瓶颈问题。在NUMA架构中,系统被划分为多个节点,每个节点包含一个或多个处理器、本地内存和I/O设备。节点之间通过高速互连网络进行通信,如HyperTransport (AMD) 或QuickPath Interconnect (Intel) 等,使处理器优先访问本地内存,降低内存访问延迟,提高了多处理器系统的性能。

在这里插入图片描述
在NUMA中有三种节点类型:

  • 本地节点:对于某个节点中的所有CPU,此节点称为本地节点。
  • 邻居节点:与本地节点相邻的节点称为邻居节点。
  • 远端节点:非本地节点或邻居节点的节点,称为远端节点。

CPU访问不同类型节点内存的速度是不相同的,访问本地节点的速度最快,访问远端节点的速度最慢,即访问速度与节点的距离有关,距离越远访问速度越慢。

Christoph Lameter博士在《NUMA: An Overview》一文中指出:2013年,高端商用服务器有两个NUMA节点,本地节点的随机内存访问时延为100ns左右,远端节点的内存访问时延需要增加50%。

NUMA引入挑战

在linux系统中,线程作为CPU调度的基本单位,对应CPU运行队列上的一个任务。内核会为每个任务选择一个相对空闲的CPU,但CPU的负载是动态的,内核实现了CPU的Load Balance机制,会往相对空闲的CPU上迁移任务。也就是说,默认情况下,任务可能在不同的CPU之间迁移。

在NUMA架构下,任务可能从Node 1上的CPU迁移到Node 2上的CPU,任务访问之前Node1上的内存数据,会造成跨节点CPU访问。虽然linux内核提供了NUMA Balance机制,周期性的迁移任务或者内存数据到本地节点,尽可能地让任务访问本地节点的内存,但无法100%避免远端内存的访问。

在虚拟化场景下,一个虚拟机的vCPU对应操作系统上一个线程(如下图),多个vCPU线程运行在不同NUMA节点上共享内存,或者vCPU线程在不同NUMA节点之间迁移,都会导致虚拟机跨NUMA节点访问,内存访问延迟增加。

在这里插入图片描述

业界NUMA调度技术机制

针对NUMA特性,业界主要有以下几种常见方案:

方案1:vCPU绑定物理核
需要手动设置vCPU绑定,vm资源优先绑定在物理机的同一个NUMA Node上。

方案2:指定虚拟机绑定的NUMA节点数量
手动配置绑定的NUMA节点数,会将vCPU和内存平均分配到相应数量的NUMA节点上。

方案3:自适应分配NUMA节点
调度程序会为虚拟机自动分配NUMA节点,虚拟机的CPU会被限制在NUMA节点上运行,优先使用本地内存,提高内存局部性。虚拟机的vCPU个数可能超过NUMA节点核的数量,单个NUMA节点无法容纳,会被分配到多个NUMA节点。为了提高内存局部性,支持将NUMA拓扑暴露给虚拟机,由虚拟机做最佳决策。同时在NUMA节点间迁移云主机,保证节点间的Load Balance。

从使用上看,方案1、2限制较多,使用上不是很方便,对VM的CPU数量有要求,并且静态绑定可能导致NUMA节点间负载不均衡。因此,方案3比较常见。

深信服NUMA调度技术详解

深信服超融合主要采用自适应的NUMA调度,自适应NUMA调度能够做到NUMA之间的负载均衡,同时减少vCPU远程内存访问,提升整体的性能。

自适应的NUMA调度在不同类型应用中优化效果明显,特别对于一些内存操作的中间件。我们在虚拟机中分别部署DM8(达梦数据库)、Redis和memcache,分别在开启和关闭NUMA调度的场景下执行基准测试。从测试数据看,开启NUMA调度后,中间件性能明显提升。

在这里插入图片描述
BenchmarkSQL是一个关系型数据库的基准测试工具,通过对数据库进行 TPC-C 标准测试,即模拟多种事务处理:新订单、支付操作、订单状态查询、发货、库存状态查询等,从而获得最终的tpmC值。tmpC表示每分钟可以处理多少个新订单,值越大代表性能越好。通过BechmarkSQL V5.0来对达梦数据库dm8运行基准测试。

下图表示启用NUMA调度对应用的相对性能改进,Y轴的100%表示关闭NUMA调度测出来的tmpC指标权重。

在这里插入图片描述
redis-benchmark是Redis官方提供的性能测试工具,我们通过redis-benchmark 对Redis V7.2.5进行压测,在关闭/开启NUMA调度场景下,分别测试SET/GET长度为1KB的value的QPS指标。QPS表示每秒的读写操作数。

测试命令及参数:
redis-benchmark -t get -d 16 -c 100 -n 6000000 -r 60000000
redis-benchmark -t set -d 16 -c 100 -n 6000000 -r 60000000

下图表示启用NUMA调度对应用的相对性能改进,Y轴的100%表示关闭NUMA调度测出来的QPS指标权重。

在这里插入图片描述
memaslap是Memcache自带的性能测试工具,我们通过memaslap对Memcache V6.27压测,在关闭/开启NUMA调度场景下,分别测试value长度为1kb的TPS值。TPS表示每秒事务数。

测试命令及参数:
memaslap -s 127.0.0.1:11211 -t 300s -T 8

下图表示启用NUMA调度对应用的相对性能改进,Y轴的100%表示关闭NUMA调度测出来的TPS指标权重。
在这里插入图片描述
从上面的测试数据看,对于访存密集型应用优化效果比较明显。以下为具体实现原理。

自适应分配NUMA节点

自适应地将虚拟机的vCPU进行划分后调度到NUMA节点,减少虚拟机vCPU远程内存访问。如图,自动为虚拟机选择合适的NUMA节点,当虚拟机vCPU数量小于NUMA Node的核数时,则将调度到一个NUMA节点上。当虚拟机vCPU数量大于NUMA 节点的核数时,则将调度到多个NUMA Node上,同时会将vNUMA拓扑暴露给虚拟机,由虚拟机做出最佳决策。

在这里插入图片描述
为了保证NUMA节点的负载均衡,在放置虚拟机时,会考虑NUMA节点间的负载情况,选择一个负载较低的节点。同时,在虚拟机运行过程中,结合NUMA节点负载,会对虚拟机在NUMA节点之间进行迁移。优先保障重要虚拟机所在NUMA节点负载更低,能够避免CPU、内存带宽以及Cache资源的相互抢占。

信创场景优化

信创服务器NUMA节点多,NUMA间的距离也不一致,NUMA节点的核数也相对较少。
在这里插入图片描述
针对信创服务器的NUMA特点,我们会识别NUMA节点之间的距离,优先将同一个虚拟机多个vNUMA放置到相近的pNUMA上。

为了进一步在信创场景下提高数据转发性能,深信服为底层虚拟化设计开发NUMA亲和性功能,即对虚拟机和数据转发进程进行强关联,调度到同一个NUMA节点上,使用本地内存访问,提高数据转发的性能。如图,DP为数据转发进程。

在这里插入图片描述
为了最大程度发挥NUMA的优势,在存储层面将一条完整IO上的vCPU、qemu、libnfs、aSAN等进程调度到同一个NUMA Node(如下图),避免内存远端数据访问,并使用大页内存机制提高访存性能,降低数据处理过程中的开销,提升IO流处理效率。

在这里插入图片描述
数据在从网卡缓存区传输到虚拟存储的过程中,需要经过各自的CPU线程进行处理。而随着网卡性能提升,单核CPU缓存转存的效率成为瓶颈,且跨NUMA的远端访问也会降低效率。让网卡可以被多个CPU进行处理,同时对其进行NUMA亲和,既打破了缓存转存的瓶颈,也可以降低传输延迟,更大程度地提升并发性能,提升虚拟机高深度大块写性能20%以上。

在这里插入图片描述

与业界方案的对比分析

行业支持情况:
H厂商支持在页面上配置虚拟机每个vCPU运行到哪个NUMA节点;S厂商不支持;VMware支持自适应NUMA调度。

深信服平台自适应将虚拟机的vCPU进行划分后放置到NUMA节点,减少虚拟机vCPU远程内存访问。相比页面配置每个vCPU运行位置,深信服自适应NUMA调度能够自动进行虚拟机vCPU的划分和放置,并且在NUMA之间进行均衡,减少vCPU远程内存访问,提升整体的性能。

相比VMware,深信服通过创新研究院和云产品线的合作研究,深度结合我们自己的业务场景以及平台服务情况,增加了存储服务的NUMA调度、重要虚拟机识别、信创场景适配、虚拟机网络亲和等,提升调度效果。

总结

深信服的NUMA自适应调度基于各场景做了深度适配优化,进一步提升应用的内存访问速度:

  • 自适应将虚拟机的vCPU进行划分后放置到NUMA节点,减少虚拟机vCPU远程内存访问。
  • 在不同的NUMA节点之间进行迁移,保障NUMA节点之间负载均衡。
  • 识别重要虚拟机,保障重要虚拟机所在NUMA节点负载更低,能够避免CPU、内存带宽以及Cache资源的相互抢占。
  • 针对信创服务器多NUMA且NUMA间距离不一样的场景,增加了识别NUMA节点之间的距离,优先将同一个虚拟机多个vNUMA放置到相近的pNUMA上。
  • 支持虚拟机网络亲和选项,勾选后将虚拟机调度到和网络数据面相同的NUMA节点,提高数据转发的性能。
  • 不仅对虚拟机进行NUMA调度,对存储服务也会进行相应的NUMA调度。

UnixBench测试实例

UnixBench是一个广泛使用的基准测试工具,用于评估类Unix系统(包括UNIX、BSD和Linux)的性能。它通过一系列测试来衡量系统的各种性能指标,如CPU、文件系统、内存和进程等。

测试环境说明:
在这里插入图片描述

在这里插入图片描述
测试结果:

在落地版本HCI 6.9.0中,我们能达到如下效果。在后续版本的优化中,我们仍持续保持该项技术效果的领先。

超融合启用NUMA时,UnixBench测试结果如下:
同主机六台虚拟机结果相较于S厂商高出20.2%,同主机八台虚拟机得分相较于S厂商高出34.17%。

在这里插入图片描述

相关文章:

VMware替换关键技术:核心业务系统中,访存密集型应用的性能优化

越来越多用户采用虚拟化、超融合以及云平台环境来承载其核心业务,核心业务的高并发对性能的要求尤为严格,在VMware替换的热潮下,原VMware用户也更为关注新平台在核心业务上的性能表现是否对标,或实现超越。深信服将通过系列解析&a…...

[单master节点k8s部署]20.监控系统构建(五)Alertmanager

prometheus将监控到的异常事件发送给Alertmanager,然后Alertmanager将报警信息发送到邮箱等设备。可以从下图看出,push alerts是由Prometheus发起的。 安装Alertmanager config文件 [rootmaster prometheus]# cat alertmanager-cm.yaml kind: ConfigMa…...

用MySQL+node+vue做一个学生信息管理系统(四):制作增加、删除、修改的组件和对应的路由

1.下载依赖: npm install vue-router 在src目录下新建一个文件夹router,在router文件夹下新建一个文件router.js文件,在component目录下新建增加删除和修改的组件,引入router.js当中 此时的init组件为主页面((二、三&…...

磁盘就是一个超大的Byte数组,操作系统是如何管理的?

磁盘在操作系统的维度看,就是一个“超大的Byte数组”。 那么操作系统是如何对这块“超大的Byte数组”做管理的呢? 我们知道在逻辑上,上帝说是用“文件”的概念来进行管理的。于是,便有了“文件系统”。那么,文件系统…...

14-28 剑和诗人2 - 高性能编程Bend和Mojo

介绍: 在不断发展的计算世界中,软件和硬件之间的界限变得越来越模糊。随着我们不断突破技术可能性的界限,对能够利用现代硬件功能的高效、可扩展的编程语言的需求从未如此迫切。 Bend和 Mojo是编程语言领域的两种新秀,它们有望弥…...

Stable Diffusion:最全详细图解

Stable Diffusion,作为一种革命性的图像生成模型,自发布以来便因其卓越的生成质量和高效的计算性能而受到广泛关注。不同于以往的生成模型,Stable Diffusion在生成图像的过程中,采用了独特的扩散过程,结合深度学习技术…...

Apache Seata分布式事务之Seata-Client原理及流程详解

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 前言 在分布式系统中,分布式事务是一个必须要解决的问题,目前使用较多…...

Linux wget报未找到命令

wget报未找到命令需要安装wget 1、下载wget安装文件,本次于华为云资源镜像下载 地址:https://mirrors.huaweicloud.com/centos-vault/7.8.2003/os/x86_64/Packages/ 2、下载后上传到安装服务器/install_package,执行命令安装 rpm -ivh /i…...

38条Web测试经验分享

1. 页面链接检查 每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。 LinkBotPro不支持中文,中文字符显示为乱码;HTML Link Validater只能测…...

TCP报文校验和(checksum)计算

一. 原理 将TCP相关内容&#xff08;TCP伪头部TCP头部TCP内容&#xff09;转换成16比特的字符&#xff0c;然后进行累加&#xff0c;最后结果进行取反。TCP伪头部是固定的&#xff0c;下文有相关代码展示。 二. 源码 源码 #include <stdio.h> #include <stdlib.h&…...

【ue5】虚幻5同时开多个项目

正常开ue5项目我是直接在桌面点击快捷方式进入 只会打开一个项目 如果再想打开一个项目需要进入epic 再点击启动就可以再开一个项目了...

【Python实战因果推断】23_倾向分3

目录 Propensity Score Matching Inverse Propensity Weighting Propensity Score Matching 另一种控制倾向得分的常用方法是匹配估计法。这种方法搜索具有相似可观测特征的单位对&#xff0c;并比较接受干预与未接受干预的单位的结果。如果您有数据科学背景&#xff0c;您可…...

Qt源码解析之QObject

省去大部分virtual和public方法后&#xff0c;Qobject主要剩下以下成员&#xff1a; //qobject.h class Q_CORE_EXPORT Qobject{Q_OBJECTQ_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged)Q_DECLARE_PRIVATE(QObject) public:Q_I…...

【算法专题】模拟算法题

模拟算法题往往不涉及复杂的数据结构或算法&#xff0c;而是侧重于对特定情景的代码实现&#xff0c;关键在于理解题目所描述的情境&#xff0c;并能够将其转化为代码逻辑。所以我们在处理这种类型的题目时&#xff0c;最好要现在演草纸上把情况理清楚&#xff0c;再动手编写代…...

分库分表真的适合你的系统吗?

曾几何时&#xff0c;“并发高就分库&#xff0c;数据大就分表”已经成了处理 MySQL 数据增长问题的圣经。 面试官喜欢问&#xff0c;博主喜欢写&#xff0c;候选人也喜欢背&#xff0c;似乎已经形成了一个闭环。 但你有没有思考过&#xff0c;分库分表真的适合你的系统吗&am…...

9 redis,memcached,nginx网络组件

课程目标: 1.网络模块要处理哪些事情 2.reactor是怎么处理这些事情的 3.reactor怎么封装 4.网络模块与业务逻辑的关系 5.怎么优化reactor? io函数 函数调用 都有两个作用:io检测 是否就绪 io操作 1. int clientfd = accept(listenfd, &addr, &len); 检测 全连接队列…...

【MySQL】事务四大特性以及实现原理

事务四大特性 原子性&#xff08;Atomicity&#xff09; 事务中的所有操作要么全部完成&#xff0c;要么全部不执行。如果事务中的任何一步失败&#xff0c;整个事务都会被回滚&#xff0c;以保持数据的完整性。 一致性&#xff08;Consistency&#xff09; 事务应确保数据库…...

【控制Android.bp的编译】

1.首先Android.bp的语法是不支持if 条件语句的 2.查到可以用enabled来控制Android.bp中的模块是否参与编译&#xff0c;但是并不能实现动态的控制&#xff0c;比如你需要根据获取到的安卓版本来控制一个Android.bp是否编译&#xff0c;是无法做到的。enabled只能是固定的true或…...

【车载开发系列】J-Link/JFlash 简介与驱动安装方法

【车载开发系列】J-Link/JFlash 简介与驱动安装方法 【车载开发系列】J-Link/JFlash 简介与驱动安装方法 【车载开发系列】J-Link/JFlash 简介与驱动安装方法一. 软件介绍二. 下载安装包二. 开始安装三. 确认安装四. J-Flash的使用 一. 软件介绍 J-Link是SEGGER公司为支持仿真…...

207 课程表

题目 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示如果要学习课程 ai 则 必须 先学习课程 bi 。 …...

罗剑锋的C++实战笔记学习(一):const、智能指针、lambda表达式

1、const 1&#xff09;、常量 const一般的用法就是修饰变量、引用、指针&#xff0c;修饰之后它们就变成了常量&#xff0c;需要注意的是const并未区分出编译期常量和运行期常量&#xff0c;并且const只保证了运行时不直接被修改 一般的情况&#xff0c;const放在左边&…...

宁德时代天行发布,商用车超充时代来临

近日&#xff0c;宁德时代正式推出商用动力电池品牌——“宁德时代天行”&#xff0c;同时发布“宁德时代天行轻型商用车&#xff08;L&#xff09;-超充版”和“宁德时代天行轻型商用车&#xff08;L&#xff09;-长续航版”两款产品&#xff0c;可实现4C超充能力和500km的实况…...

硅纪元应用评测 | 弱智吧大战GPT4o和Claude 3.5 Sonnet

"硅纪元AI应用测评"栏目&#xff0c;深入解析和评测最新的人工智能应用&#xff0c;提供专业见解和实用建议。不论您是AI专家还是科技爱好者&#xff0c;都能找到权威、详尽的测评&#xff0c;帮助您在快速发展的AI领域中做出最佳选择。一起探索AI的真实潜力&#xf…...

注意力机制 attention Transformer 笔记

动手学深度学习 这里写自定义目录标题 注意力加性注意力缩放点积注意力多头注意力自注意力Transformer 注意力 注意力汇聚的输出为值的加权和 查询的长度为q&#xff0c;键的长度为k&#xff0c;值的长度为v。 q ∈ 1 q , k ∈ 1 k , v ∈ R 1 v {\bf{q}} \in {^{1 \times…...

开始尝试从0写一个项目--后端(二)

实现学生管理 新增学生 接口设计 请求路径&#xff1a;/admin/student 请求方法&#xff1a;POST 请求参数&#xff1a;请求头&#xff1a;Headers&#xff1a;"Content-Type": "application/json" 请求体&#xff1a;Body&#xff1a; id 学生id …...

【图解大数据技术】Hive、HBase

【图解大数据技术】Hive、HBase Hive数据仓库Hive的执行流程Hive架构数据导入Hive HBaseHBase简介HBase架构HBase的列式存储HBase建表流程HBase数据写入流程HBase数据读取流程 Hive Hive是基于Hadoop的一个数据仓库工具&#xff0c;Hive的数据存储在HDFS上&#xff0c;底层基于…...

composables 目录下的文件(web前端)

composables 目录通常用于存放可组合的函数或逻辑&#xff0c;这些函数或逻辑可以在不同的组件中复用。具体来说&#xff0c;composables 目录下的文件通常包含以下内容&#xff1a; 组合式函数 (Composable Functions)&#xff1a; 这些函数利用 Vue 3 的组合式 API&#xff0…...

使用Python绘制堆积柱形图

使用Python绘制堆积柱形图 堆积柱形图效果代码 堆积柱形图 堆积柱形图&#xff08;Stacked Bar Chart&#xff09;是一种数据可视化图表&#xff0c;用于显示不同类别的数值在某一变量上的累积情况。每一个柱状条显示多个子类别的数值&#xff0c;子类别的数值在柱状条上堆积在…...

DP:二维费用背包问题

文章目录 &#x1f3b5;二维费用背包问题&#x1f3b6;引言&#x1f3b6;问题定义&#x1f3b6;动态规划思想&#x1f3b6;状态定义和状态转移方程&#x1f3b6;初始条件和边界情况 &#x1f3b5;例题&#x1f3b6;1.一和零&#x1f3b6;2.盈利计划 &#x1f3b5;总结 &#x1…...

C语言标准库中的函数

由于C语言标准库中的函数非常多&#xff0c;我将按类别列出一些常见函数及其作用。请注意&#xff0c;这里不可能列出所有函数&#xff0c;但我会尽量覆盖主要的类别和函数。 ### 标准输入输出 - printf: 格式化输出到标准输出&#xff08;通常是屏幕&#xff09;。 - scanf: …...

Qt5.9.9 关于界面拖动导致QModbusRTU(QModbusTCP没有测试过)离线的问题

问题锁定 参考网友的思路&#xff1a; Qt5.9 Modbus request timeout 0x5异常解决 网友认为是Qt的bug&#xff0c; 我也认同&#xff1b;网友认为可以更新模块&#xff0c; 我也认同&#xff0c; 我也编译了Qt5.15.0的code并成功安装到Qt5.9.9中进行使用&#xff0c;界面拖…...

API的定义理解

前言 在程序员的日常工作中&#xff0c;“API”这个词在程序员的口中重复的次数&#xff0c;绝对是名列前茅的。 但是对刚开始工作的新人来说&#xff0c;API这个概念还是比较模糊。 确实&#xff0c;API这个概念是随着语义环境而不一样的&#xff0c;所以会让人迷惑。 下面…...

启航IT之旅:高考假期预习指南

标题&#xff1a;启航IT之旅&#xff1a;高考假期预习指南 随着高考的落幕&#xff0c;许多有志于IT领域的学子们即将踏上新的学习旅程。这个假期&#xff0c;是他们探索IT世界的黄金时期。本文将为准IT新生们提供一份全面的预习指南&#xff0c;帮助他们为未来的学习和职业生…...

HarmonyOS开发:循环渲染ForEach

需求&#xff1a; 创建多个列表组件&#xff0c;并实现点赞功能 语言&#xff1a; ArkTS 平台&#xff1a; DevEco Studio ForEach 接口描述 ForEach( arr: Array, itemGenerator: (item: Object, index: number) > void, keyGenerator?: (item: Object, index: number) &…...

构建工程化:多种不同的工程体系如何编写MakeFile

源码分析 核心MakeFile 这个 Makefile 是一个复杂的构建脚本&#xff0c;用于管理和构建一个大型项目。它包括多个目标、条件判断和递归调用 make 命令来处理多个子项目和子目录。让我们逐部分进行详细解析。 伪目标和变量定义 .PHONY: all clean install build test init.…...

聚焦从业人员疏散逃生避险意识能力提升,推动生产经营单位每年至少组织开展(疏散逃生演练,让全体从业人员熟知逃生通道、安全出口及应急处置要求,形成常态化机制。

聚焦从业人员疏散逃生避险意识能力提升&#xff0c;推动生产经营单位每年至少组织开展(疏散逃生演练&#xff0c;让全体从业人员熟知逃生通道、安全出口及应急处置要求&#xff0c;形成常态化机制。完整试题答案查看 A.三次B.两次C.一次 综合运用“四不两直”、明察暗访、 ()、…...

【手机取证】如何使用360加固助手给apk加固

文章关键词&#xff1a;手机取证、电子数据取证、数据恢复 一、前言 APP加固是对APP代码逻辑的一种保护。原理是将应用文件进行某种形式的转换&#xff0c;包括不限于隐藏&#xff0c;混淆&#xff0c;加密等操作&#xff0c;进一步保护软件的利益不受损坏&#xff0c;下面给…...

Vue的介绍

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

MySql数据库常用指令合集

MySql数据库常用指令合集 一、创建数据库db11.创建表 字段---表头 student_no,username,sex2.新增单条插入多条插入3.删除4.更新5.查询5.1.查询该表全部信息5.2.查询该表中username&#xff0c;并且要求名字为zhangsan性别女&#xff0c;还可以用&#xff08;or&#xff09; 6.…...

ArcGIS Pro SDK (七)编辑 13 注解

ArcGIS Pro SDK &#xff08;七&#xff09;编辑 13 注解 文章目录 ArcGIS Pro SDK &#xff08;七&#xff09;编辑 13 注解1 注释构建工具2 以编程方式启动编辑批注3 更新批注文本4 修改批注形状5 修改批注文本图形6 接地到网格 环境&#xff1a;Visual Studio 2022 .NET6 …...

模拟面试001-Java开发工程师+简历+问题+回答

模拟面试001-Java开发工程师简历问题回答 目录 模拟面试001-Java开发工程师简历问题回答面试简历面试官题问求职者回答1. 关于Java编程和技术栈2. 关于XX在线购物平台项目3. 关于XX企业资源规划系统项目4. 团队协作与项目管理5. 个人发展与职业规划 参考资料 面试简历 **个人信…...

微信小程序 ——入门介绍及简单的小程序编写

目录 一、小程序入门 1.1 什么是小程序 1.2 小程序的优点 1.3 小程序注册 1.4 安装开发工具 1.5 创建第一个小程序 二、小程序目录结构及入门案例 2.1 目录结构 2.2 入门案例 2.2.1 创建界面 2.2.2 设置标题 2.2.3 编写WXML文件 2.2.4 编写JS文件 2.2.5 编写WXSS…...

ubuntu20.04安装lio-sam

1、依赖功能包安装 sudo apt install ros-noetic-robot-state-publisher sudo apt-get install ros-noetic-robot-localization libmetis-dev 2、boost版本 boost版本查看&#xff1a;cat /usr/include/boost/version.hpp | grep "BOOST_LIB_VERSION" boost版本为1.…...

Kafka系列之Kafka知识超强总结

一、Kafka简介 Kafka是什么 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff08;消息引擎系统&#xff09;&#xff0c;它可以处理消费者在网站中的所有动作流数据。 这种动作&#xff08;网页浏览&#xff0c; 搜索和其他用户的行动&#xff09;是在现代网络上的许多社…...

第32讲:K8S集群与Cephfs文件系统集成

文章目录 1.在K8S环境下RBD与Cephfs的使用对比2.Cephfs环境介绍3.在Ceph集群中为K8S创建单独Cephfs文件系统和认证用户3.1.创建一个K8S使用的Cephfs文件系统3.2.将创建的Cephfs文件系统挂载到本地路径3.3.创建K8S连接Ceph集群使用的认证用户 4.K8S PV存储卷使用Cephfs文件系统4…...

服务器数据恢复—DS5300存储raid5阵列数据恢复案例

服务器存储数据恢复环境&#xff1a; 某单位一台某品牌DS5300存储&#xff0c;1个机头4个扩展柜&#xff0c;50块硬盘组建2组RAID5磁盘阵列&#xff08;一组raid5阵列有27块成员盘&#xff0c;存放Oracle数据库文件&#xff1b;另外一组raid5阵列有23块成员盘&#xff09;。存储…...

使用Ubuntu 22.04安装Frappe-Bench【二】

系列文章目录 第一章 使用VMware创建Ubuntu 22.04【一】 文章目录 系列文章目录前言什么是Frappe-Bench&#xff1f;使用安装ERPNext能实现什么效果&#xff1f; 官网给了一个说明 一、使用Ubuntu 22.04安装Frappe-Bench一、安装要求二、安装命令三、 可能出现问题 总结 前言 …...

MySQL增删改查

1.创建数据库&#xff1a; 使用CREATE DATABASE语句 CREATE DATABASE school;show databases; 列出MySQL数据库管理系统的数据库列表 2.切换数据库&#xff1a; 使用USE语句选择要操作的数据库 USE school&#xff1b;select database (); 当前所在库mysql> select…...

Java跳出循环的四种方式

1、continue,break,return continue&#xff1a;跳出当前层循环的当前语句&#xff0c;执行当前层循环的下一条语句。   continue标签 break&#xff1a;跳出当前层循环。 break标签&#xff1a;多层循环时&#xff0c;跳到具体某层循环。 return&#xff1a;结束所有循环…...

直播预告|飞思实验室暑期公益培训7月10日正式开启,报名从速!

01 培训背景 很荣幸地向大家宣布&#xff1a;卓翼飞思实验室将于7月10日正式开启为期两个月的暑期公益培训&#xff01;本次培训为线上直播&#xff0c;由中南大学计算机学院特聘副教授&#xff0c;RflySim平台总研发负责人戴训华副教授主讲。 培训将基于“RflySim—智能无人…...