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


单租户节点上的 CPU 过度使用功能可让您安排实例,以便彼此共享其空闲 CPU 周期。这样一来,您可以超额预配单租户节点资源,并在单租户节点上安排比正常可用数量更多的虚拟机 CPU。CPU 过度使用功能对于利用率过低但可能会遇到相对不相关的爆发情况的工作负载特别有用。通过 CPU 过度使用功能,您可以利用原本不可用的 CPU 资源,从而降低费用。它还让您可以在单个主机上添加更多虚拟机,从而降低每个插槽或每个核心的许可需求。

设置要在单租户节点上预配的虚拟机时,您必须为该虚拟机选择机器类型。机器类型具有固定数量的 CPU,如果某个虚拟机没有使用相应机器类型提供的所有 CPU 资源,则可以将 CPU 资源提供给使用 CPU 过度使用功能的其他虚拟机;也就是说,单租户节点可能有其他可用的 CPU 资源。

分配给虚拟机的最小 CPU 数量的值是在创建虚拟机时或停止虚拟机后指定,该值表示保证可用于虚拟机的最小 CPU 数量。您可以为每个虚拟机设置此值,可让您在一个单租户节点上预配具有不同 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 资源,请执行以下操作:

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

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

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

    1. 为该虚拟机选择机器类型。机器类型上的 CPU 数量表示当最小 CPU 数量小于机器类型指定的 CPU 数量时,虚拟机可以通过爆发从最小 CPU 数量提升到的最大 CPU 数量。您可以为单租户节点上的每个虚拟机选择不同的机器类型,前提是不超过单租户节点的 CPU 和内存容量。

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

注意事项

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

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

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

限制

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

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

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

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

    • n1机器类型基于n1-node-96-624节点类型在节点组上预配的虚拟机

    • n2机器类型基于n2-node-80-640节点类型在节点组上预配的虚拟机

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

  • 基于未配置 CPU 过度使用功能配置的单租户节点模板的单租户节点组不允许预配启用了 CPU 过度使用功能的虚拟机;也就是说,您不能在单租户节点上安排一个未配置 CPU 过度使用功能的 CPU 数量下限的虚拟机。

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

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

价格

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

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

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

准备工作

设置 CPU 过度使用水平

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

控制台

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

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

    转到“单租户节点”页面

  2. 点击节点组

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

  4. 点击创建实例

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

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

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

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

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

gcloud

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

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

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:要为其预配虚拟机的单租户节点组的名称。

API

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

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

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/PROJECT_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"
        ]
      }
    ]
  },
  "disks": [
    {
      "boot": true,
      "initializeParams": {
        "sourceImage": "/projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
      }
    }
  ],
  "networkInterfaces": [
    {
      "network": "/global/networks/NETWORK",
    }
  ]
}

请替换以下内容:

  • PROJECT_ID您的项目的 ID

  • PROJECT_ZONE:托管您的项目的区域。

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

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

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

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

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

  • IMAGE_PROJECT:映像系列所属的映像项目的名称。

  • IMAGE_FAMILY:要从中将映像复制到虚拟机的映像系列的名称。

  • NETWORK:网络的名称,例如 default。根据您的配置,您可能需要添加 subnetwork 字段。

查看 CPU 使用率

按照以下步骤操作可以查看单租户节点组中单租户虚拟机的 CPU 使用率。

控制台

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

    转到“单租户节点”页面

  2. 点击节点组

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

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

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

    • CPU 使用率表明了单租户节点上所有虚拟机的最大 CPU 数量总和除以单租户节点类型指定的 CPU 数量得到的值。节点上可过度使用的 CPU 数量是分子减去分母得到的值,过度使用水平是分子与分母的商数。

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

优化 CPU 过度使用水平

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

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

控制台

  1. 在 Google Cloud Console 中,转到 Monitoring 页面:

    转到“监控”页面

  2. 点击 Metrics Explorer

  3. 查找资源类型和指标 (Find resource type and metric) 中,输入虚拟机实例 (VM Instance)。

  4. 选择指标 (Select a metric) 中,输入调度器等待时间 (Scheduler Wait Time)。

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

后续步骤