Chinaunix首页 | 论坛 | 博客
  • 博客访问: 835907
  • 博文数量: 372
  • 博客积分: 10063
  • 博客等级: 中将
  • 技术积分: 4220
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 11:36
文章分类

全部博文(372)

文章存档

2012年(372)

分类: 虚拟化

2012-02-27 12:29:27

动态内存是一个有用的功能,但在配置虚拟机和主机服务器时,必须小心谨慎。

Brien M. Posey

谈及承载虚拟工作负载,硬件资源对整体性能的重要性可能不如物理内存。 以确保每台虚拟机 (VM) 都具有所需内存且不会浪费进程中的内存的方式分配内存,非常重要。 下面是分配供 Microsoft Hyper-V 使用的内存时需要注意的一些关键事项。

NUMA 注意事项

Hyper-V 的内存管理是一种艺术。 您必须确保为每台虚拟机提供足够的内存量。 同时,还必须避免向虚拟机分配超出真正需要的内存。

其中的原因似乎很明显。 向虚拟机分配过多内存会限制可向同一服务器上其他虚拟机分配的内存量。 但有时,向虚拟机分配过多内存实际会对其性能产生不良影响。

大多数新服务器使用非一致性内存访问 (NUMA) 内存。 NUMA 内存旨在通过基于每处理器分配内存来提高性能。 每个专用内存块称为一个 NUMA 节点。 CPU 访问其本地 NUMA 节点(直接分配给该 CPU 的内存)的速度比它访问非本地 NUMA 节点的速度快。

用于 Windows Server 2008 和 2008 R2 的 Hyper-V 版本不直接支持基于每个 NUMA 节点的内存相关性。 换句话说,您不能直接将虚拟机配置为使用特定 NUMA 节点。 据称,Windows Server 8 版本的 Hyper-V 中将提供此功能。 但是,您仍可采取一些措施来减少虚拟机使用非本地 NUMA 节点的机会。

其中的技巧是计算每个 NUMA 节点的大小。 例如,假定您的服务器配备有两个八核处理器和 128GB 的 RAM。 可通过用内存大小 (128GB) 除以 CPU 内核数 (16) 来计算 NUMA 节点大小。 在本示例中,NUMA 节点的大小将是 8GB。

Hyper-V 还不允许您将特定 NUMA 节点分配给特定虚拟机。 但是,因为您知道此特定服务器的 NUMA 节点大小为 8GB,所以您可推断出分配的内存量超出 8GB 的所有虚拟机都必定会使用多个 NUMA 节点的内存。 通过将分配给虚拟机的内存量限制为 8GB 或更少(在此示例中),会增加虚拟机使用单个 NUMA 节点的内存的机会,从而提高性能。

Hyper-V 开销

谈到内存管理,NUMA 节点并不是唯一需要注意的事项。 在您规划使用主机服务器的内存的方法时,考虑与虚拟化相关的开销非常重要。 对于虚拟化开销,主要有两个注意事项。 首先,您必须为父分区保留一些内存。

您将至少需要为虚拟机监控程序保留 300MB,为在根分区上运行的主机操作系统保留 512MB。 但是,大多数最佳实践指南表明,您应为父分区保留 2GB 内存。

您不应将主分区用于 Hyper-V 以外的其他任何项目(但您可以运行管理代理、备份代理和防火墙等安全和基础结构软件)。 因此,建议保留 2GB 的前提是您不会在父分区中运行任何其他应用程序或服务器角色。

Hyper-V 不允许您直接向主分区分配内存。 它基本上会使用剩下的所有内存。 因此,您必须记得将主机服务器的 2GB 内存保留为未分配状态,以供父分区使用。

来宾计算机内存分配

在虚拟化开销方面要考虑的另一件事是,虚拟机对集成服务和其他与虚拟化相关的进程使用少量内存。 该内存量有些微不足道,所以除非您只计划向每台虚拟机提供极少量的内存,否则您通常不必担心为这些服务和进程分配了额外内存。

RAM 为 1GB 或更少的虚拟机仅将大约 32MB 内存用于与虚拟化相关的开销。 每增加 1 GB 的 RAM 应增加 8MB 内存。 例如,RAM 为 2GB 的虚拟机将 40MB(32MB + 8MB)内存用于与虚拟化相关的开销。 同样,内存为 4GB 的虚拟机将 64MB 内存用于此开销。

动态内存

Windows Server 2008 R2 SP1 引入了一种新的动态内存功能,该功能允许虚拟机基于当前的工作负载动态使用内存。 并且,还允许您超量使用服务器的物理内存,以运行更多虚拟机。 虽然动态内存具有一定优势,但必须遵守某些最佳实践指南,以避免虚拟机缺少内存。

首先,使用动态内存并非总是最佳选择。 您可以基于每台虚拟机启用或禁用动态内存。 应只在可真正获益的虚拟机上启用动态内存,这一点非常重要。

最重要的注意事项之一是虚拟机上的工作负载。 如果虚拟机上的应用程序设计为使用固定内存量,则最好向该虚拟机分配其正好需要的内存量,而不是使用动态内存。

对于内存需求很大的应用程序,也是如此。 一些应用程序设计为使用可用的所有内存量。 如果允许此类应用程序使用动态内存,则它们会很快耗尽服务器的物理内存。 在这种情况下,最好向运行此类型应用程序的虚拟机分配固定内存量。

最后,如果虚拟机尝试使用多个 NUMA 节点的内存,则可能会影响服务器的性能。 因此,如果您的服务器使用 NUMA 内存,并且性能是主要考虑因素,则避免使用动态内存或许是最佳选择。

启动 RAM

在动态内存方面要了解的一个最重要的概念是启动 RAM。 使用动态内存时,必须向每台虚拟机分配一个启动 RAM 值。 此值反映虚拟机在启动时最初使用的物理内存量。 最重要的是,启动 RAM 还表示虚拟机将随时使用的最少物理内存量。 不能将虚拟机的内存使用量降到启动 RAM 值以下。

因此,Microsoft 建议您避免向虚拟机分配大量启动 RAM。 最好根据虚拟机上运行的操作系统确定启动 RAM。 Microsoft 建议对运行 Windows 7、Windows Vista、Windows Server 2008 和 Windows Server 2008 R2 的虚拟机使用 512MB 启动 RAM。 如果您的虚拟机将运行 Windows Server 2003 或 Windows Server 2003 R2,则 Microsoft 建议使用 128MB 启动 RAM。

为使虚拟机使用动态内存,该虚拟机上运行的操作系统必须支持动态内存。 Windows XP 不支持动态内存。 如果尝试在配置为使用动态内存的虚拟机上运行 Windows XP,则该操作系统将只能访问启动 RAM。

在转到其他配置任务前,必须确保所有虚拟机的总启动 RAM 不超过服务器上安装的物理 RAM。 否则,您将需要移除一些虚拟机或添加内存。

您或许还需要调整最大 RAM 值。 此值表示一台虚拟机可使用的最大物理内存量。 默认情况下,Hyper-V 将每台虚拟机的最大 RAM 设置为 64GB。 如果您不需要对一些虚拟机使用这么多物理内存,则可能还需要将最大 RAM 设置为较小的值。

内存权重

使用动态内存的整个理念是它允许您超量使用内存。 这样,您的虚拟机便可在需要时访问所需的内存。 超量使用任何硬件资源面临的一个最大问题是,您可能会最终耗尽该资源。 使用动态内存时,您的虚拟机完全有可能耗尽所有可用物理内存,而且还需要更多内存。

解决此问题的长期解决方案是确保您的服务器配置了足够内存,能够满足虚拟机的要求。 不过,短期解决方案是排定内存使用的优先级。

几乎所有主机服务器都有一些比其他虚拟机更重要的虚拟机。 Hyper-V 允许您排定这些虚拟机的优先级,以便在物理内存短缺的情况下,先将内存分配给较高优先级的虚拟机。 可以通过调整虚拟机的内存权重来排定虚拟机对动态内存的需求的优先级。 内存权重较高的虚拟机的优先级高于内存权重较低的虚拟机。

必须为使用动态内存的每台虚拟机配置的另一设置是内存缓冲区。 内存缓冲区设置控制每台虚拟机应尝试保留为缓冲区的内存量。 此值以百分比形式表示。 例如,如果某虚拟机使用 4GB 的已分配内存,并且内存缓冲区设置为 50%,则该虚拟机最多可使用 6GB 内存。

内存缓冲区不保证虚拟机可使用缓冲区内存, 它仅控制虚拟机应尝试声明的内存量。 值得注意的是,由于内存缓冲区以百分比形式表示,因此缓冲的内存量随虚拟机此刻使用的内存量的变化而变化。 使用动态内存的所有虚拟机开始时都使用最低内存量。 它们根据工作负载对其内存所施加的压力来动态调整其内存使用量。

内存配置

实际配置虚拟机内存使用量的过程很简单。 打开 Hyper-V 管理器,右键单击某虚拟机(因为每台虚拟机的内存都是独立管理的)。 从快捷菜单中选择“设置”命令。 出现“设置”对话框时,单击“内存”。

通过 Hyper-V,您可选择向虚拟机分配固定内存量,也可以使用动态内存(参见图 1)。 如果选择动态选项,则可直接通过“设置”对话框调整启动 RAM、最大 RAM、内存缓冲区和内存权重。

图 1 可通过“设置”对话框调整虚拟机的内存分配。

如果主机服务器的物理内存资源有限,则通常应在使用静态还是动态内存之间做出权衡。 静态内存提供的整体性能通常更好(如果分配了足够的内存)。 动态内存操作起来可能比较困难,但它通常能够实现更大的虚拟机密度。

阅读(1442) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~