查看单个NUMA节点的内存大小:

Hyper-V VM VID NUMA节点\PageCount:8376970
8376970*4k/1024/1024=32GB

Hyper-V VM VID NUMA节点\Processor Count:12 (该NUMA节点上共有12C,一个NUMA节点对应一颗物理CPU,一颗物理CPU的核心数即为NUMA节点的CPU核心数量)

  一个NUMA节点一共是8376970个分页,每个分页的大小是4KB,所以一个NUMA节点对应的是32GB内存,如果单个节点上的内存已经使用了20GB,再分配给另一个虚机20GB内存的话,由于该节点所剩内存为12GB,所以该虚机就要访问远程NUMA节点的内存,就会降低访问速度。为了避免该情况,应尽量避免虚机使用多个NUMA节点的资源,可以手动配置某个虚机属于哪个NUMA节点。

查看VM位于哪个NUMA节点:

Hyper-V VM VID Partition\Preferred NUMA Node Index\2003_1(VM实例名称)

参考:http://blogs.msdn.com/b/tvoellm/archive/2008/09/28/looking-for-that-last-once-of-performance_3f00_-then-try-affinitizing-your-vm-to-a-numa-node-.aspx

参考:http://www.dotblogs.com.tw/daniel07793/archive/2012/03/26/71046.aspx

=======================================

Hyper-v与NUMA介绍:

随着Windows server2012 的推出,微软主推的虚拟化重头hyper-V3.0着实令人惊艳:宿主机支持160个逻辑CPU(core)和2TB内存,虚拟机支持32个虚拟CPU以及1TB内存。还包括其中最令人心动的一项就是动态内存!这是怎么实现的呢?和Numa又有什么关系呢?

首先,什么是Numa(非统一内存访问)?NUMA结构就是指定固定大小的内存分配给一个指定的cpu序列,然后这样就形成一个节点NODE,整个框架是由几个Node结构组成的。我们也都知道cpu访问本地内存速度当然要远远快于访问远端Node内存速度。所以相当于对内存和cpu进行绑定划分。这就是所谓的NUMA结构了。NUMA结构主要还是关于并行计算的高效处理:让处理器快速的访问在同一单元的内存,摆脱了传统的超大总线对多处理结构的束缚。

这里简单的理解起来就是:一Cpu核心或多个(可以是一个Vcpu或者多个)负责一段内存(达到极高的寻址命中率),不再管其他的内存。这样cpu在工作时只会负责形成Node的这段内存,不再负责远端(其他)内存。(这样即使你有多核心的Cpu也不用纠结于前端总线的限制。)

NUMA是硬件设计的功能,划分为NUMA节点在物理服务器的CPU和内存。当一个进程使用内存和CPU在同一NUMA节点,性能会大大提高。当一个进程需要更多的内存,但当前NUMA节点是完整的,那么它会得到从另一个NUMA节点的内存,而在这个过程中的性能成本,是可能影响该物理服务器上所有其他进程。

(想要了解更深:现代CPU确定NUMA节点界限

http://www.benjaminathawes.com/blog/Lists/Posts/Post.aspx?ID=28  )

而Numa在这里来说最重要的用途是:提供内存互连的硬件系统,使新型动态的分区系统成为可能。系统分区的好处在于允许系统管理员在同一计算机内运行多个操作系统(如Unix和WindowsNT),并根据用户工作负荷的要求,在不同的操作系统环境间,简单的管理和使用CPU和内存资源,从而实现最佳的性能和最高的资源利用率。

那么hyper-v是怎么实现动态内存的?和这个Numa又是什么关系呢?先来看一张图片:

假设一台计算机使用Numa架构,Numa架构将这台计算机划分了四个节点,现在我们把一二节点拿出来创建Vm1  三四节点拿出来创建Vm2。这里我们这样指定,但是hyper-v他是如何知道呢?而不会把节点的边界搞乱呢?我们理解起来就是是内部规范的(http://blogs.technet.com/b/windowsserver/archive/2012/04/05/windows-server-8-beta-hyper-v-amp-scale-up-virtual-machines-part-1.aspx)!因此hyper-V在运行时我们可以认为,宿主机会将Numa创建的这些节点动态分配来实现,而且我们用过hyper-v的都知道,动态内存只是指定一个范围,这样就好理解多了!创建虚拟机时,划分这些节点,哪台虚拟机需要更多的内存时就通过分配节点实现!也是为了避免Numa节点过多造成性能下降,因为不能跨越NUMA边界!

当你的虚拟机迁移到不同规格的主机时,会发生什么情况?原来的配置要被保存。虚拟机正在运行。它会采取原来的NUMA节点规模到新的主机,并利用它们。隐藏在vCPU的设置,可以自定义虚拟机的NUMA节点,以适应最小的NUMA节点的主机。这意味着,不同规格的主机之间实时迁移,虚拟机将不能跨NUMA边界(远程运行一个CPU上的进程是在一个NUMA节点分配的RAM)。

FROM:http://blog.sina.com.cn/s/blog_68503a7d0101eg5b.html

Hyper-V虚机跨NUMA节点性能影响的更多相关文章

  1. GSO/TSO/GRO等对VirtIO虚机的网络性能影响分析(by quqi99)

    作者:张华  发表于:2016-04-05版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) IP层 ...

  2. OpenStack 企业私有云的若干需求(1):Nova 虚机支持 GPU

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  3. Neutron 理解(5):Neutron 是如何向 Nova 虚机分配固定IP地址的 (How Neutron Allocates Fixed IPs to Nova Instance)

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  4. KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain]

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  5. KVM(六)Nova 通过 libvirt 管理 QEMU/KVM 虚机

    1. Libvirt 在 OpenStack 架构中的位置 在 Nova Compute 节点上运行的 nova-compute 服务调用 Hypervisor API 去管理运行在该 Hypervi ...

  6. KVM 介绍(8):使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机 [Nova Libvirt QEMU/KVM Live Migration]

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  7. KVM(八)使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机

    1. QEMU/KVM 迁移的概念 迁移(migration)包括系统整体的迁移和某个工作负载的迁移.系统整理迁移,是将系统上所有软件包括操作系统完全复制到另一个物理机硬件机器上.虚拟化环境中的迁移, ...

  8. OpenStack企业私有云新需求(1):Nova 虚机支持 GPU

    作者:Sammy Liu 刘世民 本系列会介绍OpenStack 企业私有云的几个需求: GPU 支持 自动扩展(Auto-scaling)支持 混合云(Hybrid cloud)支持 物理机(Bar ...

  9. openstack网络(四)-虚机流量分析

    几种网络名词解释 使用LinuxBridge时虚机流量分析 VLAN FLAT Local VXLAN 使用OVS时虚机流量分析 几种网络名词解释 1.local网络:local网络是与其他网络和节点 ...

随机推荐

  1. C#读取Excel五种方式的体会

    原地址: http://blog.csdn.net/dapengbusi/article/details/38117817 http://blog.csdn.net/dapengbusi/articl ...

  2. JavaSE replaceAll 方法

    private String srcStr = "index\\.php\\?action=";//要替换的原字符串 private String destStr = " ...

  3. percona-xtrabackup安装及使用教程

    安装percona-xtrabackup依赖包(前提已安装mysql) yum -y install perl-CPAN perl-DBD-MySQL perl make gcc gcc-c++ pa ...

  4. Java从入门到精通(一)

    Java编程可以分为三个方向 ① Java se (j2se) 桌面开发 ② Java ee (j2ee) WEB开发 ③ Java me (j2me) 手机开发 java se 是基础中的基础 Ja ...

  5. 10. 将摄像机对准物体,并显示整个对准过程,摄像机Zoom

    1. 如果把代码放到按钮事件中调用,达不到想要的效果 2. 可以不用委托,但是要在Update函数中写调用CameraZoonIn的代码 3. 有很多需要改进的地方,可以参考使用 iTween 插件达 ...

  6. Application.EnableVisualStyles();

    Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false);  Application ...

  7. ☀【JS】检测属性

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  8. 对easyUI中课堂源码编辑改进建议

    在孙宇老师讲得Easyui第10讲完后,基本的增删该查做出来了,但是编辑存在一个问题:行内样式编辑修改,如果当用户没有修改数据,孙宇老师讲得时候直接return,这样做是不合理的:第二次再使用右键编辑 ...

  9. Mac 上Dock中添加“最近打开过的项目”(Recent Applications)

    有一个特别有用的Stack,“最近打开过的项目”,建立方法如下: 1. 打开Terminal,输入以下命令 defaults write com.apple.dock persistent-other ...

  10. (转载)PHP 下 CURL 通过 POST 提交表单失败的原因之一与解决办法

    (转载)http://blog.renren.com/share/246611432/7511385884 前几天在学习使用 CURL 时遇到一个问题:在 a.php 中以 POST 方式向 b.ph ...