Hyper-V虚机跨NUMA节点性能影响
查看单个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://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节点性能影响的更多相关文章
- GSO/TSO/GRO等对VirtIO虚机的网络性能影响分析(by quqi99)
作者:张华 发表于:2016-04-05版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) IP层 ...
- OpenStack 企业私有云的若干需求(1):Nova 虚机支持 GPU
本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...
- Neutron 理解(5):Neutron 是如何向 Nova 虚机分配固定IP地址的 (How Neutron Allocates Fixed IPs to Nova Instance)
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
- 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设备直接分 ...
- KVM(六)Nova 通过 libvirt 管理 QEMU/KVM 虚机
1. Libvirt 在 OpenStack 架构中的位置 在 Nova Compute 节点上运行的 nova-compute 服务调用 Hypervisor API 去管理运行在该 Hypervi ...
- 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设备直接分 ...
- KVM(八)使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机
1. QEMU/KVM 迁移的概念 迁移(migration)包括系统整体的迁移和某个工作负载的迁移.系统整理迁移,是将系统上所有软件包括操作系统完全复制到另一个物理机硬件机器上.虚拟化环境中的迁移, ...
- OpenStack企业私有云新需求(1):Nova 虚机支持 GPU
作者:Sammy Liu 刘世民 本系列会介绍OpenStack 企业私有云的几个需求: GPU 支持 自动扩展(Auto-scaling)支持 混合云(Hybrid cloud)支持 物理机(Bar ...
- openstack网络(四)-虚机流量分析
几种网络名词解释 使用LinuxBridge时虚机流量分析 VLAN FLAT Local VXLAN 使用OVS时虚机流量分析 几种网络名词解释 1.local网络:local网络是与其他网络和节点 ...
随机推荐
- SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-010-Introduction为类增加新方法@DeclareParents、<aop:declare-parents>
一. 1.Introduction的作用是给类动态的增加方法 When Spring discovers a bean annotated with @Aspect , it will automat ...
- 解决VC++6.0 无法打开、无法添加工程文件
在windows系统下,经常会遇到这样的问题:点击VC++6.0 的[文件]下的[打开]无法操作,并且无法向工程添加文件,下面详细介绍一下解决方案? 工具/原料 VC++6.0 修复工具:FileTo ...
- html5 高级动画精灵
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 11个强大的Visual Studio调试小技巧(转)
简介 调试是软件开发周期中很重要的一部分.它具有挑战性,同时也很让人疑惑和烦恼.总的来说,对于稍大一点的程序,调试是不可避免的.最近几年,调试工具的发展让很多调试任务变的越来越简单和省时. 这篇文章总 ...
- 添加service到SystemService硬件服务
添加service到SystemService: 添加硬件服务. 创建时间:2015年3月9日(星期一) 晚上11:07 | 分类:硬件驱动Android | 天气: 修改时间:2015年3月10日( ...
- Layout Resource官方教程(2)用ViewStub引用的嵌入的layout可推迟加载
Loading Views On Demand THIS LESSON TEACHES YOU TO Define a ViewStub Load the ViewStub Layout YOU SH ...
- API函数
1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同 ...
- 修饰模式(Decorator结构型)C#简单例子
修饰模式(Decorator结构型)C#简单例子 玩家基本功能是移动.运行等等.BaseAbility新增加功能:1.伤害技能harmAbility:2.阻碍技能BaulkAbility:3.辅助技能 ...
- POJ_2456_Agressive_cows_(二分,最大化最小值)
描述 http://poj.org/problem?id=2456 有n个小屋,线性排列在不同位置,m头牛,每头牛占据一个小屋,求最近的两头牛之间距离的最大值. Aggressive cows Tim ...
- Linux kernel ‘xfs_attrlist_by_handle()’函数缓冲区溢出漏洞
漏洞名称: Linux kernel ‘xfs_attrlist_by_handle()’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-392 发布时间: 2013-11-29 更新 ...