Hyper-v Server内存管理

Hyper-v Server内存管理

许多早期接触Hyper-v的朋友都知道在Windows Server 2008 R2 SP1之前的Hyper-V版本中,管理员只能固定虚拟机所使用的物理内的存大小,当虚拟机启动时会和物理计算机启动一样,自动的将管理员分配的内存完全占用。这样可能会出现以下2个问题:

1、因为Hyper-V不支持内存热插拔(即开机增加内存),所以当管理员发现分配给虚拟机的内存无法满足虚拟机当前的需求时,管理员需要在关闭虚拟机的情况下,对其内存占用大小重新进行调整。

2、当管理员为虚拟机分配的内存过多时,虚拟机上所运行的应用在不需要使用这么多内存的情况下,将造成内存资源的浪费。

可能是微软考虑到上述两个问题所以在Windows Server 2008 R2 SP1及其以后版本的 Hyper-V中新增了动态内存功能,此功能将解决遇到的内存应用瓶颈问题。

内存过量使用

内存过量使用,允许虚拟机使用比宿主机内存更多的内存。例如:宿主机有8GB内存,就可以在其上运行9台拥有1GB内存的虚拟机。内存能过量使用因为有比宿主机更多的虚拟内存。因此,管理员能够最大化物理计算机中运行的虚拟机数量,而不用理会物理内存的限制。

如果没有内存过量使用功能,分配给虚拟机内存的数量最多只能是和宿主机相同数量的内存。但实际上,虚拟机通常消耗的内存比其需要的少,这会浪费物理内存空间,并限制了在服务器上能运行的虚拟机数量。例如,一台8GB 内存的Hyper-V服务器,可能在服务器上部署三台虚拟机,每个分配2GB,并预留2GB给主机操作系统,虽然这台服务器有足够的CPU和磁盘资源来宿主更多虚拟机,但内存成为限制因素。内存缓冲区里含有一个选项(Hyper-V Dynamic Memory)能解决这个问题。

Hyper-V不允许内存过量使用,例如如果分配4GB内存给Hyper-V的一台虚拟机,虚拟机实际只使用2GB。启动虚拟机后,Hyper-V检查是否有4GB的物理内存可用。如果这样的话,内存就被“锁定”,因此只能用于该虚拟机。如果4GB不可用,虚拟机就不能启动,即使虚拟服务器需要的2GB内存可用也不行。

Hyper-V提供“内存缓冲区”、“内存权重”以及“内存优先级”。Hyper-V会允许根据内存使用率来优化虚拟机。当出现争用内存的情况时,优先权高的虚拟机首先获得其所需内存。因为内存竞争会迫使虚拟机用光内存,如果虚拟机需要但又没有可用的物理内存,那么“Hyper-V管理器”将显示每台虚拟机可用的内存及其所需内存,来帮助管理员在Hyper-V上更好地管理内存分配。

下面就让我们一起来具体的了解一下“内存缓冲区”、“内存权重”以及“内存优先级”:

1、内存缓冲区运行机制:

(1) 当内存需求在磨某一时间间隔突然增大时,可以使用保留区域,。在没有缓存情况下,这一时间间隔内突然增大的内存需求会迫使虚拟机进入内存溢出状态,这一状态下内存页面文件将被自动写入磁盘,数据从高速运行的内存空间中转移到相对极慢的磁盘上,会导致计算性能明显下降。

(2) 当内存需求发生改变时,额外保留的空间可以降低虚拟机吧内存数据写入磁盘的概率。同时,更大的缓存空间也带来了浪费。保留的内存区域总是处于可用状态,因此在虚拟机用到它之前都是闲置的。用户设置范围很大,微软缓冲区百分比范围为5%至95%,管理员可以设置任意数字。一般较为建议的是,开始的时候设置较低一些,当发现虚拟机总是发生写入磁盘的情况时对这一百分比进行调整。

2、内存权重:

(1)什么是内存权重:Hyper-V动态内存技术总是不断的平衡内存使用,但有时内存资源无法满足所有虚拟机的需求。如果启用过多的虚拟机,或者某台虚拟机运行某个应用程序时突然需要大量内存资源,当发生这种情况时,内存权重设置可以对虚拟机设置优先权分类。低优先级的虚拟机在高优先级虚拟机内存分配完之前无法获得内存资源。

(2)内存权重的作用:

A:高优先级的虚拟机得到更多的内存;

B:低优先级的虚拟机会被优先“夺走”内存;

C:当启动一台“新”虚拟机时,所给予他的内存来源于已经运行的虚拟机占有的内存,具体分配多少,则要看启动虚拟机的内存权重的高低。

(3)内存计算:

A:计算公式:虚拟机可用内存=启动内存+启动内存*(缓冲区百分比/(1-缓冲区百分比));

B:实例:管理员新建一台虚拟机,分配的内存大小为1200MB,缓冲区百分比为20%,则Hyper-V会附加额外的20%/(1-20%)=300MB,即总共1500MB内存给虚拟机。如果管理员设置的缓冲区百分比为80%,则会附加额外的80%/(1-80%)*1200MB=4800MB,即总共6000MB内存给虚拟机。

OK上述大概就是Hyper-v中“内存缓冲区”、“内存权重”以及“内存优先级”的相关知识。下面就让我们一起来看一下Hyper-v server 2012中新引入的功能----智能分页

智能分页Windows Server 2012/R2 中新引如的技术,通过智能分页以获得可靠的虚拟机重新启动操作。虽然最低内存可以增加虚拟机的合并数量,但它也带来一项挑战。如果一台虚拟机具有比其启动内存更小数量的内存,如果它重新启动,则 Hyper-V 需要附加的内存才能重新启动虚拟机。由于主机内存压力或虚拟机状态的原因,Hyper-V 可能并不总是有可以附加给所要启动的虚拟机的内存。这可能会导致虚拟机重新启动失败。“智能分页”这项新技术的引用就弥补了最低内存和启动内存之间的差距,使得虚拟机可以可靠地重新启动。如果虚拟机配置了比启动内存更少的最低内存,为了提供可靠的重新启动操作,则 Hyper-V 会在 Windows Server 2012/R2 中使用“智能分页”。当重新启动虚拟机需要更多内存时,这种内存管理方法将使用磁盘资源作为附加的临时内存。这种方法既有优点,也有缺点。它提供了一种可靠的方法,在没有可用的物理内存时,仍可确保虚拟机正常运行。但是,它也会降低虚拟机的性能,因为磁盘访问速度比内存访问速度慢得多。

1、为了尽量减少“智能分页”对虚拟机性能的影响,Hyper-V 只在以下情况下才会使用智能分页功能:

(1) 正在重新启动虚拟机时;

(2) 没有可用的物理内存时;

(3) 在主机上运行的其他虚拟机中没有可回收的内存时;

2、“智能分页”不能在以下情况下使用:

(1) 虚拟机正从“关闭状态”启动(而不是重新启动);

(2) 需要超额认购内存用于运行虚拟机时;

(3) 虚拟机正在 Hyper-V 群集中执行故障转移时

当主机内存被超额使用时,Hyper-V 在来宾操作系统中继续依靠分页操作,因为它比“智能分页”更有效。在来宾操作系统中,分页操作由 Windows 内存管理器来执行。Windows 内存管理器比 Hyper-V 主机掌握更多有关虚拟机内的内存使用信息,这意味在选择用于分页的内存时,Windows 内存管理器可以提供比 Hyper-V 更好的信息。正因如此,相比“智能分页”它会导致更少的系统开销。为进一步降低“智能分页”的影响,Hyper-V 将在完成启动之后从虚拟机中删除内存。为达到此目,它会在来宾操作系统中与“动态内存”组件进行协调(该过程有时也被称为气球(ballooning)),从而使虚拟机停止使用“智能分页”。利用这种技术,“智能分页”的使用只是暂时的,并且预计不会超过 10 分钟。需要注意:

1、只有在虚拟机需要时才会创建“智能分页”文件;

2、在删除附加数量的内存之后,系统还会删除“智能分页”文件;

3、直到下一次在没有足够物理内存的情况下需要重新启动虚拟机之前,它一直不能再次使用“智能分页”。

下图显示了使用 Hyper-V 智能分页进行重启的虚拟机的内存映射情况。

为了进一步降低 Hyper-V 智能分页的影响,在虚拟机启动完成之后,Hyper-V 会从虚拟机移除内存,与客户机内的动态内存组件协调(这个过程有时称为“膨胀”),因此虚拟机停止使用 Hyper-V 智能分页。在这项技术中,Hyper-V 智能分页的使用是临时的,不应超过 10 分钟。下图显示了 Hyper-V 在虚拟机完成启动之后,从虚拟机移除内存。

Windows Server 2012/R2开始对Hyper-V 动态内存的增强,有助于在增强 Hyper-V 操作可靠性的同时,实现更高的合并数量。可以不关闭虚拟机而修改虚拟机的内存配置。如果有空闲虚拟机或低负载虚拟机,例如在池化VDI 环境,Hyper-V 增加的动态内存可以用来提高合并量,并提高重启操作的可靠性。这可以降低客户的成本,尤其在有许多空闲或低负载虚拟机的池化环境中更是如此。利用对动态内存的运行时配置修改,可以减少停机时间、提高响应需求变化的敏捷性,从而带来整体的 IT 生产力提高。利用这些新功能,还实现了响应需求变化的敏捷性。

时间: 2024-10-18 02:41:19

Hyper-v Server内存管理的相关文章

学习 Sql Server 内存管理之术语理解

在学习sql server 内存管理时,看到一些term:memory node,memory clerk,memory object,非常迷惑,在此将自己的理解记录下来,以便后续学习 1,NUMA架构和memory node 内存节点基于硬件 NUMA 创建,memory node是Numa node内的内存块,属于server物理内存的一部分.Memory Node的作用是使得内存的分配由Windows移交到SQL Server OS层面执行. 查看memory node select *

Hyper V server 2012 r2 常用的powershell命令

Hyper V server 2012 r2 常用的powershell命令 ? 获取网卡信息 Get-netadapterGet-netipinterface ? 设置DNS地址Set-DnsClientServerAddress -InterfaceAlias NIC NAME -ServerAddresses "1.1.1.1","2.2.2.2"注释:NIC Name: 网卡名称, 1.1.1.1,2.2.2.2 ? 网卡聚合NIC Teaming: New

人人都是 DBA(IV)SQL Server 内存管理

SQL Server 的内存管理是一个庞大的主题,涉及特别多的概念和技术,例如常见的 Plan Cache.Buffer Pool.Memory Clerks 等.本文仅是管中窥豹,描述常见的内存管理相关概念. 在了解内存管理之前,通过 sys.dm_os_memory_clerks 视图可以查询内存的使用职责(Memory Clerks),也就是内存的消耗者. SELECT [type], SUM(pages_kb) AS total_pages_kb FROM sys.dm_os_memor

SQL Server 内存管理在64位时代的改变

64位机上  地址空间比以前大了去了.它引起的改变多了去了 1.MemToLeave这个词不存在了.因为SQL Server以不再做这种预留空间的事了,也就是说multiple page 想用多少就用多少!只要它有只要你用! 2.因为 multiple page不再预留了.所以  single page allocation = 物理内存数 - multiple page allocation 也就不存在了.因为地址空间大了 AWE 也不在被需要了.这下好 stole 也解放了.想用多少就用多少

Sql Server 内存相关计数器以及内存压力诊断

在数据库服务器中,内存是数据库对外提供服务最重要的资源之一, 不仅仅是Sql Server,包括其他数据库,比如Oracle,MySQL等,都是一类非常喜欢内存的应用. 在Sql Server服务器中,最理想的情况是Sql Server把所有所需的数据全部缓存到内存中,但是这往往也是不现实的,因为数据往往总是大于可用的物理内存 可以说内存是否存在压力能够直接决定数据库能否高效运行,同时,如果内存出现压力,同时也会影响到CPU的使用和存储性能,可以说是一损俱损,具有连带性. 那么,如何识别内存是否

SQL Server 2012笔记分享-6:理解内存管理

内存管理 – SQL Server 2005/2008/2008r2 SQL Server 2012以前的版本(SQL 2005/2008/2008R2),有single page allocator 和multi page allocator.也就是说,如果申请的内存是8k以内的,就会有单页分配器分配,而大于8kb的内存请求,使用multi page 分配器来管理.如图所示. 使用select * from sys.dm_os_memory_clerks查询memory clerk,会发现si

安装配置 HYPER V Core SERVER 的基本命令 - Hyper V 2012 R2

安装配置 HYPER V Core SERVER 的基本命令 - Hyper V 2012 R2 1. 基本命令 安装集群故障转移角色 Install-WindowsFeature -name Failover-Clustering -IncludeManagementTools 关闭防火墙 netsh advfirewall set allprofiles state off 关闭IPv6 New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSe

(转)从内存管 理、内存泄漏、内存回收探讨C++内存管理

http://www.cr173.com/html/18898_all.html 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对 C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃 C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能

C++内存管理(超长,例子很详细,排版很好)

[导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能.本期专题将从内存管理.内存泄漏.内存回收这三个方面来探讨C++内存管理问题