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

news2024/11/26 3:30:51

越来越多用户采用虚拟化、超融合以及云平台环境来承载其核心业务,核心业务的高并发对性能的要求尤为严格,在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%。

在这里插入图片描述

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

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

相关文章

python语句前面有一个$是什么意思

“$”是汇编语言中的一个预定义符号,等价于当前正汇编到的段的当前偏移值。例如:指令“jmp $3”中的“$”表示当前这条指令在代码段中的偏移量。 代表当前指令的地址,如: data segment str1 db a,b,c,d leng equ $-str 就是当前地…

氛围共处(Ambient Co-presence)丨RTE 共读计划

在同一个网络空间和情境下,营造一种微妙的、隐约感知的、实时同步的感觉。 加入「RTE 共读计划」: 重要的技术,往往是那些不易察觉却无所不在的技术。欢迎阅读「RTE 共读计划」的文章,我们希望通过本计划: • 挖掘到…

JS+CSS+HTML项目-中国国家图书馆

页面做的不多,CSS效果请看哔哩哔哩

谷歌地图Google JS API 实现

demo实现 实现源码&#x1f447; // 谷歌地图Google JS API 实现 <template><div class"myMap"><gmp-map :center"center" zoom"15" map-id"ab6b6643adfa1a70"><gmp-advanced-markerv-for"(res, index) in…

通信安全员考试精选练习题库,2024年备考必刷题!

16.设计单位必须在设计文件中&#xff08;&#xff09;计列安全生产费。 A.全额 B.部分 C.按建设单位要求 D.按工程建设需要 答案&#xff1a;A 17.日最高气温达到&#xff08;&#xff09;℃以上&#xff0c;应当停止当日室外露天作业。 A.38 B.36 C.35 D.40 答案&…

CUDA编程基础

文章目录 1、GPU介绍2、CUDA程序进行编译3、CUDA线程模型3.1、一维网格一维线程块3.2、二维网格二维线程块3.3、三维网格三维线程块3.3、不同组合形式 4、nvcc编译流程5、CUDA程序基本架构6、错误检测函数6.1、运行时API错误代码6.2、检查核函数 7、CUDA记时7.1、记时代码7.2、…

ret2syscall简单总结

主要是自己的简单的学习总结。 知识点 关于系统调用如何传递参数问题&#xff0c;即系统调用约定&#xff08;syscall&#xff0c;int 80h&#xff0c;svc&#xff09;_int 80h intel汇编用法-CSDN博客 ret2syscall的做题思路&#xff08;以32位程序为例&#xff09; - ZikH…

如何从腾讯云迁移到AWS

随着跨境出海潮不断扩大&#xff0c;企业越来越意识到将工作负载迁移到海外节点的必要性&#xff0c;以获取更多功能、灵活性和性能。然而&#xff0c;顺利迁移业务主机并确保业务稳定访问是一项具有挑战性的任务。在此挑战中&#xff0c;借助AWS迁移工具和迁移流程的强大支持&…

一文了解常见DNS结构

很多企业忽略DNS这个关键的组件&#xff0c;而当DNS出现问题是&#xff0c;就会导致网站无法访问、电子邮件无法发送和接收&#xff0c;从而影响到企业的正常运行。而网络团队成员如果想要处理DNS问题就必须对所在网络的DNS架构有一定的理解。 主DNS服务器&#xff1a; 主DNS服…

微信开放能力 微信小程序获取微信头像、昵称、转发功能、分享到朋友圈、手机号验证组件、客服功能等

一、获取微信头像 当小程序需要让用户完善个人资料时&#xff0c;我们可以通过提供的头像、昵称填写能力快速完善示例 在 wxml 文件中 <view><button class"btn" open-type"chooseAvatar" bindchooseavatar"chooseAvatar"><im…

深度报告 | 百度安全携手极越安全发布《整车安全渗透测试白皮书》

注重点&#xff0c;如何确保车辆全生命周期的安全已成为整个行业亟待解决的问题。对于车企而言&#xff0c;通过渗透测试尽量多地发现安全威胁&#xff0c;是确保车辆信息系统的稳定运行、保障用户安全驾驶至关重要的措施。然而&#xff0c;传统的渗透测试方法已无法满足智能网…

谈大语言模型动态思维流程编排

尽管大语言模型已经呈现出了强大的威力&#xff0c;但是如何让它完美地完成一个大的问题&#xff0c;仍然是一个巨大的挑战。 需要精心地给予大模型许多的提示&#xff08;Prompt&#xff09;。对于一个复杂的应用场景&#xff0c;编写一套完整的&#xff0c;准确无误的提示&am…

Ubuntu 24.04 上安装 Kubernetes,超级详细的教程!

Kubernetes 是一个免费的开源容器编排工具&#xff0c;它允许基于容器的应用程序的自动化部署、扩展和管理。 我们将介绍如何使用 Kubeadm 逐步在 Ubuntu 24.04 上安装 Kubernetes 此次演示中&#xff0c;我们将使用以下三个 Ubuntu 24.04 实例 Instance 1 : Master Node (k…

【Mathematica14.0】快速从下载安装到使用

目录 1.简介 2.下载安装 下载 安装 3.一小时掌握mathematica使用 单元模式 内置函数 符号表达式 迭代器 赋值 通配符及查找替换 函数定义 匿名函数&#xff08;拉姆达表达式&#xff09; 函数映射 函数式与运算符 函数自定义选项 图形可视化 交互式界面 数值…

window系统openssl开发环境搭建(VS2017)

window系统openssl开发环境搭建 VS2017 一、下载openssl二、安装openssl三、openssl项目配置3.1 配置include文件3.2 配置openssl动态库四、编写openssl测试代码五、问题总结5.1 问题 一5.2 问题二一、下载openssl https://slproweb.com/products/Win32OpenSSL.html 根据自己…

本迪戈和阿德莱德银行与MongoDB合作, 利用生成式AI对银行核心技术进行现代化改造

MongoDB公司&#xff08;纳斯达克股票代码&#xff1a;MDB&#xff09;近日宣布与本迪戈和阿德莱德银行 (Bendigo and Adelaide Bank&#xff0c;澳大利亚证券交易所股票代码&#xff1a;BEN&#xff09;建立合作伙伴关系。 本迪戈和阿德莱德银行将使用MongoDB Atlas对其银行核…

自闭症孩子的语言之旅:最晚几岁会说话的探索与思考

作为在自闭症学校工作的教育者&#xff0c;我深知自闭症这一神经发展性障碍给孩子们带来的挑战&#xff0c;尤其是他们在语言发展方面的困难。自闭症孩子的语言发展轨迹各不相同&#xff0c;有的孩子可能早早地展现出语言天赋&#xff0c;而有的孩子则可能迟迟不开口。那么&…

Windows搭建本地对象存储服务MinIO并且使用springboot整合

开发文档&#xff1a; MinIO Windows中文文档 MinIO Object Storage for Windows &#xff08;英文文档&#xff09; 1、准备工作 准备一个空的文件夹&#xff0c;用来存放minio相关的内容&#xff1b; 这里是在D盘创建一个minio的文件夹&#xff1b; 后续所有跟MinIO相关…

【LLM】一、利用ollama本地部署大模型

目录 前言 一、Ollama 简介 1、什么是Ollama 2、特点&#xff1a; 二、Windows部署 1.下载 2.安装 3.测试安装 4.模型部署&#xff1a; 5.注意 三、 Docker部署 1.docker安装 2.ollama镜像拉取 3.ollama运行容器 4.模型部署&#xff1a; 5.注意&#xff1a; 总结 前言…

Ubuntu系统复制文件到共享文件夹出错

1、问题描述 Ubuntu系统复制文件到共享文件夹时&#xff0c;出现拼接文件时出错&#xff1a;输入/输出错误。 使用cp命令&#xff1a; cp -Rf XXX YYY 也是出错&#xff1a; cp: 写入 xxx 出错: 输入/输出错误 2、查看磁盘空间 查看磁盘空间&#xff0c;显示空间还有剩余…