配置 VM 内存

在创建 VM 时,会为 VM 分配固定的内存量。您可以使用动态内存控制 (DMC) 提高您的 XenServer 环境中的物理内存利用率。DMC 是用于在 VM 之间动态重新分配内存的内存管理功能。

XenCenter 在其内存选项卡中提供了内存使用率的图形显示。有关详细信息,请参阅 XenCenter 帮助。

动态内存控制 (DMC) 具有以下优势:

  • 您可以在不重新启动 VM 的情况下添加或删除内存,从而为用户提供无缝体验。

  • 服务器满载后,DMC 允许您在这些服务器上启动更多 VM,从而按比例减少分配给正在运行的 VM 的内存量。

什么是动态内存控制 (DMC)?

XenServer DMC 的工作原理是:自动调整正在运行的 VM 的内存,使分配给每个 VM 的内存量保持在指定的最小内存值与最大内存值之间,确保性能并允许每台服务器具有更大的 VM 密度。

如果没有 DMC,则当服务器满载时,启动其他 VM 会失败并显示“内存不足”错误。要减少现有 VM 内存分配,为更多 VM 预留空间,请编辑每个 VM 的内存分配,然后重新启动 VM。使用 DMC 时,XenServer 会尝试在正在运行的 VM 的定义内存范围内自动减少其当前内存分配来回收内存。即使在服务器满载时,XenServer 仍会尝试回收内存。

动态范围的概念

对于每个 VM,管理员可以设置一个动态内存范围。动态内存范围是指可以在 VM 中添加/删除内存而无需重新启动 VM 的范围。在 VM 运行时,管理员可以调整动态范围。XenServer 始终保证为 VM 分配的内存量保持在动态范围内。因此,在 VM 运行时调整动态范围可能会导致 XenServer 调整分配给 VM 的内存量。管理员将动态最小/最大内存设置为相同值,从而强制 XenServer 确保为 VM 分配此内存量,这是最极端的情况。如果需要在“满载”的服务器上启动新 VM,则正在运行的 VM 会“腾出”自己的内存以便启动新 VM。获取所需的额外内存的方法是:在正在运行的现有 VM 的预定义动态范围内按比例腾出内存。

DMC 允许您配置动态最小和最大内存级别,从而创建 VM 运行时使用的动态内存范围 (DMR)。

  • 动态最小内存:分配给 VM 的内存下限。

  • 动态上限:分配给 VM 的内存上限。

例如,如果动态最小内存设置为 512 MB,动态最大内存设置为 1024 MB,则 VM 的动态内存范围 (DMR) 为 512 - 1024 MB,VM 将在此范围内运行。在使用 DMC 时,XenServer * 可确保*始终在每个 VM 的指定 DMR 内为其分配内存。

静态范围的概念

XenServer 支持的许多操作系统不完全“理解”动态添加或删除内存的概念。因此,XenServer 必须声明 VM 在重新启动时需要占用的最大内存量。声明最大内存量允许来宾操作系统相应调整其页表及其他内存管理结构的大小。这在 XenServer 中引入了静态内存范围的概念。静态内存范围无法在 VM 运行时进行调整。对于特定引导,动态范围受到限制,例如始终限制在此静态范围内。静态最小内存(静态范围的下限)用于保护管理员,设置为操作系统可以在 XenServer 上运行时占用的最小内存量。

注意:

Citrix 建议您不要更改静态最小级别,因为静态最小级别设置为每个操作系统支持的级别。有关更多详细信息,请参阅内存限制表。

将静态最大级别设置为高于动态最大级别后,您以后为 VM 分配更多内存时,无需重新启动 VM。

DMC 行为

VM 自动腾出内存

  • 如果未启用 DMC,则当主机满载时,新 VM 会因“内存不足”错误而导致启动失败。

  • 启用了 DMC 时,即使在主机满载时,XenServer 仍会尝试在正在运行的 VM 的定义动态范围内减少其内存分配来回收内存。这样,正在运行的 VM 在动态最小内存与动态最大内存之间以相同的间距按比例为主机上的所有 VM 腾出内存。

启用了 DMC 时

  • 主机内存足够时 - 正在运行的所有 VM 都将达到其动态最大内存级别。

  • 主机内存不足时 - 正在运行的所有 VM 都将达到其动态最小内存级别。

配置 DMC 时,请记住,只将少量内存分配给 VM 会对其造成负面影响。例如,分配过少内存:

  • 使用动态内存控制减少 VM 可用的物理内存量可能会导致 VM 重新启动缓慢。同样,如果为 VM 分配的内存过少,VM 启动可能缓慢。

  • 如果为 VM 设置的动态最小内存过低,可能会导致在 VM 启动时出现性能或稳定性不佳的问题。

DMC 的工作原理

使用 DMC,可以在以下两种模式中的一种模式下运行来宾虚拟机:

  1. 目标模式: 管理员指定来宾系统的内存目标。XenServer 将调整来宾系统的内存分配以达到该目标。在虚拟服务器环境中,以及在您知道希望来宾系统使用的准确内存量的情况下,指定目标很有用。XenServer 将调整来宾系统的内存分配以达到您指定的目标。

  2. 动态范围模式: 管理员指定来宾系统的动态内存范围。XenServer 将从该范围内选择一个目标,并调整来宾系统的内存分配以达到该目标。在虚拟桌面环境中,以及您希望 XenServer 动态重新分配主机内存以响应不断变化的来宾系统数目或不断变化的主机内存压力的任何情况下,指定动态内存范围很有用。XenServer 将从该范围内选择一个目标,并调整来宾系统的内存分配以达到该目标。

注意:

对于任何正在运行的来宾系统,可以随时在目标模式与动态范围模式之间进行更改。指定新目标或新动态范围,然后由 XenServer 完成剩余的工作。

内存限制

XenServer 允许管理员对任意来宾操作系统使用所有内存控制操作。但是,对于所有来宾系统,XenServer 会强制实行以下内存属性顺序限制:

0 memory-static-min memory-dynamic-min memory-dynamic-max memory-static-max

XenServer 允许管理员将来宾系统内存属性更改为可满足此限制(受验证检查限制)的任何值。但是,除上述限制外,对于支持的每个操作系统,Citrix 仅支持特定的来宾系统内存配置。受支持的配置的范围取决于正在使用的来宾操作系统。XenServer 不会阻止管理员将来宾系统配置为超出支持的限制。但是,建议客户将内存属性保持在支持的限制内,以避免出现性能或稳定性问题。有关支持的每个操作系统的最小内存限制和最大内存限制的详细准则,请参阅来宾操作系统支持

警告:

配置来宾系统内存时,Citrix 建议不要超出操作系统可寻址的最大物理内存数量。如果设置的最大内存超出操作系统支持的限制,可能会导致来宾系统出现稳定性问题。

支持的所有操作系统的动态最小内存必须大约或等于静态最大内存的四分之一。将下限降低到动态最小内存以下也可能会导致出现稳定性问题。建议管理员仔细校准其 VM 的大小,并确保其所用应用程序集在动态最小内存下可靠运行。

xe CLI 命令

显示 VM 的静态内存属性

  1. 查找所需 VM 的 uuid:

    xe vm-list
    
  2. 记下该 uuid,然后运行命令 param-name=memory-static

    xe vm-param-get uuid=uuid param-name=memory-static-{min,max}
    

    例如,以下命令将显示 uuid 以 ec77 开头的 VM 的静态最大内存属性:

    xe vm-param-get uuid= \
    ec77a893-bff2-aa5c-7ef2-9c3acf0f83c0 \
    param-name=memory-static-max;
    268435456
    

    上述示例显示此 VM 的静态最大内存为 268435456 字节 (256 MB)。

显示 VM 的动态内存属性

要显示动态内存属性,请按照上述过程进行操作,但使用命令 param-name=memory-dynamic

  1. 查找所需 VM 的 uuid:

    xe vm-list
    
  2. 记下该 uuid,然后运行命令 param-name=memory-dynamic

    xe vm-param-get uuid=uuid param-name=memory-dynamic-{min,max}
    

    例如,以下命令将显示 uuid 以 ec77 开头的 VM 的动态最大内存属性:

    xe vm-param-get uuid= \
    ec77a893-bff2-aa5c-7ef2-9c3acf0f83c0 \
    param-name=memory-dynamic-max;
    134217728
    

    上述示例显示此 VM 的动态最大内存为 134217728 字节 (128 MB)。

更新内存属性

警告:

设置静态/动态最小/最大内存参数时顺序应正确。此外,必须保持以下限制有效:

0 memory-static-min memory-dynamic-min memory-dynamic-max memory-static-max

更新虚拟机的静态内存范围:

xe vm-memory-static-range-set uuid=uuid min=valuemax=value

更新虚拟机的动态内存范围:

xe vm-memory-dynamic-range-set \
uuid=uuid min=value \
max=value

在虚拟服务器环境中,以及在您知道希望来宾系统使用的准确内存量的任何情况下,指定目标很有用。XenServer 将调整来宾系统的内存分配以达到您指定的目标。例如:

xe vm-target-set target=value vm=vm-name

更新虚拟机的所有内存限制(静态限制和动态限制):

xe vm-memory-limits-set \
uuid=uuid \
static-min=value \
dynamic-min=value \
dynamic-max=value static-max=value

注意:

  • 要为 VM 分配不会变化的特定内存量,请将动态最大内存和动态最小内存设置为相同值。

  • 不能将 VM 的动态内存增加到超过静态最大内存。

  • 要更改某个 VM 的静态最大内存,必须关闭该 VM。

更新各个内存属性

警告:

Citrix 建议不要更改静态最小级别,因为此级别设置为每个操作系统支持的级别。有关详细信息,请参阅内存限制

更新 VM 的动态内存属性。

  1. 查找所需 VM 的 uuid:

    xe vm-list
    
  2. 记下该 uuid,然后使用命令 memory-dynamic-{min,max}=value

    xe vm-param-set uuid=uuidmemory-dynamic-{min,max}=value
    

以下示例将动态最大内存更改为 128 MB:

xe vm-param-set uuid=ec77a893-bff2-aa5c-7ef2-9c3acf0f83c0 memory-dynamic-max=128MiB

配置 VM 内存