新一代动态资源管理


N4 虚拟机(由第 5 代 Intel Xeon 处理器和 Titanium 提供支持)使用新一代动态资源管理来更好地使用宿主机上可用的物理资源以提高成本效率,并且还使用定制的 CPU 调度程序和性能感知的实时迁移来平衡工作负载性能需求与可用资源。Google 搜索、Google Ads、Google 地图和 YouTube 服务正是采用这些技术来高效运行其对延迟敏感的工作负载。

新一代动态资源管理还具有更好的 NUMA 亲和性、对资源需求更准确的预测,以及通过使用性能感知的实时迁移实现的更快的再平衡速度。

动态资源管理的工作原理

虚拟 CPU (vCPU) 实现为线程,它们像宿主机上的任何其他线程一样按需安排运行。当 vCPU 有工作要处理时,工作将被分配给要在其上运行的可用物理 CPU,直到它再次进入休眠状态。同样,虚拟 RAM 使用在客机物理页被首次访问时填充的页面表映射到物理宿主机页面。此映射将保持不变,直到虚拟机指示不再需要客机物理页。

借助动态资源管理,Compute Engine 可以通过以下方式更好地利用可用的物理 CPU:根据资源需求将虚拟机调度到服务器,并将 vCPU 线程调度到物理 CPU,从而最大限度地缩短等待时间。在大多数情况下,我们可以无缝执行此操作,使 Google Cloud 可以在更少的服务器上更高效地运行虚拟机。

动态资源管理的组件

Compute Engine 使用以下技术进行动态资源管理:

更大、更高效的物理服务器

核心数和 RAM 密度稳步增加,使得现在宿主机服务器拥有的资源远远多于任何单个虚拟机。Google 会不断对新硬件进行基准测试,并寻找针对各种云工作负载和服务具有成本效益且性能出色的平台,使您能充分利用推出的最新技术。

智能虚拟机放置

Google 的集群管理系统会观察物理服务器上运行的虚拟机的 CPU、RAM、内存带宽和其他资源需求,并使用此信息来预测新添加的虚拟机在该服务器上的表现。然后,它会在数千个服务器中进行搜索,以找到添加虚拟机的最佳位置。这些观察可确保放置的新虚拟机与相邻实例兼容,并且基本不会受到这些实例的干扰。

性能感知型实时迁移

虚拟机放置在宿主机上后,Compute Engine 会持续监控虚拟机性能和等待时间。如果虚拟机的资源需求增加,Compute Engine 可以使用实时迁移以透明方式将工作负载转移到数据中心内的其他宿主机。实时迁移政策以预测性方法为指导,让 Compute Engine 有时间完成负载迁移,通常使虚拟机无需等待。

Hypervisor CPU 调度器

Hypervisor CPU 调度程序按需将虚拟 CPU 和内存动态映射到宿主机服务器的物理 CPU 和内存。这种动态管理方式通过更好地利用物理资源以提高虚拟机的成本效益。高效利用资源意味着 Compute Engine 可以在更少的服务器上更高效地运行虚拟机,使 Google Cloud 能够帮用户节省开支。

第一代动态资源管理

E2 是首个使用 virtio 内存气球设备提供动态资源管理的虚拟机系列。

具有 E2 虚拟机的 virtio 内存气球设备

内存气球 (ballooning) 是宿主机和客机之间的接口机制,用于动态调整客机的预留内存大小。E2 使用 virtio 内存气球设备来实现内存气球功能。通过 virtio 内存气球设备,宿主机可以明确要求客机生成一定数量的空闲内存页(也称为内存气球膨胀),并回收内存,以便宿主机可以将空闲内存用于其他虚拟机。同样,virtio 内存气球设备可以通过压缩内存气球将内存页返回给客机。E2 虚拟机是唯一使用内存气球设备的机器系列。

基于公共映像的 Compute Engine E2 虚拟机实例支持 Virtio Memory Balloon 设备,该设备监控客机操作系统的内存使用量。客机操作系统将其可用内存传送给主机系统。主机会根据需要将所有未使用的内存重新分配给其他进程,从而更有效地利用内存。Compute Engine 会收集并使用这些数据,以提供更准确的合理调整容量建议

验证驱动程序安装

如需检查您的映像是否已安装并加载 virtio 内存气球设备驱动程序,请运行以下命令。

Linux

大多数 Linux 发行版都包含 virtio 内存气球设备驱动程序。如需验证您的映像安装并加载了该驱动程序,请运行:

sudo modinfo virtio_balloon > /dev/null && echo Balloon driver is \
installed || echo Balloon driver is not installed; sudo lsmod | grep \
virtio_balloon > /dev/null && echo Balloon driver is loaded || echo \
Balloon driver is not loaded

在 5.2 之前的 Linux 内核中,当存在气球设备时,Linux 内存系统有时会错误地阻止大的内存分配。这一问题在实际运行中很少发生,但我们建议将虚拟内存 overcommit_memory 设置更改为 1,以免出现该问题。2021 年 2 月 9 日起发布的所有 Google 提供的映像都已经默认进行了此项更改。

如需更正该设置,请使用以下命令将值从 0 更改为 1

sudo /sbin/sysctl -w vm.overcommit_memory=1

如需在重新启动后保存此项更改,请将以下内容添加到 /etc/sysctl.conf 文件中:

vm.overcommit_memory=1

Windows

Compute Engine Windows 映像包含 virtio 气球设备。不过,自定义 Windows 映像不包含该设备。如需验证 Windows 映像是否安装了相应驱动程序,请运行:

googet verify google-compute-engine-driver-balloon

停用 virtio 内存气球设备

利用 virtio 内存气球设备,Compute Engine 可以更有效地利用内存资源,从而使 Google Cloud 能够以更低的价格提供 E2 虚拟机。您可以通过停用设备驱动程序来选择停用 virtio 内存气球设备。停用 virtio 内存气球设备后,您会继续收到合理调整容量建议;但是,这些建议可能不够准确。

Linux

如需在 Linux 中停用该设备,请运行以下命令:

sudo rmmod virtio_balloon

您可以将此命令添加到虚拟机的启动脚本中,以便在虚拟机启动时自动停用该设备。

Windows

如需在 Windows 上停用该设备,请运行以下命令:

googet -noconfirm remove google-compute-engine-driver-balloon

您可以将此命令放入虚拟机的启动脚本中,以便在虚拟机启动时自动停用该设备。

后续步骤