Windows Server 2012 R2 Hyper-V 01之基于动态内存下内存性能测试

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

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

NUMA 注意事项

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

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

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

在Windows Server 2008 和 2008 R2 的 Hyper-V 版本不直接支持基于每个 NUMA 节点的内存相关性。换句话说,您不能直接将虚拟机配置为使用特定 NUMA 节点。从Windows Server 2008 R2 SP1版本的Hyper-V开始已经提供了此功能。

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

由于每一个节点的内存大小只有8GB,可推断出分配内存量超出 8GB 的所有虚拟机都必定会使用多个 NUMA 节点的内存。 通过将分配给虚拟机的内存量限制为8GB或更少(在此示例中),会增加虚拟机使用单个 NUMA 节点的内存的机会,从而提高性能。也就是说如果你的虚拟机内存只需要8GB左右,那就可以将到设置在一个节点内,这样子它的性能将是最棒的。

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。否则,您将需要移除一些虚拟机或添加内存。

内存权重

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

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

记忆的屏障,曾经心动的声音已渐渐远去。

Windows Server 2012 R2 Hyper-V 01之基于动态内存下内存性能测试

相关文章:

你感兴趣的文章:

标签云: