VM内存
创建虚拟机时,分配给虚拟机的内存是固定的。您可以使用动态内存控制(Dynamic Memory Control, DMC)来提高Citrix Hypervisor环境中物理内存的利用率。DMC是一种内存管理特性,可以在虚拟机之间动态重新分配内存。
Xencenter在其内存使用的图形显示内存选项卡。有关更多信息,请参见XenCenter文档.
动态内存控制(DMC)提供了以下好处:
您可以在不重新启动VM的情况下添加或删除内存,为用户提供无缝体验。
当服务器满时,DMC允许您在这些服务器上启动更多的虚拟机,按比例减少分配给运行中的虚拟机的内存数量。
什么是动态内存控制(DMC)?
Citrix虚拟机管理程序DMC通过自动调整运行VM的内存,将分配给每个VM的内存量保持在指定的最小值和最大内存值之间,保证性能,并允许每个服务器更高的VM密度。
如果没有DMC,当服务器已满时,启动其他VM失败,“缺失内存”错误。要减少现有的VM内存分配并为更多VM腾出空间,请编辑每个VM的内存分配,然后重新启动VM。使用DMC时,Citrix虚拟机管理程序会尝试通过自动减少其定义的内存范围内的运行VM的当前内存分配来回收内存。Citrix虚拟机管理程序即使在服务器已满时也会尝试回收内存。
笔记:
Citrix虚拟机管理程序8.1中弃用动态内存控件,将在将来的版本中删除。
具有虚拟GPU的VM不支持动态内存控制。
动态范围的概念
管理员可以为每个虚拟机设置动态内存范围。动态内存范围是指虚拟机在不重启的情况下可以增加/删除内存的范围。虚拟机处于运行状态时,管理员可以调整虚拟机的动态范围。Citrix Hypervisor始终保证将分配给虚拟机的内存数量保持在动态范围内。因此,在虚拟机运行时进行内存调整,可能会导致Citrix Hypervisor调整虚拟机的内存分配。最极端的情况是,管理员将动态最小/最大设置为相同的值,迫使Citrix Hypervisor确保分配给虚拟机的内存数量。如果新虚拟机需要在“满”服务器上启动,则运行中的虚拟机的内存会被压缩,以启动新的虚拟机。通过在预定义的动态范围内按比例压缩当前运行的虚拟机,可以获得所需的额外内存
DMC允许您配置动态最小和最大内存级别 - 创建VM运行的动态存储范围(DMR)。
动态最小内存:分配给虚拟机的最低内存限制。
动态上限:分配给虚拟机的内存上限。
例如,如果将动态最小内存设置为512 MB,而将动态最大内存设置为1024 MB,则会给虚拟机一个512 - 1024 MB的动态内存范围(DMR),在此范围内进行操作。Citrix管理程序担保当使用DMC时,总是在指定的DMR中分配每个VM内存。
静态范围的概念
Citrix Hypervisor支持的许多操作系统并不完全“理解”动态添加或删除内存的概念。因此,Citrix Hypervisor必须声明在虚拟机重启时请求使用的最大内存量。声明最大内存量允许客户操作系统相应地调整其页表和其他内存管理结构的大小。这在Citrix Hypervisor中引入了静态内存范围的概念。虚拟机处于运行状态时,不支持调整静态内存范围。对于特定的引导,动态范围受到限制,例如总是包含在这个静态范围内。静态最小值(静态范围的下限)用于保护管理员,设置为操作系统在Citrix Hypervisor上可以运行的最小内存。
注意:
我们建议您不要更改静态最小级别,因为静态最小级别是在每个操作系统所支持的级别上设置的。更多细节请参见内存约束表。
设置高于动态最大值的静态最大级别允许您将来将更多内存分配给VM,而无需重新启动VM。
DMC的行为
自动VM挤压
如果未启用DMC,则当主机已满时,新的VM启动失败,“错误”错误。
当启用DMC时,即使主机已满,Citrix Hypervisor也会尝试通过减少在定义的动态范围内运行的虚拟机的内存分配来回收内存。这样,该主机上所有虚拟机的动态最小值和动态最大值之间的距离均按一定比例被压缩
启用DMC时
当主机的内存充足时-所有运行的虚拟机接收他们的动态最大内存级别
当主机内存不足时-所有运行中的虚拟机都将收到动态最小内存级别。
在配置DMC时,请记住,只分配少量内存给VM可能会对它产生负面影响。例如,分配的内存太少:
使用动态内存控制来减少虚拟机可用的物理内存数量可能会导致虚拟机重启缓慢。同样地,如果分配给VM的内存太少,那么它就会启动得很慢。
将动态存储器的最小值设置为VM太低可能导致VM启动时的性能或稳定性问题不佳。
DMC是如何工作的?
使用DMC,可以在以下两种模式中操作客户虚拟机:
目标模式:管理员指定访客的内存目标。Citrix虚拟机管理程序调整Guest虚拟机的内存分配以满足目标。指定目标在虚拟服务器环境中是有用的,以及在您确切地了解客人使用的内存的情况下有用。Citrix虚拟机管理程序调整Guest虚拟机的内存分配以满足您指定的目标。
动态范围模式:管理员为来宾指定一个动态内存范围。Citrix Hypervisor从范围中选择一个目标,并调整客户的内存分配以满足该目标。指定动态范围在虚拟桌面环境中非常有用,如果您希望Citrix Hypervisor动态地重新划分主机内存,以响应客户机数量的变化或主机内存压力的变化,则在任何情况下都非常有用。Citrix Hypervisor从范围内选择目标,并调整客户的内存分配以满足目标。
注意:
对于任何正在运行的客户机,都可以在目标模式和动态范围模式之间进行更改。指定一个新目标或新的动态范围,其余的工作由Citrix Hypervisor完成。
内存约束
Citrix Hypervisor允许管理员对任何来宾操作系统使用所有内存控制操作。但是,Citrix Hypervisor对所有客户机强制执行以下内存属性排序约束:
0 memory-static-min memory-dynamic-min memory-dynamic-max
通过验证检查,Citrix Hypervisor允许管理员将客户内存属性更改为满足此约束的任何值。但是,除了前面的约束之外,我们只支持支持的每个操作系统的特定客户内存配置。支持的配置范围取决于使用的客户操作系统。Citrix Hypervisor不阻止管理员配置来宾超过支持的限制。但是,建议客户将内存属性保持在支持的范围内,以避免性能或稳定性问题。有关支持的每个操作系统的最小和最大内存限制的详细指南,请参见客户操作系统支持.
警告:
在配置客户内存时,我们建议不要超过操作系统可寻址的最大物理内存。设置内存最大值大于操作系统支持的限制可能会导致客户的稳定性问题。
对于所有支持的操作系统,动态最小值必须大于或等于静态最大值的四分之一。将下限降低到动态最小值以下也会导致稳定性问题。鼓励管理员仔细校准其vm的大小,并确保其应用程序的工作集在动态最小的情况下可靠地运行。
xe CLI命令
查看虚拟机静态内存属性
找到所需VM的UUID:
xe vm-list < !——NeedCopy >
注意uuid,然后运行命令
param-name = memory-static
xe vm-param-get uuid = uuid param-name = memory-static - {min,max} <! - caltcopy - >
例如,显示uuid以ec77开头的虚拟机的静态最大内存属性如下:
vam -get uuid= \ ec77a893-bff2-aa5c-7ef2-9c3acf0f83c0 \ param-name=memory-static-max;268435456 < !——NeedCopy >
示例显示,该虚拟机的静态最大内存为268,435,456字节(256mb)。
查看虚拟机的动态内存属性
要显示动态内存属性,请按照上述过程执行,但使用命令param-name = memory-dynamic
:
找到所需VM的UUID:
xe vm-list < !——NeedCopy >
注意uuid,然后运行命令
param-name = memory-dynamic
:配置vmm -param-get uuid=uuid param-name=memory-dynamic-{min,max}
例如,下面显示使用UUID启动EC77的VM的动态最大内存属性
vam -get uuid= \ ec77a893-bff2-aa5c-7ef2-9c3acf0f83c0 \ param-name=memory-dynamic-max;134217728 < !——NeedCopy >
该示例显示此VM的动态最大内存是134,217,728字节(128 MB)。
更新记忆属性
警告:
设置静态/动态最小/最大参数时使用正确的排序。此外,您不得使以下约束无效:
0 memory-static-min memory-dynamic-min memory-dynamic-max
更新虚拟机的静态内存范围:
Xe vm-memory-static-range-set uuid=uuid min=valuemax=value
更新虚拟机的动态内存范围:
XE VM-Memory-Dynamic-Range-Set \ UUID = UUID min = value \ max = value <! - centcopy - >
指定目标在虚拟服务器环境中很有用,并且在任何情况下,您确切地知道您希望客人使用多少内存。Citrix虚拟机管理程序调整Guest虚拟机的内存分配以满足您指定的目标。例如:
Xe vm-target-set target=value vm=vm-name
更新虚拟机的所有内存限制(静态和动态):
static-max=value static-max=value
笔记:
- 若要为虚拟机分配固定数量的内存,请将“动态最大值”和“动态最小值”设置为相同的值。
- 您无法将VM的动态存储器增加超出静态最大值。
- 要更改VM的静态最大值,必须关闭VM。
更新单个内存属性
警告:
不要更改静态最小级别,因为它是在每个操作系统支持的级别上设置的。有关更多信息,请参见内存约束.
更新虚拟机的动态内存属性。
找到所需VM的UUID:
xe vm-list < !——NeedCopy >
注意uuid,然后使用该命令
memory-dynamic -{最小,最大}=价值
设置uuid=uuidmemory-dynamic-{min,max}=value
以下示例将动态最大值修改为128mb:
xe vm-param-set uuid=ec77a893-bff2-aa5c-7ef2-9c3acf0f83c0 memory-dynamic-max=128MiB