E2 机器类型的费用和性能优化


E2 虚拟机可提供价值、性能和灵活性来改善绝大多数工作负载。E2 虚拟机使用动态资源管理功能来更好地利用宿主机上提供的物理资源,从而提高成本效益。此外,E2 虚拟机还使用定制的 CPU 调度器和性能感知型实时迁移功能来优先保证性能,并使工作负载避免超额订阅相关问题。Google 搜索、Google Ads、Google 地图和 YouTube 服务正是采用这些技术来高效运行其延迟敏感型工作负载。

动态资源管理的工作原理

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

借助动态资源管理,Compute Engine 可以更好地利用可用的物理 CPU。它根据资源需求将虚拟机安排到服务器,并将 vCPU 线程安排到物理 CPU,从而最大限度地缩短等待时间。在大多数情况下,我们能够无缝地执行此操作。因此,Google Cloud 可以在更少的服务器上运行更多的虚拟机,使 Compute Engine 能够以远低于其他虚拟机类型的价格提供 E2 虚拟机。

动态资源管理的组件

Compute Engine 使用以下技术实现动态资源管理:

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

核心数和 RAM 密度稳步增加,现在宿主机服务器拥有的资源远远多于任何单个 E2 虚拟机。Google 会不断对新硬件进行评估,并为各种云工作负载和服务寻找经济实惠且性能卓越的平台。当硬件升级可用时,Compute Engine 会将 E2 虚拟机实时迁移到更新更快的硬件,从而让您能够自动利用这些新资源。

智能虚拟机放置

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

性能感知型实时迁移

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

Hypervisor CPU 调度器

Hypervisor CPU 调度器按需将 E2 虚拟 CPU 和内存动态映射到宿主机服务器的物理 CPU 和内存。这种动态管理方式能够更好地利用物理资源,从而提高 E2 虚拟机的成本效益。高效利用资源意味着 Compute Engine 可以在更少的服务器上运行更多虚拟机,这使得 Google Cloud 能够以远低于其他虚拟机类型的价格提供 E2 虚拟机。

Virtio 内存气球设备

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

Virtio 内存设备

基于公共映像的 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

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

后续步骤