自定义可见 CPU 核心的数量可以精细控制许可费用,同时保持网络和永久性磁盘的性能。此自定义设置可减少虚拟机 (VM) 实例可用的 vCPU 数量。它不会更改机器类型或价格。
Compute Engine 将每个虚拟 CPU (vCPU) 实现为在物理 CPU 核心上运行的单个硬件多线程。如需减少虚拟机可用的 vCPU 数量,可以通过 Compute Engine 自定义可见 CPU 核心的数量。
可见核心是虚拟机使用的基础硬件中的 CPU 核心。默认情况下,虚拟机可见的 CPU 核心数为机器类型中的 vCPU 数量除以每个核心的线程数:
- 可见 CPU 核心 = 机器类型中的 vCPU / 每个核心的线程数
例如,c2-standard-60
机器类型指定了 60 个 vCPU。假设每个核心默认为 2 个线程,则可见 CPU 核心的数量为 30。如果将可见核心数从 30 个减少到 20 个,则正常运行的 vCPU 的数量会从 60 个减少到 40 个。
如果同时满足以下两个条件,请考虑自定义可见 CPU 核心的数量:
您运行的软件(例如 Windows Server 或 SQL Server)根据可用 vCPU 的数量获得许可。
您可以使用预定义机器类型,这些机器类型不允许您修改 vCPU 的数量或 RAM 的数量。
在自定义虚拟机可用的 vCPU 数量之前,请先考虑使用自定义机器类型。
所需的角色
如需获得自定义可见 CPU 核心数所需的权限,请让您的管理员为您授予项目的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1
) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色可提供自定义可见 CPU 核心数所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
自定义可见 CPU 核心数需要以下权限:
-
在创建虚拟机期间自定义可见 CPU 核心数:
- 针对项目的
compute.instances.create
权限 - 使用自定义映像创建虚拟机:针对映像的
compute.images.useReadOnly
权限 - 使用快照创建虚拟机:针对快照的
compute.snapshots.useReadOnly
权限 - 使用实例模板创建虚拟机:针对实例模板的
compute.instanceTemplates.useReadOnly
权限 - 为虚拟机分配旧版网络:针对项目的
compute.networks.use
权限 - 为虚拟机指定静态 IP 地址:针对项目的
compute.addresses.use
权限 - 使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的
compute.networks.useExternalIp
权限 - 为虚拟机指定子网:针对项目或所选子网的
compute.subnetworks.use
权限 - 在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的
compute.subnetworks.useExternalIp
权限 - 为虚拟机设置虚拟机实例元数据:针对项目的
compute.instances.setMetadata
权限 - 为虚拟机设置标记:针对虚拟机的
compute.instances.setTags
权限 - 为虚拟机设置标签:针对虚拟机的
compute.instances.setLabels
权限 - 为虚拟机设置要使用的服务账号:针对虚拟机的
compute.instances.setServiceAccount
权限 - 为虚拟机创建新磁盘:针对项目的
compute.disks.create
权限 - 以只读或读写模式挂接现有磁盘:针对磁盘的
compute.disks.use
权限 - 以只读模式挂接现有磁盘:针对磁盘的
compute.disks.useReadOnly
权限
- 针对项目的
-
使用实例模板自定义一组虚拟机上的可见 CPU 核心数:您需要拥有在创建虚拟机期间使用的所有权限以及针对项目的
compute.instanceTemplates.create
权限
vCPU 数量和每个核心的线程数
机器类型上的 vCPU 总数等于可见 CPU 核心数量乘以每个核心的线程数。对于大多数机器系列而言,每个核心的线程数为 2,但您可以手动设置每个核心的线程数为 1。
下表使用 c2-standard-60
机器类型作为示例,展示了可见的 CPU 核心数、每个核心的线程数以及可用的 vCPU 总数。
机器类型 | 可见的 CPU 核心数 | 每个核心的线程数 | 可用 vCPU 数量 |
---|---|---|---|
c2-standard-60 |
30 (默认) |
2 (默认) |
60 |
c2-standard-60 |
30 (默认) |
1 |
30 |
c2-standard-60 |
20 |
2 (默认) |
40 |
c2-standard-60 |
20 |
1 |
20 |
性能考虑因素
减少可见核心数可能会影响虚拟机的性能。
Persistent Disk
- 永久性磁盘的性能限制取决于机器类型,不受可见 CPU 核心数量的影响。如需了解详情,请参阅块存储性能。
网络出站流量
- 网络出站流量的带宽限制与机器类型匹配,不受可见 CPU 核心数量的影响。不过,网络性能会因虚拟机可访问的 vCPU 数量而异。例如,具有一个可见 CPU 核心的
n2-standard-16
机器类型可能无法充分利用 32 Gbps 的连接。
价格
减少可见核心数可能会影响虚拟机的费用。
操作系统许可费用
- 您可以通过减少可见 CPU 核心的数量来降低某些操作系统的许可费用。适用的操作系统是针对虚拟机可用的每个 vCPU 向您收费的操作系统,例如 Windows Server 和 SQL Server。如需详细了解这些操作系统在 Compute Engine 上的许可选项,请参阅 Microsoft 许可。
虚拟机费用、配额和容量
- 当您自定义可见 CPU 核心数时,虚拟机费用、配额和容量保持不变,因为 Compute Engine 会收取配额费用、跟踪配额并在虚拟机的机器类型上分配空间,如同虚拟机使用机器类型的 CPU 核心数一样。如需详细了解 Compute Engine 如何对虚拟机进行计费,请参阅虚拟机实例价格。
限制
当虚拟机处于
RUNNING
状态时,您无法自定义可见 CPU 核心数。如需详细了解虚拟机状态,请参阅虚拟机实例生命周期。在 Google Cloud 控制台中,当可见核心数减少时,CPU 利用率指标无法扩容到 100%。CPU 利用率指标仅限于可见 CPU 核心数除以最大 CPU 核心数。
支持的机器类型和每个机器类型的有效值
许多机器类型都支持自定义可见 CPU 核心的数量。可见 CPU 核心数的值必须为整数。最大值为机器类型中的 vCPU 数量(或加速器优化机器类型的 GPU 数量)除以虚拟机的每个核心线程数。
下表显示了支持此自定义的机器类型,以及这些系列中机器类型的可见 CPU 核心的相应有效值。
机器类型系列 | 预定义 vCPU 数量* | 可见 CPU 核心的有效值 |
---|---|---|
通用 | ||
C4 | 4, 8, 16, 32, 48 | 不限 |
C4 | 96 | 2 的倍数 |
C4 | 192 | 4 的倍数 |
C3D | ≤ 180 | 不限 |
C3D | 360 | 2 的倍数 |
C3 | 4、8、22、44 | 1 的倍数 |
C3 | 88 | 2 的倍数 |
C3 | 176 | 4 的倍数 |
c3-*-metal |
192 | 不支持 |
E2 | ≤ 32 | 不限 |
N2 | ≤ 32 | 不限 |
N2 | > 32 | 2 的倍数 |
N2D | ≤ 24 | 不限 |
N2D | > 24 | 2 的倍数 |
N4 | ≤ 80 | 不限 |
N1 | ≤ 64 | 不限 |
N1 | > 64 | 2 的倍数 |
N1(针对 TPU 进行了优化) | 48 | 不限 |
N1(针对 TPU 进行了优化) | 96 | 2 的倍数 |
存储优化 | ||
Z3 | 88 | 2 的倍数 |
Z3 | 176 | 4 的倍数 |
计算优化 | ||
H3 | 88 | 4 的倍数 |
C2 | 4、8、16、30 | 不限 |
C2 | 60 | 2 的倍数 |
内存优化 | ||
M3 | 128 | 2 的倍数 |
M3 | 32、64 | 不限 |
M2 | 208 | 4 的倍数 |
M2 | 416 | 8 的倍数 |
M1 | 40 | 不限 |
M1 | 80、96 | 2 的倍数 |
M1 | 160 | 4 的倍数 |
加速器优化 | ||
A3 | 208 | 2 的倍数 |
A2 | ≤ 48 | 不限 |
A2 | 96 | 2 的倍数 |
G2 | ≤ 48 | 不限 |
G2 | 96 | 2 的倍数 |
自定义虚拟机创建过程中可见 CPU 核心的数量
如需在创建单个虚拟机时自定义可见 CPU 核心数,请使用 Google Cloud 控制台、gcloud CLI 或 Compute Engine API。
以下示例显示如何创建具有较少可见 CPU 核心数量的 SQL Server 虚拟机。
控制台
如需在创建虚拟机时自定义可见 CPU 核心数,请执行以下操作:
- 在机器配置 > 高级配置 > 可见核心数中,选择可见核心的数量。
gcloud
要创建具有较少可见 CPU 核心数量的 SQL Server 虚拟机,请使用以下 gcloud compute instances create
命令:
gcloud compute instances create VM_NAME \ --image-project=windows-sql-cloud \ --image-family=sql-ent-2019-win-2019 \ --machine-type=MACHINE_TYPE \ --visible-core-count=VISIBLE_CORE_COUNT \ --zone=ZONE
替换以下内容:
VM_NAME
:虚拟机的名称。MACHINE_TYPE
:支持的机器类型,例如c2-standard-60
。VISIBLE_CORE_COUNT
:可见 CPU 核心数。例如,使用c2-standard-60
机器类型时,如果设置为20
并且每个核心的线程数为2
,则 60 个 CPU 中的 40 个可见。ZONE
:要在其中创建虚拟机的可用区。
REST
要创建具有较少可见 CPU 核心数量的 SQL Server 虚拟机,请使用以下 instances.insert
方法:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM_NAME", ... "advanced_machine_features": { ... "visibleCoreCount": "VISIBLE_CORE_COUNT" }, ... }
替换以下内容:
PROJECT_ID
:项目的 ID。ZONE
:要在其中创建虚拟机的可用区。VM_NAME
:虚拟机的名称。VISIBLE_CORE_COUNT
:可见 CPU 核心数。例如,使用c2-standard-60
机器类型时,如果设置为20
并且每个核心的线程数为2
,则 60 个 CPU 中的 40 个可见。
使用实例模板自定义一组虚拟机上可见 CPU 核心的数量
如需在使用实例模板创建虚拟机时自定义可见 CPU 核心数,请使用 Google Cloud 控制台、gcloud CLI 或 Compute Engine API。
以下示例展示了如何使用实例模板创建一组具有更少可见 CPU 核心数量的相同 SQL Server 虚拟机。
控制台
如需在创建实例模板时自定义可见 CPU 核心数,请执行以下操作:
- 在机器配置 > 高级配置 > 可见核心数中,选择可见核心的数量。
gcloud
使用以下
gcloud compute instance-templates create
命令为 SQL Server 虚拟机创建实例模板,每个实例模板都有更少的可见 CPU 核心数量:gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \ --image-project=windows-sql-cloud \ --image-family=sql-ent-2019-win-2019 \ --machine-type=MACHINE_TYPE \ --visible-core-count=VISIBLE_CORE_COUNT \ --zone=ZONE
替换以下内容:
INSTANCE_TEMPLATE_NAME
:实例模板的名称。MACHINE_TYPE
:支持的机器类型,例如c2-standard-60
。VISIBLE_CORE_COUNT
:可见 CPU 核心的数量。例如,使用c2-standard-60
机器类型时,如果设置为20
并且每个核心的线程数为2
,则 60 个 CPU 中的 40 个可见。ZONE
:要在其中创建虚拟机的可用区。
使用以下
gcloud compute instances create
命令创建 SQL Server 虚拟机,每个虚拟机都具有更少的可见 CPU 核心数量:gcloud compute instances create INSTANCE_NAMES \ --source-instance-template=INSTANCE_TEMPLATE_NAME
替换以下内容:
INSTANCE_NAMES
:要从实例模板创建的虚拟机的名称(以空格分隔)INSTANCE_TEMPLATE_NAME
:要从中创建虚拟机的实例模板的名称
REST
使用以下
instanceTemplates.insert
方法为 SQL Server 虚拟机创建实例模板,每个实例模板都有更少的可见 CPU 核心数量:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates { "name": "INSTANCE_TEMPLATE_NAME", ... "advanced_machine_features": { ... "visible_core_count": "VISIBLE_CORE_COUNT" }, ... }
替换以下内容:
PROJECT_ID
:项目的 ID。INSTANCE_TEMPLATE_NAME
:实例模板的名称。VISIBLE_CORE_COUNT
:可见 CPU 核心的数量。例如,使用c2-standard-60
机器类型时,如果设置为20
并且每个核心的线程数为2
,则 60 个 CPU 中的 40 个可见。
使用以下
instances.insert
方法创建 SQL Server 虚拟机,每个虚拟机的具有更少的 CPU 核心数量:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances?sourceInstanceTemplate=INSTANCE_TEMPLATE_NAME { "name": "VM_NAME", ... }
替换以下内容:
PROJECT_ID
:项目的 IDZONE
:要在其中创建虚拟机的可用区INSTANCE_TEMPLATE_NAME
:要从中创建虚拟机的实例模板的名称VM_NAME
:要从实例模板创建的虚拟机的名称
自定义可见 CPU 核心数
如需自定义现有虚拟机上的可见 CPU 核心数,请使用 Google Cloud 控制台、gcloud CLI 或 Compute Engine API。
如果使用实例模板自定义一组虚拟机上的可见 CPU 核心数量,则必须创建新的实例模板,然后基于该实例模板创建新的虚拟机。如需详细了解实例模板,请参阅实例模板。
控制台
如需自定义现有虚拟机上的可见 CPU 核心数,请执行以下操作:
停止虚拟机。
在机器配置 > 高级配置 > 可见核心数中,选择可见核心的数量。
重启虚拟机。
gcloud
如需更新现有虚拟机上可见 CPU 核心数量的值,请按照以下步骤操作。如需了解详情,请参阅更新实例属性。
使用
gcloud compute instances export
命令将现有虚拟机属性导出到文件。在包含导出属性的文件中,修改或添加以下内容的值:
advancedMachineFeatures: visibleCoreCount: VISIBLE_CORE_COUNT
使用带有
--most-disruptive-allowed-action=RESTART
的gcloud compute instances update-from-file
命令更新虚拟机属性。
REST
如需更新虚拟机的可见 CPU 核心数量,请使用以下 instances.update
方法:
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME?most_disruptive_allowed_action=RESTART { ... "advanced_machine_features": { ... "visible_core_count": "VISIBLE_CORE_COUNT" }, ... }
替换以下内容:
PROJECT_ID
:项目的 IDZONE
:包含虚拟机的可用区VM_NAME
:要从中导出属性的虚拟机的名称VISIBLE_CORE_COUNT
:可见 CPU 核心的数量
后续步骤
了解如何查看可见 CPU 核心数。
了解如何设置每个核心的线程数。