云计算基础 -NUMA

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.mzph.cn/news/687221.shtml

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

相关文章

机器学习中的10种非线性降维技术对比总结

降维意味着我们在不丢失太多信息的情况下减少数据集中的特征数量,降维算法属于无监督学习的范畴,用未标记的数据训练算法。 尽管降维方法种类繁多,但它们都可以归为两大类:线性和非线性。 线性方法将数据从高维空间线性投影到低维空间(因此…

计算机设计大赛 深度学习YOLO抽烟行为检测 - python opencv

文章目录 1 前言1 课题背景2 实现效果3 Yolov5算法3.1 简介3.2 相关技术 4 数据集处理及实验5 部分核心代码6 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习YOLO抽烟行为检测 该项目较为新颖,适合作为竞赛课…

多线程---线程同步,线程通信

线程同步 1.概述 线程同步是多线程编程中的一个重要概念,它指的是在多线程环境中,通过一定的机制保证多个线程按照某种特定的方式正确、有序地执行。这主要是为了避免并发问题,如死锁、竞态条件、资源争用等,确保数据的一致性和完…

【复现】某公司指挥调度管理平台 RCE漏洞_51

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 该平台提供强大的指挥调度功能,可以实时监控和管理通信网络设备、维护人员和工作任务等。用户可以通过该平台发送指令…

视频生成模型作为世界模拟器

我们探索了在视频数据上大规模训练生成模型。具体来说,我们联合训练文本条件扩散模型,处理不同持续时间、分辨率和宽高比的视频和图像。我们利用一种在时空补丁上操作视频和图像潜码的transformer架构。我们最大的模型,Sora,能够生…

树状菜单(利用映射-bootstrap+jQuery实现折叠功能)

效果&#xff08;默认全部展开&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><…

CSS的background 背景图片自动适应元素大小,实现img的默认效果 background-size:100% 100%;

CSS的background 背景图片自动适应元素大小,实现img的默认效果 background-size:100% 100%; 关键是background-size:100% 100%; background-size:100% 100%; background-size:100% 100%; background-size:contain; 保持纵横比, 容器部分可能空白background-size:cover; 保…

解锁Spring Boot中的设计模式—02.解释器模式:探索【解释器模式】的奥秘与应用实践!

解释器模式 1.简介 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它用于定义语言的文法&#xff0c;并且解释语言中的表达式。在Java中&#xff0c;解释器模式可以用于构建解释器以解析特定的语言或表达式&#xff0c;如数学表达式、…

C++面试宝典第28题:寻找丢失的数字

题目 给定一个包含n个整数的数组nums,其中nums[i]在区间[1, n]内。请找出所有在[1, n]范围内,但没有出现在nums中的数字,并以数组的形式返回结果。 示例1: 输入:nums = [4, 3, 2, 7, 8, 2, 3, 1] 输出:[5, 6] 示例2: 输入:nums = [1, 1] 输出:[2] 解析 初看这道题,…

【lesson57】信号量和生产者消费者模型(环形队列版)

文章目录 信号量概念信号量接口初始化销毁等待发布 基于环形队列的生产者消费者模型编码Common.hLockGuard.hppTask.hppsem.hppRingQueue.hppConProd.cc 信号量概念 POSIX信号量和SystemV信号量作用相同&#xff0c;都是用于同步操作&#xff0c;达到无冲突的访问共享资源目的…

【测试】JUnit

目 录 一.注解二.断言三.用例的执行顺序四.参数化五.测试套件 自动化就是 selenium 脚本来实现的 junit 是 java 的单亓测试工具&#xff0c;只不过我们在实现自动化的时候需要借用一下下 junit 库里面提供的一些方法 引入依赖 Junit 5 <!-- https://mvnrepository.com/a…

自然语言编程系列(二):自然语言处理(NLP)、编程语言处理(PPL)和GitHub Copilot X

编程语言处理的核心是计算机如何理解和执行预定义的人工语言&#xff08;编程语言&#xff09;&#xff0c;而自然语言处理则是研究如何使计算机理解并生成非正式、多样化的自然语言。GPT-4.0作为自然语言处理技术的最新迭代&#xff0c;其编程语言处理能力相较于前代模型有了显…

电子元器件基础5---二极管

除了电阻、电容和电感等线性元器件之外,还有二极管、三极管这些常用的非线性器件广泛应用于日常生活中。那么今天我们来介绍以下二极管这一常用的电子元器件。 一、二极管概念 二极管是用半导体材料(硅、硒、锗等)制成的一种电子器件 。二极管有两个电极,正极,又叫阳极;负…

django报错:Cannot use ImageField because Pillow is not installed

1、问题概述 ERRORS: accounts.User.avatar: (fields.E210) Cannot use ImageField because Pillow is not installed. HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "python -m pip install Pillow". System check identified 1 …

JDK1.8安装教程

目录 下载安装环境配置打开系统高级设置环境配置 验证安装是否成功 下载 https://www.oracle.com/java/technologies/downloads/#java8-windows 安装 打开安装包&#xff0c;点击下一步。 选择好自己熟悉的目的安装目录&#xff0c;点击下一步。 等待安装 选择好jre的安装目…

ubuntu22.04@laptop OpenCV Get Started: 013_contour_detection

ubuntu22.04laptop OpenCV Get Started: 013_contour_detection 1. 源由2. 应用Demo2.1 C应用Demo2.2 Python应用Demo 3. contour_approx应用3.1 读取图像并将其转换为灰度格式3.2 应用二进制阈值过滤算法3.3 查找对象轮廓3.4 绘制对象轮廓3.5 效果3.6 CHAIN_APPROX_SIMPLE v.s…

java中的枚举

枚举 枚举类型的概述 关键字&#xff1a;enum 你可以把枚举类型理解成是一个自定义的常量的序列 枚举的语法结构 定义的枚举类型文件 package com.it.xiaosi.demo01;/*** Classname : direction* Description : TODO 枚举* Author : lin_refuelqq.com*/ public enum direct…

springboot第56集:微服务框架,物联网IOT,SQL数据库MySQL底层,AOP收集业务操作日志架构周刊...

单点登录 1.配置代理信息 /*请求登陆的方法*/ "/modelLogin": {//本地服务接口地址&#xff0c;这是测试环境&#xff0c;正式环境需要更改下地址target: "http://127.0.0.1:6776/xxx-auth/",changeOrigin: true,pathRewrite: {"^/modelLogin": …

在ubuntu中制作ubuntu的U盘启动盘

概要&#xff1a; 本篇演示在ubuntu22.04中制作ubuntu22.04的U盘启动盘 一、下载ubuntu22.04的iso文件 访问ubuntu官网https://ubuntu.com自行下载ubuntu官网 二、制作U盘启动盘 打开系统自带软件Startup Disk Creator 软件会自动检测iso文件和U盘 点击Make Startup Disk…

【Java EE初阶十二】网络原理(二)

2. 传输层 2.2 TCP协议 2.2.2 关于可靠传输 4.滑动窗口 前面的三个机制&#xff0c;都是在保证 tcp 的可靠性&#xff1b; TCP 的可靠传输,是会影响传输的效率的.(多出了一些等待 ack 的时间,单位时间内能传输的数据就少了)&#xff1b; 滑动窗口,就让可靠传输对性能的影响,更…