云计算基础 -NUMA

news2025/3/15 20:51:44

UMA

UMA中文翻译叫:一致性内存访问

多个CPU通过同一根前端总线(FSB)来访问内存(所有的内存访问都需要通过北桥芯片来完成),若多个CPU访问内存的不同内存单元还是相同内存单元,同一时刻,只有一个CPU能够访问内存

随着CPU内核越来越多,性能越来越强,现在已经有双路、四路的服务器,若是UMA架构的话,前端总线很容易造成瓶颈

NUMA

NUMA中文翻译:非一致性内存访问

NUMA解决了UMA架构所有CPU同时访问内存时FSB性能瓶颈的问题

在NUMA出现之前,所有的CPU Core都是通过共享一个北桥芯片来读取内存,随着CPU的发展,CPU频率越来越快,核心越来越多,北桥在响应时间上的性能瓶颈也越来越明显。

为了解决前端总线性能瓶颈的问题,于是出现了NUMA架构

在NUMA这种架构下,不同的内存器件和CPU核心从属不同的NODE(节点),每个NODE都有自己集成的内存控制器(IMC),在NUMA内部,使用IMC Bus进行不同核心间的通信,不同的Node间通过QPI(快速互联通道)进行通信

一般来说,一个内存插槽对应一个Node,需要注意的一个特点时,QPI的延迟要高于IMC Bus,也就是说,CPU访问内存有了远近之别

同一NUMA NODE内的内存访问叫本机访问,不同NODE访问叫远地访问

每一个CPU(节点)都有自己的PCIE设备(本地IO资源),和内存相似,远地访问PCIE设备相对访问本地PCIE设备存在延时

如下图,是超微某双路主板的逻辑图,可以看到,两颗CPU都有自己可以本地访问的内存,远地内存访问需要经过CPU之间的QPI通道,每颗CPU也有自己的PCIE设备等等

NUMA在云平台(虚拟机上)的应用

虚拟机NUMA就是把QEMU模拟出来的虚拟节点,绑定在某颗物理CPU上,对应的内存同样绑定在该CPU的本地内存,使其与物理架构相对应,在物理上也尽可能地使用CPU访问本地内存,这样我们就可以认为虚拟机能够识别服务器NUMA拓扑

具体优化方式如下

1. vCPU数如果比一颗物理CPU核数少,那么这个虚拟节点就会绑定在一颗物理CPU上

如:服务器双路,每颗物理CPU为8核8线程,创建一台虚拟机,虚拟机分配的vCPU是4颗,则这台虚拟机的虚拟节点就会绑定在CPU0或CPU1上

2. vCPU数如果比一颗物理CPU核数多,那么就会分开,然后绑定在多个物理CPU上

如:服务器双路,每颗物理CPU为8核8线程,创建一台虚拟机,虚拟机分配的vCPU是12颗,那么这个虚拟机的虚拟节点就会分开,分别绑在两颗物理CPU上

3. 如果单颗物理CPU超配或者内存不足(NUMA Node内的内存不足了)了那么就需要进行负载平衡,平衡过程中会进行CPU之间的负载均衡,这时会把虚拟节点迁移到另一颗物理CPU上进行绑定,并且对应的内存也需要跟着迁移,保证之前的本地内存还是本地内存。(导致NUMA资源碎片的原因:虚拟机开关机,新建删除虚拟机等)

如:一台服务器开启了10台虚拟机,有可能这10台虚拟机所使用的CPU和内存资源都是同一颗物理CPU提供的,此时该CPU若计算性能不足,或该CPU的本地内存占用过高,那么此时就需要将该CPU上的部分虚拟机移动到这台服务器上的另一颗CPU上去运行(同一台服务器CPU之间的负载均衡),即:将虚拟节点迁移到另一颗CPU上去绑定,并且对应的内存也需要跟着迁移,这样就能保证虚拟节点切换绑定之后,依旧可以访问本地内存,从而保证虚拟机性能

4. 通过优化调度算法,使虚拟节点的NUMA绑定都是保持性能最佳的状态

虚拟机如何拆为几个虚拟节点放置

对于虚拟机如何拆为几个虚拟节点放置(即:虚拟机要配置几个插槽),这里要考虑:

1. 虚拟机有几个虚拟节点:透传NUMA架构给虚拟机后,各个虚拟节点允许放到不同的物理节点上去(虚拟机内部自己可以感知)

物理NUMA架构与QEMU模拟出来的虚拟节点进行绑定,虚拟节点可以同时绑定在多颗CPU上

2. 虚拟机一个虚拟节点的vcpu个数是多少:对于每一个虚拟节点,那么还需要尽量放到最小范围的物理节点调用。

不能把物理CPU的节点数配置的过多,否则过多的调用会导致更多的性能开销

比如有一台4路服务器,每颗物理CPU的核心数为8核,此时需要新建一台vCPU数为12的虚拟机,此时该虚拟机最佳分配vCPU分配为2*6,以保证虚拟节点尽量放到最小的物理节点调用,不能分配为3*4或4*3,因为这样会把虚拟节点调度的范围变大了就会增加物理机的性能开销

如果物理CPU数大于12,vCPU分配应满足最小范围物理节点调用原则(最小插槽数),分配为1*12

注意:若需要透传NUMA拓扑给虚拟机,则该虚拟机需安装性能优化工具,且配置的CPU总核数大于8核(深信服HCI)

平衡

主要是如果一个物理节点的CPU或者内存超配的情况下就会考虑迁移平衡,平衡包括CPU平衡核内存的平衡,CPU平衡是通过cGroup来实现,但一个调度单元的vCPU线程迁移到另一个物理节点的时候,那么对应的内存也需要移动过来,保证之前的本地内存还是本地内存,这里通过内核接口实现内存迁移,迁移每256M物理内存需要2s(深信服)

NUMA的适用场景

1. 内存访问旺盛的业务,NUMA能大幅度提升性能,如果需要大量吃内存的数据库服务(Oracle、SQL、Server),编译服务等,内存访问频繁的场景,开启NUMA,计算性能提高7%~30%

2. CPU需求密集的小应用,开启NUMA会影响一些性能,虽然造成的损失不足以影响业务员,所以大部分应用无需考虑该问题(NUMA不适合应用频繁访问CPU的场景)

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

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

相关文章

跟着pink老师前端入门教程(JavaScript)-day03

四、数据类型 (一)数据类型简介 1、为什么需要数据类型 在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型。 …

SpringBoot+vue2联合打包部署,混合打包部署

SpringBootvue2联合部署,混合部署 前端工程和后端工程目前是都是相对独立性的模式进行开发的。 打包机 只拥有maven,没有nodejs 软件工程场景: 前后端工程在同一个父工程下面,作为一个子工程存在,各自独立开发。前…

Mysql知识点汇总

Mysql知识点汇总 1. Mysql基本场景的简单语句。2. Mysql的增删改查,统计表中的成绩最好的两个同学的名字,年级等。3:请使用多种方法查询每个学生的每门课分数>80的学生姓名4、order by,group by,子查询4.1、having和…

政安晨:【示例演绎】【Python】【Numpy数据处理】快速入门(一)

简介 NumPy是SciPy家族的成员之一。 SciPy家族是一个专门应用于数学、科学和工程领域的开源Python生态圈,或者说是一个由多个Python库组成的集合,用于解决科学计算中的各种问题。这些库构成了一个功能强大的科学计算工具箱,可以进行数值计算…

Paper - CombFold: predicting structures of large protein assemblies 论文简读

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/136143199 CombFold: predicting structures of large protein assemblies using a combinatorial assembly algorithm and AlphaFold2 CombFold…

【论文精读】DALL·E

摘要 本文利用从互联网上收集的2.5亿个图像/文本对数据,训练了一个120亿参数的自回归transformer,进而得到一个可以通过自然语言/图像控制生成的高保真图像生成模型。在大多数数据集上的表现超越以往的方法。 框架 本文的目标为通过训练一个自回归trans…

mysql调优实战

EXPLAIN执行分析 id:值越大越先执行相同时,由上向下执行。 possible_key: 可能走索引的键。 key:真正走索引的键rows:根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数,也就是说,用的越少越好 …

004 - Hugo, 分类

004 - Hugo, 分类content文件夹 004 - Hugo, 分类 content文件夹 ├─.obsidian ├─categories │ ├─Python │ └─Test ├─page │ ├─about │ ├─archives │ ├─links │ └─search └─post├─chinese-test├─emoji-support├─Git教程├─Hugo分类├─…

如何在CSS中实现背景图片的渐变?

--引言 在CSS中,实现背景图片的渐变通常需要使用linear-gradient或者radial-gradient函数,这些函数可以与背景图像一起使用来创建渐变效果。然而,CSS的渐变并不直接支持使用图像作为渐变的颜色停止点。但你可以通过一些技巧来实现类似的效果…

2024年【高处安装、维护、拆除】模拟考试题库及高处安装、维护、拆除实操考试视频

题库来源:安全生产模拟考试一点通公众号小程序 高处安装、维护、拆除模拟考试题库是安全生产模拟考试一点通生成的,高处安装、维护、拆除证模拟考试题库是根据高处安装、维护、拆除最新版教材汇编出高处安装、维护、拆除仿真模拟考试。2024年【高处安装…

得物面试:Redis用哈希槽,而不是一致性哈希,为什么?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: Redis为何用哈希槽而不用一致性哈希? 最近…

Prompt Tuning:深度解读一种新的微调范式

阅读该博客,您将系统地掌握如下知识点: 什么是预训练语言模型? 什么是prompt?为什么要引入prompt?相比传统fine-tuning有什么优势? 自20年底开始,prompt的发展历程,哪些经典的代表…

Sora时代,我们的AI应该何去何从?——关于Sora大模型的思考

Sora时代,我们的AI应该何去何从?——关于Sora大模型的思考 一、Sora大模型:横空出世,让AI生成所有领域瑟瑟发抖二、Sora的出现代表了相关行业的灭亡?三、我们将何去何从? 一、Sora大模型:横空出世&#xf…

计算机毕业设计SSM基于的高校学习资源共享系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: vue mybatis Maven mysql5.7或8.0等等组成,B…

C++ 多起点的bfs(五十九)【第六篇】

今天我们来学习多起点的bfs 1.多起点的bfs 在普通的广度优先搜索问题中,为了得到从初始状态到达目标状态的最小操作数,则将初始状态放入队列中。离初始状态由近及远地不断扩展出新的状态,直到搜索到目的状态,或队列为空&#xff…

使用Docker部署JDK镜像

构建镜像 我们将已经准备好的docker-demo.jar包以及Dockerfile拷贝到虚拟机的/root/demo目录: 然后,执行命令,构建镜像: # 直接指定Dockerfile目录 docker build -t docker-demo:1.0 /root/demo 查看镜像列表: # 查看…

神经网络算法原理

目录 得分函数 数学表示 计算方法 损失函数 ​编辑 前向传播 反向传播 ​编辑 整体架构 正则化的作用 数据预处理 ​过拟合解决方法 得分函数 得分函数是在机器学习和自然语言处理中常用的一种函数,用于评估模型对输入数据的预测结果的准确性或匹配程度。…

函数、极限、连续——刷题(5

目录 1.题目:2.解题思路和步骤:3.总结:小结: 1.题目: 2.解题思路和步骤: 首先可能想到的是答案为0,但是不可以把 直接化简为n 这里要用到分子分母的平方差,sin^2的周期为π&#x…

WebServer 之 http连接处理(下)

目录 ✊请求报文--解析 流程图 && 状态机 状态机 -- 状态转移图 主状态机 从状态机 http 报文解析 HTTP_CODE 含义 从状态机 逻辑 主状态机 逻辑 🐞请求报文--响应 基础API stat mmap iovec writev 流程图 HTTP_CODE 含义(2) 代码分析 …

及其详细的Markdown基础-学习笔记(附有使用案例)

Markdown 基础语法 查看更多学习笔记:GitHub:LoveEmiliaForever 标题创建 标题语法格式 在文字前添加一至六个#即可创建标题 标题是有等级的,具体等级根据#个数决定 由于标题等级参与构建整篇文章的架构,编写时应该遵循如下规…