过度使用单租户虚拟机上的 CPU


单租户节点上的 CPU 过度使用功能可让您安排实例,以便彼此共享其空闲 CPU 周期。这样一来,您可以超额预配单租户节点资源,并在单租户节点上安排比正常可用数量更多的虚拟机 CPU。CPU 过度使用功能对于利用率过低但可能会遇到相对不相关的爆发情况的工作负载特别有用。

CPU 过度使用功能可将单租户节点的费用分布到更多虚拟机上,从而帮助您降低每个虚拟机的费用。当使用按插槽或者按核心的许可时,还可以降低每个虚拟机的许可费用。

具有过度使用 CPU 的虚拟机可通过以下方式使用未使用的 CPU 资源:

  • 如果单租户节点未满,过度使用的虚拟机可以利用未分配的核心。

  • 如果单租户节点上的另一个虚拟机未利用其所有 CPU 资源(例如,因 CPU 空闲),过度使用的虚拟机可以使用这些 CPU 资源。

过度使用水平

您可以在创建虚拟机或停止虚拟机后,指定分配给虚拟机的最小 CPU 数量的值。过度使用水平表示保证虚拟机可用的最低底层 CPU 线程数。如果虚拟机拥有的 vCPU 数量多于可用的底层线程,则虚拟机的 vCPU 会共用底层计算资源,并以下降的性能运行。

您可以为每个虚拟机设置此值,这可让您在一个单租户节点上预配具有不同 CPU 过度使用比率的虚拟机。值较小会在发生相关爆发时降低容量需求,但可能会降低性能。为了确定最小 CPU 数量的最佳值,需要了解工作负载利用率并对该值进行迭代修改。

设置此值时,请注意以下事项:

  • 如果您未设置 CPU 数下限值,或设置的 CPU 数下限值等于虚拟机机器类型中的 CPU 数,则虚拟机的允许过度使用比率为 1.0。如果过度使用比率为 1.0,则所有 CPU 仅可供现有虚拟机访问,并且没有 CPU 资源可供其他虚拟机过度使用。

  • 最小 CPU 数量不能大于虚拟机的机器类型指定的 CPU 数量。

  • 单租户节点上所有虚拟机的最小 CPU 数量值的总和不能超过该单租户节点类型的 CPU 容量,对于 n1-node-96-624 节点类型为 96 个。

虚拟机的机器类型指定的 CPU 数量值是一个静态值,该值表示虚拟机可通过爆发从最小数量提升到的 CPU 数量(如果这些 CPU 可用)。如果您需要的 CPU 数量与固定机器类型提供的数量不同,则可以使用自定义机器类型

注意事项

在为虚拟机配置 CPU 过度使用水平之前,请考虑工作负载的重要性。不太重要的工作负载(如开发和测试工作负载)可能会容忍较高的过度使用水平。更为重要的工作负载(例如生产付款系统)可能无法承受较高的过度使用,或者无法承受任何过度使用。

还应考虑工作负载的利用率。具有高 CPU 利用率的工作负载不适合 CPU 过度使用,因为它们没有可供其他过度使用的虚拟机利用的空闲利用率周期。此外,平均 CPU 利用率低但峰值利用率高的工作负载可能会受益于不同大小的机器类型。

利用 CPU 过度使用功能会对峰值利用率高且平均利用率低的不相关爆发性工作负载有好处,因为当某些虚拟机需要爆发其利用率时,这些工作负载更有可能具有要在虚拟机之间共享的可用 CPU 资源。如果主机上的所有虚拟机同时爆发,则主机将没有足够的资源用于虚拟机。

限制

工作负载限制

CPU 过度使用非常适合没有严格性能要求的工作负载,例如开发和测试工作负载以及虚拟桌面基础架构。

较高水平的 CPU 过度使用可能不适用于对性能敏感的工作负载。

对于平均利用率和高峰利用率始终较低的工作负载,Google 建议调整容量。也就是说,建议修改虚拟机实例的大小,以匹配工作负载的资源要求,而不是过度使用 CPU。

如果您的实例过度使用量过高,请将其移至其他单租户节点

机器类型限制

您只能在以下情况下过度使用 CPU:

过度使用水平限制

您只能将每个单租户节点上的最小 CPU 数量配置为虚拟机 CPU 数量的一半,从而使单租户节点过度使用比率最大为 2.0。

虚拟机安排限制

基于未配置 CPU 过度使用功能的单租户节点模板的单租户节点组不支持预配启用了 CPU 过度使用功能的虚拟机;也就是说,您不能在未配置 CPU 过度使用功能的单租户节点组上安排具有指定最小 CPU 数量的虚拟机。

配额

CPU 配额基于单租户节点类型的 vCPU 数量,而不是过度使用时可能可以使用的最大 vCPU 数量。

费用

系统会对在节点模板上选择了 CPU 过度使用功能的单租户节点额外收取 25% 的费用。此费用不包含在单租户节点上运行虚拟机的 10% 的附加费。无论 CPU 过度使用水平如何以及单租户节点上安排了多少个虚拟机,CPU 过度使用附加费都是固定的。

单租户节点提供承诺使用折扣持续使用折扣适用于单租户附加费和 CPU 过度使用附加费。

如需估算在单租户节点上运行虚拟机的费用,请参阅价格计算器

配置单租户虚拟机以使用过度使用功能

如需将单租户虚拟机配置为具有可过度使用的 CPU 资源,请执行以下操作:

  1. 创建启用 CPU 过度使用功能的单租户节点模板。创建节点模板时,必须启用 CPU 过度使用功能。创建节点模板后,您无法再启用 CPU 过度使用功能。

  2. 根据启用了 CPU 过度使用功能的单租户节点模板创建单租户节点组。

  3. 创建一个虚拟机并执行以下操作:

    1. 为该虚拟机选择机器类型。机器类型上的 CPU 数量表示当最小 CPU 数量小于机器类型指定的 CPU 数量时,虚拟机可以通过爆发从最小 CPU 数量提升到的最大 CPU 数量。

      您可以为单租户节点上的每个虚拟机选择不同的机器类型,前提是不超过单租户节点的 CPU 和内存容量。

    2. 指定要分配给单个虚拟机的最小 CPU 数量,或使用代管式实例组创建多个具有相同 CPU 过度使用水平的虚拟机。

准备工作

  • 创建单租户节点模板并指定 --cpu-overcommit-type=enabled
  • 根据启用了 CPU 过度使用功能的单租户节点模板创建单租户节点组
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

设置 CPU 过度使用水平

以下过程演示了如何创建具有可过度使用的 CPU 资源的单租户虚拟机。如果您需要修改正在运行的虚拟机的 CPU 过度使用水平,则必须先停止该虚拟机。

控制台

在 Google Cloud 控制台中,在通过启用了 CPU 过度使用功能的单租户节点模板创建的单租户节点组上创建一个单租户虚拟机:

  1. 转到单租户节点页面。

    转到“单租户节点”

  2. 点击节点组

  3. 点击要在其中创建虚拟机的单租户节点组。

  4. 点击创建实例

  5. 为该虚拟机指定名称地区区域

  6. 机器配置下,选择至少具有 4 个 vCPU 的固定或自定义机器类型

  7. CPU 过度使用下,选择启用 CPU 过度使用功能

  8. 分配的 vCPU 数下限下,调整滑块或手动输入 vCPU 数量,以指定此虚拟机上的 CPU 的过度使用水平。

  9. 点击创建以创建具有可过度使用的 CPU 资源的虚拟机实例。

gcloud

以下示例展示了如何使用 gcloud compute instances create 命令在具有可过度使用的 CPU 资源的固定机器类型上创建单租户虚拟机。

gcloud compute instances create VM_NAME \
    --machine-type=MACHINE_TYPE \
    --min-node-cpu=MIN_VCPUS \
    --node-group=GROUP_NAME

替换以下内容:

  • VM_NAME:过度使用 CPU 的虚拟机的名称。

  • MACHINE_TYPE:要为其供应单租户虚拟机的机器类型。 该机器类型指定的 CPU 数量是指虚拟机可通过爆发从 MIN_VCPUS 提升到的最大 CPU 数量。

  • MIN_VCPUS:保证可用于此虚拟机的最小 vCPU 数量。

  • GROUP_NAME:要为其供应虚拟机的单租户节点组的名称。

在自定义机器类型上设置过度使用水平

如需创建具有可在自定义机器类型上过度使用的 CPU 资源的单租户虚拟机,请省略 --machine-type 标志,并改用 --custom-cpu--custom-memory 标志来指定自定义机器的 CPU 数量和内存量(以 GB 为单位)。

REST

以下示例展示了如何使用 instances.insert 命令在具有可过度使用的 CPU 资源的固定机器类型上创建单租户虚拟机。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "scheduling": {
    "minNodeCpus": MIN_VCPUS,
    "nodeAffinities": [
      {
        "key": "compute.googleapis.com/node-group-name",
        "operator": "IN",
        "values": [
          "GROUP_NAME"
        ]
      }
    ]
  },
  ...
}

替换以下内容:

  • PROJECT_ID您的项目的 ID

  • ZONE:此请求对应的区域

  • MACHINE_TYPE_ZONE:托管机器类型的可用区。

  • MACHINE_TYPE:要为其供应单租户虚拟机的机器类型。该机器类型指定的 CPU 数量是指虚拟机可通过爆发从 MIN_VCPUS 提升到的最大 CPU 数量。

  • VM_NAME:过度使用 CPU 的单租户虚拟机的名称。

  • MIN_VCPUS:保证可用于此虚拟机的最小 vCPU 数量。

  • GROUP_NAME:要为其供应虚拟机的单租户节点组的名称。

在自定义机器类型上设置过度使用水平

如需创建具有可在自定义机器类型上过度使用的 CPU 资源的单租户虚拟机,请将 machineType 字段的值替换为 zones/zone/machineTypes/custom-CPUS-MEMORY,并将 CPUSMEMORY 分别替换为自定义机器类型的 CPU 数量和内存量(以 MB 为单位)。

更新 CPU 过度使用水平

以下过程演示了如何更新单租户虚拟机的 CPU 过度使用级别。

gcloud

  1. 如需修改正在运行的虚拟机的 CPU 过度使用水平,则必须先停止该虚拟机。如需停止虚拟机,请使用 gcloud compute instances stop 命令,如下所示:

    gcloud compute instances stop VM_NAME
    

    VM_NAME 替换为您要停止的实例的名称。

  2. 如需更新单租户虚拟机的 CPU 过度使用水平,请使用 gcloud compute instances set-scheduling 命令,如下所示:

    gcloud compute instances set-scheduling VM_NAME \
      --min-node-cpu=MIN_VCPUS

    替换以下内容:

    • VM_NAME:要修改 CPU 过度使用水平的单租户虚拟机的名称。

    • MIN_VCPUS:保证可用于此虚拟机的最小 vCPU 数量。

REST

  1. 如需修改正在运行的虚拟机的 CPU 过度使用水平,则必须先停止该虚拟机。如需停止虚拟机,请使用 instances.stop 方法构造 POST 请求,如下所示:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
    

    替换以下内容:

    • PROJECT_ID您的项目的 ID

    • ZONE:此请求对应的区域

    • VM_NAME:要修改 CPU 过度使用水平的单租户虚拟机的名称。

  2. 如需更新单租户虚拟机的 CPU 过度使用水平,请使用 instances.setScheduling 方法,如下所示:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
    {
    "minNodeCpus":MIN_VCPUS
    }
    

    替换以下内容:

    • PROJECT_ID您的项目的 ID

    • ZONE:此请求对应的区域

    • VM_NAME:要修改 CPU 过度使用水平的单租户虚拟机的名称。

    • MIN_VCPUS:保证可用于此虚拟机的最小 vCPU 数量。

为单租户虚拟机停用 CPU 过度使用功能

以下过程介绍了如何停用单租户虚拟机的 CPU 过度使用功能。

gcloud

以下示例展示了如何使用 gcloud compute instances set-scheduling 命令停用单租户虚拟机的 CPU 过度使用功能。

gcloud compute instances set-scheduling VM_NAME \
  --clear-min-node-cpu

替换以下内容:

  • VM_NAME:要停用 CPU 过度使用功能的单租户虚拟机的名称。

REST

以下示例展示了如何使用 instances.setScheduling 命令停用单租户虚拟机的 CPU 过度使用功能。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
{
  "minNodeCpus":null
}

替换以下内容:

  • PROJECT_ID您的项目的 ID

  • ZONE:此请求对应的区域

  • VM_NAME:要停用 CPU 过度使用功能的单租户虚拟机的名称。

查看 CPU 使用率

如需查看单租户节点组中单租户虚拟机的 CPU 使用率,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到单租户节点页面。

    转到“单租户节点”

  2. 点击节点组

  3. 点击包含过度使用 CPU 的虚拟机的单租户节点所属的单租户节点组。

  4. 点击包含过度使用 CPU 的虚拟机的单租户节点。

  5. 在单租户节点的名称下,查看 CPU 使用率CPU 过度使用类型最低 CPU 使用率

    • CPU 使用率表明了单租户节点上所有虚拟机的最大 CPU 数量的总和除以单租户节点类型指定的 CPU 数量得到的值。

      节点上可过度使用的 CPU 数量是分子减去分母得到的值,过度使用水平是分子与分母的商数。

    • 最低 CPU 使用率表明了为单租户节点上的所有虚拟机分配的最小 CPU 数量总和除以节点类型指定的 CPU 数量得到的值。

优化 CPU 过度使用水平

为了帮助您优化 CPU 过度使用水平,Compute Engine 提供了调度器等待时间指标。调度器等待时间指标指示虚拟机上所有 vCPU 的总计等待时间,并帮助您确定 CPU 过度使用对虚拟机性能的影响。

工作负载敏感度各有不同,但一般规则是将每秒累计调度器等待时间 20 毫秒(20 毫秒/秒)作为每个 vCPU 的最大等待时间。例如,如果一台虚拟机设置为 8 个 vCPU,则根据经验法则,此阈值应该设为 160 毫秒/秒,这将使每个 vCPU 的调度器等待时间平均为 20 毫秒/秒。最终,工作负载的性能要求将决定可接受的阈值。

  1. 在 Google Cloud 控制台中,转到 Monitoring 页面。

    转到“监控”

  2. 点击 Metrics Explorer

  3. 资源类型字段中,输入虚拟机实例

  4. 指标字段中,输入调度器等待时间

  5. (可选)点击提醒 (Alerting),设置以触发虚拟机等待时间阈值的提醒。

后续步骤