原路径:http://www.sohu.com/a/126402403_609500

内容概要 今天的文章我们将简单学习下Hyper-V如何通过NUMA(Non-Uniform Memory Access)来对虚机内存访问进行加速。

SMP和NUMA

1

根据 CPU 访问内存中地址所需时间和距离我们可以将CPU和内存结构分为SMP(SMP,Symmetric Multi-Processor,也称之为一致内存访问UMA)、NUMA和MPP(Massive Parallel Processing)三种结构。,NUMA具有更加好的扩展性。NUMA将CPU和相近的内存配对组成节点,在每个NUMA节点里,CPU都有本地内存,访问距离短,性能好。NUMA比SMP具有更好的扩展性,SMP使用共享内存控制器,所有的CPU使用共享内存总线访问内存,如图1所示。在CPU不多的时候,,也可能发生CPU之间相互“争夺”对共享内存总线的访问。,如图2所示。在服务器CPU日益增多和虚拟化普及的时代,NUMA更能适应高密度虚拟化环境的要求。

图1

图2

虚拟机NUMA拓扑映射

2

那么虚机是否能用到NUMA的特性呢?从Windows Server 2012开始,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

举个例子,物理机有两颗CPU,每颗CPU有20个逻辑核,因此该物理机一共有40个逻辑核和256GB内存,所以每个CPU逻辑核对应约6.4GB内存。每颗CPU和它临近的内存组成一个NUMA拓扑节点,因此物理机一共有两个NUMA节点,每个NUMA节点包含20个逻辑核和128GB内存,如果虚机启用NUMA映射,那么这个虚机的NUMA节点拓扑里包含最大的虚拟CPU数是20,内存数是128GB,如图4所示。

图4

虚拟NUMA也支持跨物理NUMA,如果单个虚拟NUMA超过了单个物理NUMA节点的CPU数量,可能会出现虚机NUMA拓扑和物理机NUMA拓扑出现偏离的情况,导致CPU访问远程内存的情况发生,如图5所示。因为远程内存的访问速度比本地内存访问速度慢,因此可能导致性能提升没有在NUMA拓扑内那么明显。

图5

举个例子,给虚拟NUMA拓扑设置成最多10个虚拟CPU,那么依据当前的环境,按照NUMA拓扑的最大内存应该限制在64GB内存,如果虚机分配了10个CPU和超过64GB内存,则虚拟机必然要访问其NUMA节点之外的远程内存。同理,如果虚机的NUMA节点的CPU超过了物理机NUMA节点的CPU,这些CPU也将访问其他NUMA节点的远程内存。

要查看物理机的NUMA拓扑,可以在服务器系统的任务管理器查看,也可以使用PowerShell命令查看。在系统里打开任务管理器,再打开资源监视器,选择CPU选项卡后,可以查看到NUMA的节点数和每个节点的CPU使用情况,如图6所示。

图6

使用PowerShell命令Get-VMHostMumaNode可以查看物理机的NUMA节点更加详细的信息,包括内存以及剩余内存,如下示例所示。

 

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

作者介绍

黄利军老师特别授权华来四发表的作品,共有12篇,摘自其最新书作《软件定义数据中心技术与实践-Windows Server SDDC》,京东、当当等都有售。

Numa解释的更多相关文章

  1. Summarizing NUMA Scheduling两篇文章,解释得不错

    http://vxpertise.net/2012/06/summarizing-numa-scheduling/ Sitting on my sofa this morning watching S ...

  2. 解释一下numa

    NUMA : 非一致性存储 当多个处理器访问同一个存储器时,会有性能损失,NUMA通过提供分离的存储器给各个处理器. NUMA系统的结点通常是由一组CPU和本地内存组成,有的结点可能还有I/O子系统. ...

  3. NUMA架构的CPU -- 你真的用好了么?

    本文从NUMA的介绍引出常见的NUMA使用中的陷阱,继而讨论对于NUMA系统的优化方法和一些值得关注的方向. 文章欢迎转载,但转载时请保留本段文字,并置于文章的顶部 作者:卢钧轶(cenalulu) ...

  4. NUMA导致的Oracle性能问题

    背景简介: Oracle版本:11.2.0.4 OS 版本:OEL5.8 在一次Oracle的Dataguard正常switchover过程中,遇到了一个极其诡异的问题,一条主业务的SQL语句在新主库 ...

  5. 服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA)

    1. 3种系统架构与2种存储器共享方式 1.1 架构概述 从系统架构来看,目前的商用服务器大体可以分为三类 对称多处理器结构(SMP:Symmetric Multi-Processor) 非一致存储访 ...

  6. [转帖]NUMA架构的CPU -- 你真的用好了么?

    NUMA架构的CPU -- 你真的用好了么? 本文从NUMA的介绍引出常见的NUMA使用中的陷阱,继而讨论对于NUMA系统的优化方法和一些值得关注的方向. 文章欢迎转载,但转载时请保留本段文字,并置于 ...

  7. 【ZT】NUMA架构的CPU -- 你真的用好了么?

    本文从NUMA的介绍引出常见的NUMA使用中的陷阱,继而讨论对于NUMA系统的优化方法和一些值得关注的方向. 文章欢迎转载,但转载时请保留本段文字,并置于文章的顶部 作者:卢钧轶(cenalulu) ...

  8. 20160206.CCPP体系具体解释(0016天)

    代码片段(01):.指针.c+02.间接赋值.c 内容概要:内存 ///01.指针 #include <stdio.h> #include <stdlib.h> //01.取地 ...

  9. CLH lock queue的原理解释及Java实现

    目录 背景 原理解释 Java代码实现 定义QNode 定义Lock接口 定义CLHLock 使用场景 运行代码 代码输出 代码解释 CLHLock的加锁.释放锁过程 第一个使用CLHLock的线程自 ...

随机推荐

  1. 加傲腾内存的电脑PE无法识别本地磁盘解决办法(M.2接口??)

    ---恢复内容开始--- PE一直无法识别本地硬盘一直以为是主板设置的事情!原来是新兴的接口(M.2固态具体我不大明白)的事情,需要磁盘驱动,因为PE是精简的大多数不带驱动,但是2018年的新更新的P ...

  2. JuJu团队12月2号工作汇报

    JuJu团队12月2号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 于达 和婷婷一起调试main.jl 继续调试 金华实现的BiLSTM参数无法使用save存入 婷婷 和于达 ...

  3. Linus Torvalds正式宣布Linux Kernel 5.1RC2 发布,相当正常

    导读 Linus Torvalds刚刚发布了Linux Kernel 5.2-rc2,这是继上周关闭合并窗口和随后的RC1之后的第一个内核测试版本. 在本周合并后的窗口活动中,Linus评论道,“嘿, ...

  4. 从PC厂商狠抓粉丝经济看,春天将至?

    10月中旬,市场研究机构IDC发布的全球三季度PC出货量报告显示,第三季度全球个人电脑出货量总计6740万台,比去年同期下降0.9%.似乎这一数据的发布,依旧在证明着PC市场的颓势.但在这样的大背景下 ...

  5. js排序专场

    1,冒泡排序 function bubble(arr) { var len = arr.length - 1; for (let i = 0 ; i < len; i++) { var bool ...

  6. JavaWeb面试题(转)

    1.Tomcat的优化经验 答:去掉对web.xml的监视,把JSP提前编辑成Servlet:有富余物理内存的情况下,加大Tomcat使用的 JVM内存. 2.什么是Servlet? 答:可以从两个方 ...

  7. doc转docx

    # -*- coding: utf-8-*- import win32com from win32com.client import Dispatch w = win32com.client.Disp ...

  8. 洛谷 三月月赛 B

    搞出每一位与前一位的差,然后区间修改只是会影响区间的端点,所以只修改一下端点的值就好. %%%高一神犇线段树 #include<bits/stdc++.h> #define N 10000 ...

  9. JavaWeb开发校园二手平台项目 源码

    开发环境: Windows操作系统开发工具:MyEclipse/Eclipse + JDK+ Tomcat + MySQL 数据库 项目简介: JAVAWEB校园二手平台项目,基本功能包括:个人信息. ...

  10. Hive 数据类型 + Hive sql

    Hive 数据类型 + Hive sql 基本类型 整型 int tinyint (byte) smallint(short) bigint(long) 浮点型 float double 布尔 boo ...