Hyper-V 性能加速之NUMA
SMP和NUMA
根据 CPU 访问内存中地址所需时间和距离我们可以将CPU和内存结构分为SMP(SMP,Symmetric Multi-Processor,也称之为一致内存访问UMA)、NUMA和MPP(Massive Parallel Processing)三种结构。而我们在虚拟化环境中常用的结构包括SMP和NUMA这两种。相对SMP(UMA)来说,NUMA具有更加好的扩展性。NUMA将CPU和相近的内存配对组成节点,在每个NUMA节点里,CPU都有本地内存,访问距离短,性能好。NUMA比SMP具有更好的扩展性,SMP使用共享内存控制器,所有的CPU使用共享内存总线访问内存,如图1所示。在CPU不多的时候,SMP可以很好地工作,但是一旦CPU的数量很大的时候,这些 CPU 既可能造成内存总线的压力,也可能发生CPU之间相互“争夺”对共享内存总线的访问。NUMA采用分组的形式,限制一个NUMA节点里面的CPU数量和内存大小,并使用缓存一致性内部连接总线将各个NUMA节点连接起来,如图2所示。在服务器CPU日益增多和虚拟化普及的时代,NUMA更能适应高密度虚拟化环境的要求。
图1 SMP内存和CPU对应关系
图2 NUMA内存和CPU对应关系
虚机NUMA 拓扑映射
那么虚机是否能用到NUMA的特性呢?从Windows Server2012开始,Hyper-V虚机可以映射虚拟的NUMA拓扑,在虚机配置了较多内存的时候,使用NUMA拓扑映射能保证分配给虚机的CPU只访问本地的内存,从而达到提升性能。Hyper-V为虚机提供虚拟NUMA节点,虚拟NUMA的拓扑结构及原理与物理机的NUMA拓扑及结构一致,虚拟CPU和虚机内存组合成虚拟NUMA节点,每个虚机的虚拟NUMA节点都映射到相关的物理CPU上,如图3所示。Hyper-V虚机能够感知物理机NUMA拓扑并在启用NUMA时进行默认映射,通常如果虚机虚拟CPU没有超过物理机单颗CPU的核数,那么通常只生成一个虚机NUMA节点。虽然我们可以进行自定义给虚机分配设置多个虚拟NUMA节点,但是跨NUMA节点的拓扑偏离了物理机的拓扑结构,会影响性能的提升速度,所以在一些高负载应用场景下不建议不经规划设置多个虚拟NUMA节点。
图3 虚拟NUMA拓扑映射
举个例子,物理机有两颗CPU,每颗CPU有20个逻辑核,因此该物理机一共有40个逻辑核和256GB内存,所以每个CPU逻辑核对应约6.4GB内存。每颗CPU和它临近的内存组成一个NUMA拓扑节点,因此物理机一共有两个NUMA节点,每个NUMA节点包含20个逻辑核和128GB内存,如果虚机启用NUMA映射,那么这个虚机的NUMA节点拓扑里包含最大的虚拟CPU数是20,内存数是128GB,如图4所示。
图4 虚机NUMA拓扑内存和CPU
虚拟NUMA也支持跨物理NUMA,如果单个虚拟NUMA超过了单个物理NUMA节点的CPU数量,可能会出现虚机NUMA拓扑和物理机NUMA拓扑出现偏离的情况,导致CPU访问远程内存的情况发生,如图5所示。因为远程内存的访问速度比本地内存访问速度慢,因此可能导致性能提升没有在NUMA拓扑内那么明显。
图5 跨物理NUMA
举个例子,给虚拟NUMA拓扑设置成最多10个虚拟CPU,那么依据当前的环境,按照NUMA拓扑的最大内存应该限制在64GB内存,如果虚机分配了10个CPU和超过64GB内存,则虚拟机必然要访问其NUMA节点之外的远程内存。同理,如果虚机的NUMA节点的CPU超过了物理机NUMA节点的CPU,这些CPU也将访问其他NUMA节点的远程内存。
要查看物理机的NUMA拓扑,可以在服务器系统的任务管理器查看,也可以使用PowerShell命令查看。在系统里打开任务管理器,再打开资源监视器,选择CPU选项卡后,可以查看到NUMA的节点数和每个节点的CPU使用情况,如图6所示。
图6 在任务管理器查看NUMA拓扑
使用PowerShell命令Get-VMHostMumaNode可以查看物理机的NUMA节点更加详细的信息,包括内存以及剩余内存,如下示例所示。
PS C:\> Get-VMhostNumaNode
NodeId | : 0 |
ProcessorsAvailability | : {0, 0, 0, 0...} |
MemoryAvailable | : 38459 |
MemoryTotal | : 131035 |
ComputerName | : Host01 |
NodeId | : 1 |
ProcessorsAvailability | : {0, 0, 0, 0...} |
MemoryAvailable | : 38470 |
MemoryTotal | : 131072 |
ComputerName | : Host01 |
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
希尔堆快排
1、希尔排序 (1)、算法思想:希尔排序是插入排序的改良算法,增加了一个步长step,每次插入排序使步长为step的元素形成一个递增序列,然后缩小增量,继续插入,直至step=1时,就是插入排序了,此时排序完成; 算法模型: (2)、代码实现 #include<stdio.h> voidinsertSort(int*a,intcount,intstep); voidshowArray(int*a,intcount); voidshellSort(int*a,intcount); voidshellSort(int*a,intcount){ intstep; for(step=count/2;step>0;step/=2){ insertSort(a,count,step); } } voidshowArray(int*a,intcount){ inti; for(i=0;i<count;i++){ printf("%d",a[i]); } printf("\n"); } //以下就是插入排序了,思想完全一样,只不过步长为step而已!!! voidins...
- 下一篇
网站前端_EasyUI.基础入门.0008.带你玩转jQuery EasyUI Layout组件?
简单介绍: 说明: ($.fn.layout)布局,依赖panel和resizable,默认分为5个区东east,西west,南south,北north,中center,中间的区域面板是必须的,边缘区域面板是可选的,每个边缘区域面板可通过拖拽边框调整尺寸,也可以通过点击折叠触发器来折叠面板.布局可嵌套,因此用户可建立复杂的布局. 基础用法: <divid="l"class="easyui-layout"> <divdata-options="region:'east',width:100,title:'easttitle'"></div> <divdata-options="region:'west',width:200,title:'westtitle'"></div> <divdata-options="region:'south',width:100,height:100,title:'southtitle'"></div> <divdata-options="region:'north',...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2配置默认Tomcat设置,开启更多高级功能