Google Cloud 会考虑每个计算实例的带宽,而不是考虑每个虚拟网络接口 (vNIC) 或 IP 地址的带宽。实例的机器类型定义了其最大可能的出站流量速率;但是,您只能在特定情况下达到此最大可能的出站流量速率。
本页面概述了网络带宽限制,这些限制对于规划部署非常有用。它使用两个维度对带宽进行分类:
- 出站流量或入站流量:此页面上使用的出站流量和入站流量始终从 Google Cloud 实例角度来看:
- 从 Google Cloud 实例发送的数据包构成其出站流量。
- 发送到 Google Cloud 实例的数据包构成其入站流量。
- 数据包的路由方式:可以使用下一个跃点位于 VPC 网络中的路由或 VPC 网络外部的路由从发送方实例路由数据包或将数据包路由到接收方实例。
本页面上的所有信息均适用于 Compute Engine 计算实例以及依赖 Compute Engine 实例的产品。例如,Google Kubernetes Engine 节点是 Compute Engine 实例。
影响网络带宽的配置
如需获得尽可能高的入站流量和出站流量带宽,请为计算实例配置每个虚拟机的 Tier_1 网络性能。
更多虚拟网络接口 (vNIC) 和每个 vNIC 更多 IP 地址都不会增加计算实例的入站流量或出站流量带宽。例如,具有 22 个 vCPU 的 C3 虚拟机的总出站流量带宽上限为 23 Gbps。如果您配置具有两个 vNIC 的 C3 虚拟机,则该虚拟机的总出站流量带宽仍然限制为 23 Gbps,而不是每个 vNIC 的带宽为 23 Gbps。
Dynamic Network Interface(预览版)使用其父 vNIC 的带宽。父 vNIC 内没有流量隔离。来自 Dynamic NIC 的网络流量可能会导致与同一父级 vNIC 关联的其他 Dynamic NIC 无带宽可用。为了避免这种冲突,您可以使用 Linux 流量控制 (TC) 来制定特定于应用的流量调整政策。这些政策有助于实现公平性或某些类型的优先级。如需进行优先级排序,您可以将流量(例如 Dynamic NIC 的流量)映射到流量类别,然后将该流量类别映射到服务质量。如需查看此方法的示例,请参阅使用 Red Hat 调整流量。
运行 Windows 操作系统的 Compute Engine 实例不支持 Dynamic NIC。
带宽摘要
下表展示了基于数据包是从计算实例发送(出站流量)还是由计算实例接收(入站流量)这两种情况的最大可能带宽以及数据包路由方法。
出站流量带宽限制
在 VPC 网络中路由 |
|
---|---|
在 VPC 网络外部路由 |
|
入站流量带宽限制
在 VPC 网络中路由 |
|
---|---|
在 VPC 网络外部路由 |
|
出站带宽
Google Cloud 使用每个实例的最大出站流量速率限制出站(出站流量)带宽。这些速率取决于发送数据包的计算实例的机器类型,以及是使用 VPC 网络内的路由还是 VPC 网络外的路由来访问数据包的目标位置。出站带宽包括实例的所有 NIC 发出的数据包以及传输到与实例连接的所有 Hyperdisk 和 Persistent Disk 卷的数据。
每个实例的最大出站流量带宽
每个实例的最大出站流量带宽通常为 2 Gbps,但存在一些差异和例外情况,具体取决于机器系列。下表显示了 VPC 网络中路由的流量的出站流量带宽上限范围。
下表总结了每个机器系列的出站流量带宽上限。您可以在特定机器家族页面上找到列出的每种机器类型对应的每个实例的出站流量带宽上限(使用表格中每个机器系列的链接)。
每个实例的最大出站流量上限 | ||
---|---|---|
机器系列 | 标准版 | Tier_1 网络 |
C4、C4A 和 C4D | 100 Gbps | 200 Gbps |
C3 和 C3D | 100 Gbps | 200 Gbps |
C2 和 C2D | 32 Gbps | 100 Gbps |
E2 | 16 Gbps | 不适用 |
E2 共享核心 | 2 Gbps | 不适用 |
H3 | 200 Gbps | 不适用 |
M4 | 100 Gbps | 200 Gbps |
M3 | 32 Gbps | 100 Gbps |
M2 | 在 Intel Cascade Lake 或更高版本的 CPU 上为 32 Gbps 在其他 CPU 平台上为 16 Gbps |
不适用 |
M1 | 32 Gbps | 不适用 |
N4 | 50 Gbps | 不适用 |
N2 和 N2D | 32 Gbps | 100 Gbps |
N1(不包括配备 1 个 vCPU 的虚拟机) | 在 Intel Skylake 及更高版本的 CPU 上为 32 Gbps 在更早的 CPU 平台上为 16 Gbps |
不适用 |
配备 1 个 vCPU 的 N1 机器类型 | 2 Gbps | 不适用 |
N1 共享核心(f1-micro 和 g1-small) | 1 Gbps | 不适用 |
T2A 和 T2D | 32 Gbps | 不适用 |
X4 | 100 Gbps | 不适用 |
Z3 | 100 Gbps | 200 Gbps |
如需了解加速器优化机器系列的网络带宽信息,请参阅网络和 GPU 机器。
不保证能达到每个实例的最大出站流量带宽。根据如下所列因素(不详尽),实际的出站流量带宽可能降低:
- 在支持 VirtIO 和 gVNIC 的计算实例中使用 VirtIO 而非 gVNIC
- 数据包大小
- 协议开销
- 流数量
- 计算实例客机操作系统的以太网驱动程序设置,例如校验和分流与 TCP 细分分流 (TSO)
- 网络拥塞度
- 在永久性磁盘 I/O 与其他网络出站流量竞争的情况下,网络带宽上限的 60% 将分配给永久性磁盘写入,剩余 40% 将分配给其他网络出站流量。如需了解详情,请参阅影响磁盘性能的因素。
如需获得尽可能高的每个实例的最大出站流量带宽,请执行以下操作:
- 使用更大的机器类型来启用每个虚拟机的 Tier_1 网络性能。
- 使用网络拓扑支持的最大 VPC 网络最大传输单元 (MTU)。较大的 MTU 可以减少数据包标头开销并增加载荷数据吞吐量。
- 使用最新的 gVNIC 驱动程序版本。
- 使用第三代或更高版本的机器系列,这些机器系列使用 Titanium 将网络处理从主机 CPU 分流到其他设备。
流向 VPC 网络中可路由的目标位置的出站流量
从发送方实例的角度来看,对于可通过 VPC 网络中的路由访问的目标 IP 地址,Google Cloud 会使用以下规则限制出站流量:
- 每个虚拟机的最大出站流量带宽:每个实例的最大出站流量带宽部分中所述的每个实例的最大出站流量带宽。
- 每个项目的区域间出站流量带宽:如果发送方实例和内部目标位置或其下一个跃点位于不同的区域,Google Cloud 会根据发送方实例的区域和项目以及内部目标位置或下一个跃点的区域施加配额。如需详细了解此配额,请参阅 VPC 配额和限制文档中的来自计算实例的区域间网络出站流量带宽 (Mbps)。
- Cloud VPN 和 Cloud Interconnect 限制:将实例的流量发送到可通过下一个跃点 Cloud VPN 隧道或 Cloud Interconnect VLAN 连接路由的内部 IP 地址目标位置时,出站流量带宽受到以下因素的限制:
- 每个 Cloud VPN 隧道的数据包速率和带宽上限
- 每个 VLAN 连接的数据包速率和带宽上限
- 为了通过 ECMP 路由充分利用多个下一个跃点 Cloud VPN 隧道或 Cloud Interconnect VLAN 连接的带宽,您必须使用多个 TCP 连接(唯一 5 元组)。
VPC 网络中可路由的目标位置包含以下所有目标位置,从发送方实例的角度来看,每个目标位置都可以通过其下一个跃点并非默认互联网网关的路由来进行访问:
- 子网的主要 IPv4 和子网的次要 IPv4 地址范围中的区域级内部 IPv4 地址,包括以下目标资源使用的专用 IPv4 地址范围和以非公开方式使用的公共 IPv4 地址范围:
- 接收方实例网络接口 (vNIC) 的主要内部 IPv4 地址。(当发送方实例连接到另一个实例的 vNIC 外部 IPv4 地址时,数据包使用下一个跃点默认互联网网关进行路由,因此流向 VPC 网络外部的目标位置的出站流量适用。)
- 接收方实例 vNIC 的别名 IP 范围内的内部 IPv4 地址。
- 内部转发规则(用于协议转发或内部直通式网络负载均衡器)的内部 IPv4 地址。
- 以下目标资源的全球内部 IPv4 地址:
- 以下目标资源使用的内部 IPv6 子网地址范围:
- 分配给双栈或仅 IPv6(预览版)接收方实例 vNIC 的
/96
IPv6 地址范围内的 IPv6 地址。 - 内部转发规则(用于协议转发或内部直通式网络负载均衡器)的
/96
IPv6 地址范围内的 IPv6 地址。
- 分配给双栈或仅 IPv6(预览版)接收方实例 vNIC 的
- 使用 VPC 网络中的子网路由或对等互连子网路由,或者通过 VPC 网络中不使用默认互联网网关的下一个跃点的自定义路由来路由数据包时,这些目标资源使用的外部 IPv6 子网地址范围:
- 分配给双栈或仅 IPv6(预览版)接收方实例 vNIC 的
/96
IPv6 地址范围内的 IPv6 地址。 - 外部转发规则(用于协议转发或外部直通式网络负载均衡器)的
/96
IPv6 地址范围内的 IPv6 地址。
- 分配给双栈或仅 IPv6(预览版)接收方实例 vNIC 的
- 可通过以下 VPC 网络路由访问的其他目标位置:
以下列表对从发送方实例传入内部目标位置的流量进行了排名(按可能的带宽从高到低的顺序):
- 同一可用区中的计算实例之间
- 同一区域的不同可用区中的计算实例之间
- 不同区域中的计算实例之间
- 从计算实例到 Google Cloud API 和服务(使用专用 Google 访问通道或从实例的外部 IP 地址访问 Google API)。这包括 Google API 的 Private Service Connect 端点。
流向 VPC 网络外部的目标位置的出站流量
从发送方实例的角度来看,对于 VPC 网络外部的目标 IP 地址, Google Cloud 会将出站流量限制为下列其中一种速率(以先达到者为准):
每个实例的出站流量带宽:对于从计算实例到 VPC 网络外部的目标位置的所有连接,其最大带宽为每个实例的最大出站流量带宽的较小值和以下速率之一:
- 25 Gbps(如果已启用 Tier_1 网络)
- 7 Gbps(如果未启用 Tier_1 网络)
- 1 Gbps(针对 H3 实例)
- 对于支持多个物理 NIC 的机器系列(例如 A3),每个物理 NIC 7 Gbps。
例如,即使
c3-standard-44
实例的每个虚拟机的最大出站流量带宽为 32 Gbps,从c3-standard-44
虚拟机到外部目标位置的每个虚拟机的出站流量带宽也为 25 Gbps 或 7 Gbps,具体取决于是否启用了 Tier_1 网络。每个流的最大出站流量速率:对于每个唯一 5 元组连接,从计算实例到 VPC 网络外部的目标位置的最大带宽为 3 Gbps,但 H3 除外,其最大带宽为 1 Gbps。
每个项目的互联网出站流量带宽:对于从项目的每个区域中的计算实例到 VPC 网络外部的目标位置的所有连接,其最大带宽由项目的互联网出站流量带宽配额来决定。
VPC 网络外部的目标位置包括以下所有目标位置,每个目标位置都可以通过其下一个跃点为默认互联网网关的发送方实例 VPC 网络中的路由来进行访问:
- 外部代理网络负载均衡器和外部应用负载均衡器的全球外部 IPv4 和 IPv6 地址
- Google Cloud 资源的区域级外部 IPv4 地址,包括虚拟机 vNIC 外部 IPv4 地址,以及外部 IPv4 地址(用于外部协议转发、外部直通式网络负载均衡器以及将响应数据包发送到 Cloud NAT 网关)。
- 具有外部 IPv6 地址范围(由双栈或仅 IPv6 实例 [预览版]、外部协议转发和外部直通式网络负载平衡器的外部 IPv6 地址使用)的双栈或仅 IPv6 子网(预览版)中的区域级外部 IPv6 地址。子网必须位于单独的非对等互连 VPC 网络中。必须可以使用位于发送方实例的 VPC 网络中并且其下一个跃点是默认互联网网关的路由访问目标 IPv6 地址范围。如果具有外部 IPv6 地址范围的双栈或仅 IPv6 子网位于同一 VPC 网络或对等互连 VPC 网络中,请参阅流向 VPC 网络中可路由的目标位置的出站流量。
- 在发送方实例的 VPC 网络中可通过静态路由访问的其他外部目标位置,前提是该路由的下一个跃点是默认互联网网关。
如需详细了解哪些 Google Cloud 资源使用哪些类型的外部 IP 地址,请参阅外部 IP 地址。
入站带宽
Google Cloud 会根据传入数据包路由到接收方计算实例的方式处理入站(入站流量)带宽。
流向 VPC 网络中可路由的目标位置的入站流量
接收方实例可以在其机器类型、操作系统和其他网络条件允许的情况下处理任意数量的传入数据包。如果传入数据包是使用 VPC 网络内部的路由传送的,则 Google Cloud 不会对传送到实例的传入数据包施加任何有意的带宽限制:
- 接收方实例的 VPC 网络中的子网路由
- 对等互连 VPC 网络中的对等互连子网路由
- 满足下述条件的另一个网络中的路由:下一个跃点是 Cloud VPN 隧道、Cloud Interconnect (VLAN) 连接,或者路由器设备实例(其位于接收方实例的 VPC 网络中)
对于在 VPC 网络中路由的数据包,其目标位置包括:
- 接收方实例网络接口 (NIC) 的主要内部 IPv4 地址。主要内部 IPv4 地址是子网的主要 IPv4 地址范围中的区域级内部 IPv4 地址。
- 接收方实例 NIC 的别名 IP 范围中的内部 IPv4 地址。别名 IP 范围可以来自子网的主要 IPv4 地址范围或其中一个次要 IPv4 地址范围。
- 分配给双栈或仅 IPv6(预览版)接收方实例 NIC 的
/96
IPv6 地址范围内的 IPv6 地址。计算实例 IPv6 范围可以来自以下子网 IPv6 范围:- 内部 IPv6 地址范围。
- 外部 IPv6 地址范围(如果使用本部分前面列出的某个 VPC 网络路由在内部将传入数据包路由到接收方实例)。
- 接收方实例的内部协议转发或后端为接收方实例的内部直通式网络负载均衡器使用的转发规则的内部 IPv4 地址。内部转发规则 IPv4 地址来自子网的主要 IPv4 地址范围。
- 接收方实例的内部协议转发或后端为接收方实例的内部直通式网络负载均衡器所用转发规则的
/96
IPv6 范围内的内部 IPv6 地址。内部转发规则 IPv6 地址来自子网的内部 IPv6 地址范围。 - 接收方实例或外部直通式网络负载均衡器的外部协议转发所用的转发规则的
/96
IPv6 范围内的外部 IPv6 地址。接收方实例是负载均衡器的后端(如果使用本节前面列出的某个路由在 VPC 网络中路由传入数据包)。外部转发规则 IPv6 地址来自子网的外部 IPv6 地址范围。 - 将接收方实例用作下一个跃点实例(
next-hop-instance
或next-hop-address
)的自定义静态路由的目标范围内的 IP 地址。 - 使用内部直通式网络负载均衡器 (
next-hop-ilb
) 的下一个跃点的自定义静态路由目标范围内的 IP 地址(如果接收方实例是该负载均衡器的后端)。
流向 VPC 网络外部的目标位置的入站流量
Google Cloud 对使用 VPC 网络外部的路由传送到接收方实例的传入数据包施加以下带宽限制。涉及负载均衡时,带宽限制会单独应用于每个接收方实例。
对于不支持多个物理 NIC 的机器系列,适用的入站带宽限制共同应用于所有虚拟网络接口 (vNIC)。该限制是以下速率中先达到的那一个:
- 每秒 180 万个数据包
- 30 Gbps
对于支持多个物理 NIC 的机器系列(例如 A3),适用的入站带宽限制会单独应用于每个物理 NIC。该限制是以下速率中先达到的那一个:
- 每个物理 NIC 每秒 180 万个数据包
- 每个物理 NIC 30 Gbps
对于使用 VPC 网络外部的路由进行路由的数据包,其目标位置包括:
- 在接收方实例的某个网络接口 (NIC) 上通过一对一 NAT 访问配置分配的外部 IPv4 地址。
- 为双栈或仅 IPv6(预览版)接收方实例的 vNIC 分配的
/96
IPv6 地址范围内的外部 IPv6 地址(如果使用接收方实例的 VPC 网络外部的路由来路由传入数据包)。 - 接收方实例的外部协议转发或后端为接收方实例的外部直通式网络负载均衡器使用的转发规则的外部 IPv4 地址。
- 接收方实例的外部协议转发或外部直通式网络负载均衡器所用转发规则的
/96
IPv6 范围内的外部 IPv6 地址。如果使用 VPC 网络外部的路由来路由传入数据包,则接收实例必须是负载均衡器的后端。 - 由 Cloud NAT 处理的已建立入站响应。
使用巨型帧最大限度提高网络带宽
如需接收和发送巨型帧,请配置计算实例使用的 VPC 网络;将最大传输单元 (MTU) 设置为更大的值,最高可达 8896。
较高的 MTU 值会增加数据包大小并降低数据包标头开销,从而增加载荷数据吞吐量。
您可以在虚拟机实例中将巨型帧与 gVNIC 驱动程序 1.3 版或更高版本搭配使用,也可以在裸金属实例中将巨型帧与 IDPF 驱动程序搭配使用。并非所有 Google Cloud 公共映像都包含这些驱动程序。如需详细了解操作系统对巨型帧的支持,请参阅操作系统详细信息页面上的网络功能标签页。
如果您使用的操作系统映像不完全支持巨型帧,则可以手动安装 gVNIC 驱动程序 v1.3.0 或更高版本。Google 建议您安装具有 Latest
标记的 gVNIC 驱动程序版本,以便从更多功能和 bug 修复中获益。您可以从 GitHub 下载 gVNIC 驱动程序。
如需在客户机操作系统中手动更新 gVNIC 驱动程序版本,请参阅在不支持的操作系统上使用。
巨型帧和 GPU 机器
对于 GPU 机器类型,请使用建议的巨型帧 MTU 设置。如需了解详情,请参阅建议的巨型帧 MTU 设置。
接收和传输队列
系统会为计算实例的每个 NIC 或 vNIC 分配一定数量的接收和传输队列,以处理来自网络的数据包。
- 接收队列 (RX):接收数据包的队列。当 NIC 从网络收到数据包时,NIC 会从队列中选择传入数据包的描述符,对其进行处理,并通过中断从关联到 vCPU 核心的数据包队列将数据包移交给客户机操作系统。如果 RX 队列已满,且没有可用于放置数据包的缓冲区,则系统会丢弃该数据包。 如果应用过度使用也关联到所选数据包队列的 vCPU 核心,通常会发生这种情况。
- 传输 (TX) 队列:传输数据包的队列。当客户机操作系统发送数据包时,系统会分配一个描述符并将其放入 TX 队列。然后,NIC 会处理该描述符并传输数据包。
默认队列分配
除非您明确为 NIC 分配队列数量,否则您可以按照以下方式设计一个算法,供 Google Cloud 用于为每个 NIC 分配固定数量的 RX 和 TX 队列:
- 裸金属实例
- 对于裸金属实例,只有一个 NIC,因此队列数量上限为 16。
- 使用 gVNIC 网络接口的虚拟机实例
对于 C4 实例,为了提高性能,以下配置使用固定数量的队列:
- 对于具有 2 个 vCPU 的 Linux 实例,队列数量为 1。
- 对于具有 4 个 vCPU 的 Linux 实例,队列数量为 2。
对于其他机器系列,队列数量取决于机器系列是否使用 Titanium。
对于使用 Titanium 的第三代(不含 M3)及更高版本的实例:
将 vCPU 数量除以 vNIC 数量 (
num_vcpus/num_vnics
),并舍弃任何余数。对于不使用 Titanium 的第一代和第二代虚拟机:
将 vCPU 数量除以 vNIC 数量,然后将结果除以 2 (
num_vcpus/num_vnics/2
)。舍弃任何余数。
如需完成默认队列数量计算,请执行以下操作:
如果计算结果小于 1,请改为为每个 vNIC 分配一个队列。
确定计算结果是否大于每个 vNIC 的队列数量上限(即
16
)。如果计算结果大于16
,忽略计算结果,并为每个 vNIC 分配 16 个队列。
- 使用 VirtIO 网络接口或自定义驱动程序的虚拟机实例
将 vCPU 数量除以 vNIC 数量,并舍弃任何余数 -
[number of vCPUs/number of vNICs]
。如果计算结果小于 1,请改为为每个 vNIC 分配一个队列。
确定计算结果是否大于每个 vNIC 的队列数量上限(即
32
)。如果计算结果大于32
,忽略计算结果,并为每个 vNIC 分配 32 个队列。
示例
以下示例展示了如何计算虚拟机实例的默认队列数量:
如果虚拟机实例使用 VirtIO 并且有 16 个 vCPU 和 4 个 vNIC,则计算得出的数量为
[16/4] = 4
。 Google Cloud 会为每个 vNIC 分配四个队列。如果虚拟机实例使用 gVNIC 并且有 128 个 vCPU 和 2 个 vNIC,则计算得出的数量为
[128/2/2] = 32
。 Google Cloud 会为每个 vNIC 分配相应的每个 vNIC 的最大队列数量。 Google Cloud会为每个 vNIC 分配16
个队列。
在 Linux 系统上,您可以使用 ethtool
为 vNIC 配置少于 Google Cloud 为每个 vNIC 分配的队列数量的队列。
使用 Dynamic Network Interface 时的队列数量
如果您将 Dynamic Network Interface 与网络接口搭配使用,队列数量不会发生变化。Dynamic NIC 没有自己的接收和传输队列;它使用与父 vNIC 相同的队列。
为虚拟机实例自定义队列分配
您也可以不使用默认队列分配,而是在使用 Compute Engine API 创建新计算实例时为每个 vNIC 分配自定义队列数(RX 和 TX 的总和)。
您指定的自定义队列数量必须符合以下规则:
您可以为每个 vNIC 分配的队列数下限为 1。
您可以为虚拟机实例的每个 vNIC 分配的队列数量上限是 vCPU 数量的下限,或每个 vNIC 的队列数量上限(具体取决于驱动程序类型):
如果您为计算实例的所有 NIC 分配自定义队列数,则队列数分配的总和必须小于或等于分配给实例的 vCPU 数量。
您可以为 vNIC 超额订阅自定义队列数。换句话说,分配给虚拟机实例的所有 NIC 的队列数之和可以大于实例的 vCPU 数量。如需超额订阅自定义队列数量,虚拟机实例必须满足以下条件:
- 使用 gVNIC 作为实例配置的所有 NIC 的 vNIC 类型。
- 使用支持 Tier_1 网络的机器类型。
- 已启用 Tier_1 网络。
- 为实例配置的所有 NIC 指定了自定义队列数。
如果使用队列超额订阅,虚拟机实例的队列数上限为 NIC 数量的 16 倍。因此,如果您为具有 30 个 vCPU 的实例配置了 6 个 NIC,则最多可为该实例配置 96 个自定义队列(即 16 * 6)。
示例
如果一个虚拟机实例有 8 个 vCPU 和 3 个 vNIC,则实例的队列数量上限是 vCPU 的数量,即 8 个。您可以为
nic0
分配 1 个队列,为nic1
分配 4 个队列,为nic2
分配 3 个队列。在此示例中,您不能在保持其他两个 vNIC 队列分配不变的情况下为nic2
分配 4 个队列,因为已分配队列的总数不能超过 vCPU 的数量。如果您的 N2 虚拟机有 96 个 vCPU 和 2 个 vNIC,则在使用 virtIO 驱动程序时,最多可为每个 vNIC 分配 32 个队列;使用 gVNIC 驱动程序时,最多可为每个 vNIC 分配 16 个队列。如果您为 N2 虚拟机启用 Tier_1 网络,则最多可以为每个 vNIC 分配 32 个队列。在此示例中,已分配队列的总数始终小于或等于 vCPU 的数量。
您也可以仅为部分 NIC 分配自定义队列数量,并让Google Cloud 为剩余的 NIC 分配队列。每个 vNIC 可以分配的队列数仍受之前提到的规则的约束。您可以设计配置的可行性以及 Google Cloud 按照此过程为剩余的 vNIC 分配的队列数量(如果配置可行):
计算使用自定义队列分配的 vNIC 的队列总和。例如,对于具有 20 个 vCPU 和 6 个 vNIC 的示例虚拟机,假设您为
nic0
分配了 5 个队列、为nic1
分配了 6 个队列、为nic2
分配了 4 个队列,并让 Google Cloud为nic3
、nic4
和nic5
分配队列。在此示例中,自定义分配队列的总数为5+6+4 = 15
。从 vCPU 的数量中减去自定义分配队列总数。如果差值小于Google Cloud 必须为其分配队列的剩余 vNIC 的数量, Google Cloud 会返回错误,因为每个 vNIC 都必须至少有一个队列。
继续以具有 20 个 vCPU 和总共
15
个自定义已分配队列的虚拟机为例, Google Cloud 还可以为剩余的 vNIC(nic3
、nic4
、nic5
)分配20-15 = 5
个队列。将上一步中的结果除以剩余 vNIC 的数量并舍弃余数 -
⌊(number of vCPUs - sum of assigned queues)/(number of remaining vNICs)⌋
。由于上一步中说明的限制条件,此计算始终会生成至少等于 1 的整数(而不是分数)。 Google Cloud 为每个剩余 vNIC 分配一个与计算出的数量匹配的队列数量,只要该数量不超过每个 vNIC 的队列数量上限即可。每个 vNIC 的队列数上限取决于驱动程序类型:
- 使用 virtIO 或自定义驱动程序时,如果计算出的每个剩余 vNIC 的队列数量大于
32
,则 Google Cloud 会为每个剩余 vNIC 分配32
个队列。 - 使用 gVNIC 时,如果计算出的每个剩余 vNIC 的队列数量大于
16
或32
的限制(具体取决于虚拟机配置), Google Cloud 会为每个剩余 vNIC 分配16
个队列。
配置自定义队列数
如需创建为一个或多个 NIC 或 vNIC 使用自定义队列数的计算实例,请完成以下步骤。
在以下代码示例中,创建的虚拟机的网络接口类型设置为 GVNIC
,并且启用了每个虚拟机的 Tier_1 网络性能。您可以使用这些代码示例来指定支持的机器类型可用的最大队列数量和队列超额订阅。
gcloud
- 如果您还没有所需的 VPC 网络(您计划配置的每个 vNIC 接口将连接到其中的一个子网),请先创建这些网络。
- 使用
gcloud compute instances create
命令创建计算实例。针对您要为实例配置的每个 vNIC 重复使用--network-interface
标志,并添加queue-count
选项。
gcloud compute instances create INSTANCE_NAME \ --zone=ZONE \ --machine-type=MACHINE_TYPE \ --network-performance-configs=total-egress-bandwidth-tier=TIER_1 \ --network-interface=network=NETWORK_NAME_1,subnet=SUBNET_1,nic-type=GVNIC,queue-count=QUEUE_SIZE_1 \ --network-interface=network=NETWORK_NAME_2,subnet=SUBNET_2,nic-type=GVNIC,queue-count=QUEUE_SIZE_2
替换以下内容:
Terraform
- 如果您还没有所需的 VPC 网络(您计划配置的每个 vNIC 接口将连接到其中的一个子网),请先创建这些网络。
使用
google_compute_instance
资源创建 vNIC 具有特定队列数的计算实例。 针对您要为计算实例配置的每个 vNIC 重复使用--network-interface
参数,并添加queue-count
参数。# Queue oversubscription instance resource "google_compute_instance" "VM_NAME" { project = "PROJECT_ID" boot_disk { auto_delete = true device_name = "DEVICE_NAME" initialize_params { image="IMAGE_NAME" size = DISK_SIZE type = "DISK_TYPE" } } machine_type = "MACHINE_TYPE" name = "VM_NAME" zone = "ZONE" network_performance_config { total_egress_bandwidth_tier = "TIER_1" } network_interface { nic_type = "GVNIC" queue_count = QUEUE_COUNT_1 subnetwork_project = "PROJECT_ID" subnetwork = "SUBNET_1" } network_interface { nic_type = "GVNIC" queue_count = QUEUE_COUNT_2 subnetwork_project = "PROJECT_ID" subnetwork = "SUBNET_2" } network_interface { nic_type = "GVNIC" queue_count = QUEUE_COUNT_3 subnetwork_project = "PROJECT_ID" subnetwork = "SUBNET_3"" } network_interface { nic_type = "GVNIC" queue_count = QUEUE_COUNT_4 subnetwork_project = "PROJECT_ID" subnetwork = "SUBNET_4"" } }
替换以下内容:
VM_NAME
:新计算实例的名称PROJECT_ID
:要在其中创建实例的项目的 ID。除非您使用共享 VPC 网络,否则您指定的项目必须是创建了所有子网和网络的同一项目。DEVICE_NAME
:要与客户机操作系统中的启动磁盘关联的名称IMAGE_NAME
:映像的名称,例如"projects/debian-cloud/global/images/debian-11-bullseye-v20231010"
。DISK_SIZE
:启动磁盘大小,以 GiB 为单位DISK_TYPE
:要用于启动磁盘的磁盘类型,例如pd-standard
MACHINE_TYPE
:实例的机器类型。如需超额订阅队列数量,您指定的机器类型必须支持 gVNIC 和 Tier_1 网络。ZONE
:要在其中创建实例的可用区QUEUE_COUNT
:vNIC 的队列数,需遵循自定义队列分配中讨论的规则。SUBNET_*
:网络接口所连接的子网的名称
REST
- 如果您还没有所需的 VPC 网络(您计划配置的每个 vNIC 接口将连接到其中的一个子网),请先创建这些网络。
使用
instances.insert
方法创建 NIC 具有特定队列数量的计算实例。重复使用networkInterfaces
属性以配置多个网络接口。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM_NAME", "machineType": "machineTypes/MACHINE_TYPE", "networkPerformanceConfig": { "totalEgressBandwidthTier": TIER_1 }, "networkInterfaces": [ { "nicType": gVNIC, "subnetwork":"regions/region/subnetworks/SUBNET_1", "queueCount": "QUEUE_COUNT_1" } ], "networkInterfaces": [ { "nicType": gVNIC, "subnetwork":"regions/region/subnetworks/SUBNET_2", "queueCount": "QUEUE_COUNT_2" } ], }
替换以下内容:
队列分配和更改机器类型
计算实例是使用默认队列分配创建的,您也可以在使用 Compute Engine API 创建新计算实例时为每个虚拟网络接口卡 (vNIC) 分配自定义队列计数。默认或自定义 vNIC 队列分配仅在创建计算实例时设置。如果您的实例具有使用默认队列数量的 vNIC,您可以更改其机器类型。如果要更改为的机器类型具有不同数量的 vCPU,系统会根据新机器类型重新计算实例的默认队列计数。
如果虚拟机具有使用非默认的自定义队列数量的 vNIC,您可以使用 Google Cloud CLI 或 Compute Engine API 来更新实例属性。如果生成的虚拟机支持的每个 vNIC 的队列数量与原始虚拟机相同,则转换会成功。对于使用 VirtIO-Net 接口并且每个 vNIC 的自定义队列数量超过 16 的虚拟机,您无法将机器类型更改为第三代或更高版本的机器类型,因为它们仅使用 gVNIC。不过,您可以改为按照将工作负载迁移到新的计算实例中的说明将虚拟机迁移到第三代或更高版本的机器类型。
后续步骤
- 详细了解机器类型。
- 详细了解虚拟机实例。
- 创建并启动虚拟机实例。
- 为计算实例配置每个虚拟机的 Tier_1 网络性能。
- 完成《在 Compute Engine 中创建 Linux 虚拟机实例》快速入门教程。
- 完成《在 Compute Engine 中创建 Windows Server 虚拟机实例》快速入门教程。