网络带宽


Google Cloud 会考虑每个虚拟机 (VM) 实例的带宽,而不是考虑每个虚拟网络接口 (vNIC) 或 IP 地址的带宽。虚拟机的机器类型定义了其最大可能的出站流量速率;但是,您只能在特定情况下达到此最大可能的出站流量速率。

本页面概述了对于计划部署非常有用的预期方向。它使用两个维度对带宽进行分类:

  • 出站流量或入站流量:此页面上使用的出站流量和入站流量始终从 Google Cloud 虚拟机角度来看:
    • 从 Google Cloud 虚拟机发送的数据包构成其出站流量。
    • 发送到 Google Cloud 虚拟机的数据包构成其入站流量
  • 数据包的路由方式:可以使用下一个跃点位于 VPC 网络中的路由或 VPC 网络外部的路由从发送方虚拟机路由数据包或将数据包路由到接收方虚拟机

更多虚拟网络接口 (vNIC) 和每个 vNIC 更多 IP 地址都不会增加虚拟机的入站流量或出站流量带宽。例如,具有 22 个 vCPU 的 C3 虚拟机的总出站流量带宽上限为 23 Gbps。如果您配置具有两个 vNIC 的 C3 虚拟机,则该虚拟机的总出站流量带宽仍然限制为 23 Gbps,而不是每个 vNIC 具有 23 Gbps 带宽。

本页面上的所有信息均适用于 Compute Engine 虚拟机以及依赖 Compute Engine 虚拟机的产品。例如,Google Kubernetes Engine 节点是 Compute Engine 虚拟机。

带宽摘要

下表展示了根据数据包是从虚拟机发送(出站)还是由虚拟机接收(入站)这两种情况的带宽预期和数据包路由方法。

出站流量

带宽预期
在 VPC 网络中路由
  • 主要由每个虚拟机的最大出站流量带宽定义,具体取决于发送方虚拟机的机器类型以及是否启用了 Tier_1 网络。

    • 使用 Tier_1 网络的 N2、N2D、C2 和 C2D 虚拟机支持最高 100 Gbps 的出站流量带宽限制。
    • H3 虚拟机支持最高 200 Gbps 的虚拟机间出站流量带宽限制。
    • A2 和 G2 虚拟机支持高达 100 Gbps 的出站流量带宽限制。
    • A3 虚拟机支持高达 1,000 Gbps 的出站流量带宽限制。
    • 使用 Tier_1 网络时,C3、C3D 和 Z3(预览版)虚拟机可提供高达 200 Gbps 的出站流量带宽限制。
  • 对于其他因素、定义和场景,请参阅流向 VPC 网络中可路由的目标位置的出站流量
在 VPC 网络外部路由
  • 主要由每个虚拟机的最大出站流量带宽定义,具体取决于发送方虚拟机的机器类型以及是否启用了 Tier_1 网络。除 H3 虚拟机外,发送方虚拟机到其 VPC 网络之外的目标位置的出站流量上限不能超过以下值:

    • 未启用 Tier_1 网络时,总计 7 Gbps
    • 启用 Tier_1 网络时,总计 25 Gbps
    • 每个流 3 Gbps
  • 如需了解其他因素、定义和注意事项,请参阅流向 VPC 网络外部的目标位置的出站流量

入站流量

带宽预期
在 VPC 网络中路由
  • 通常,入站流量速率类似于机器类型的出站流量速率。
  • 虚拟机的大小、服务器 NIC 的容量、传入在同一宿主机硬件上运行的其他客户机的流量、客户机操作系统网络配置,以及虚拟机读取磁盘的次数等都会影响入站流量速率。
  • Google Cloud 不会对 VPC 网络内的入站流量速率施加任何其他限制。
  • 对于其他因素、定义和场景,请参阅流向 VPC 网络中可路由的目标位置的入站流量
在 VPC 网络外部路由
  • Google Cloud 通过限制在 VPC 网络外部路由的入站流量来保护每个虚拟机。该限制是以下速率中先达到的那一个:

    • 180 万 pps(每秒数据包数)
    • 30 Gbps
  • 对于支持多个物理 NIC 的机器系列(例如 A3),该限制是以下速率中先达到的那一个:
    • 每个物理 NIC 1,800,000 pps(每秒数据包数)
    • 每个物理 NIC 30 Gbps
  • 对于其他因素、定义和场景,请参阅流向 VPC 网络外部的目标位置的入站流量

出站流量带宽

Google Cloud 根据发送数据包的虚拟机的机器类型,以及是使用 VPC 网络内的路由还是 VPC 网络外的路由来访问数据包的目标位置,来使用每个虚拟机的最大出站流量速率来限制出站(出站流量)带宽。出站带宽包括从所有虚拟机的 NIC 发送的流量以及传输到与该虚拟机连接的所有永久性磁盘的数据。

每个虚拟机的最大出站流量带宽

每个虚拟机的最大出站流量带宽通常为 2 Gbps,但存在一些差异和例外情况,具体取决于机器系列。下表仅显示标准网络层级 VPC 网络中路由的流量的出站带宽上限范围,而不是每个虚拟机的 Tier_1 网络性能

机器系列 每个虚拟机的最大出站流量下限(无 Tier_1 网络) 每个虚拟机的最大出站流量上限(无 Tier_1 网络)
E2 1 Gbps 16 Gbps
C3 23 Gbps 100 Gbps
C3D 20 Gbps 100 Gbps
T2D 10 Gbps 32 Gbps
N2、C2、N2D 和 C2D 10 Gbps 32 Gbps
H3 不适用 200 Gbps
Z3(预览版 23 Gbps 100 Gbps
N1(不包括配备 1 个 vCPU 的虚拟机) 10 Gbps 在 Intel Skylake 平台上为 32 Gbps
在早于 Intel Skylake 的 CPU 平台上为 16 Gbps
配备 1 个 vCPU、f1-micro 和 g1-small 的 N1 机器类型 2 Gbps 2 Gbps
A3、A2 和 G2 不适用 基于 GPU 类型

您可以在特定机器系列页面上找到每种器机类型对应的每个虚拟机的最大出站流量带宽:

不保证能达到每个虚拟机的最大出站流量带宽。根据如下所列因素(不详尽),实际的出站流量带宽可能降低:

  • 客户机以太网驱动程序:gVNIC 可提供比 VirtIO 网络接口更好的性能
  • 数据包大小
  • 协议开销
  • 流数量
  • 虚拟机客机操作系统的以太网驱动程序设置,例如校验和分流与 TCP 细分分流 (TSO)
  • 网络拥塞度
  • 在永久性磁盘与其他网络出站流量竞争的情况下,网络带宽上限的 60% 将分配给永久性磁盘写入,剩余 40% 将分配给其他网络出站流量。如需了解详情,请参阅 Persistent Disk 文档中的影响磁盘性能的因素

如需获得尽可能高的每个虚拟机的最大出站流量带宽,请执行以下操作:

流向 VPC 网络中可路由的目标位置的出站流量

从发送方虚拟机的角度来看,对于可通过 VPC 网络中的路由访问的目标 IP 地址,Google Cloud 会使用以下规则限制出站流量

  • 每个虚拟机的最大出站流量带宽:每个虚拟机的最大出站流量带宽部分中所述的每个虚拟机的最大出站流量带宽。
  • 每个项目的区域间出站流量带宽:如果发送方虚拟机和内部目标位置或其下一个跃点位于不同的区域,则 Google Cloud 会施加区域间出站流量带宽上限。大多数客户不太可能达到此限制。如果您对此限制有疑问,请提交支持请求
  • Cloud VPN 和 Cloud Interconnect 限制:将虚拟机的流量发送到可通过下一个跃点 Cloud VPN 隧道或 Cloud Interconnect VLAN 连接路由的内部 IP 地址目标位置时,出站流量带宽受到以下因素的限制:

VPC 网络中可路由的目标位置包含以下所有目标位置,从发送方虚拟机的角度来看,每个目标位置都可以通过其下一个跃点并非默认互联网网关的路由来进行访问

  • 子网的主要 IPv4 和子网的次要 IPv4 地址范围中的区域级内部 IPv4 地址,包括以下目标资源使用的专用 IPv4 地址范围和以非公开方式使用的公共 IPv4 地址范围:
    • 接收方虚拟机网络接口 (vNIC) 的主要内部 IPv4 地址。(当发送方虚拟机连接到另一个虚拟机的 vNIC 外部 IPv4 地址时,数据包使用下一个跃点默认互联网网关进行路由,因此流向 VPC 网络外部的目标位置的出站流量适用。)
    • 接收方虚拟机 vNIC 的别名 IP 范围内的内部 IPv4 地址。
    • 内部转发规则(用于协议转发或内部直通式网络负载均衡器)的内部 IPv4 地址。
  • 以下目标资源的全球内部 IPv4 地址:
  • 以下目标资源使用的内部 IPv6 子网地址范围
    • 分配给双栈接收方虚拟机 vNIC 的 /96 IPv6 地址范围内的 IPv6 地址。
    • 内部转发规则(用于协议转发或内部直通式网络负载均衡器)的 /96 IPv6 地址范围内的 IPv6 地址。
  • 使用 VPC 网络中的子网路由或对等互连子网路由,或者通过 VPC 网络中不使用默认互联网网关的下一个跃点的自定义路由来路由数据包时,这些目标资源使用的外部 IPv6 子网地址范围
    • 分配给双栈接收方虚拟机 vNIC 的 /96 IPv6 地址范围内的 IPv6 地址。
    • 外部转发规则(用于协议转发或外部直通式网络负载均衡器)的 /96 IPv6 地址范围内的 IPv6 地址。
  • 可通过以下 VPC 网络路由访问的其他目标位置:

以下列表对从发送方虚拟机传入内部目标位置的流量进行了排名(按可能的带宽从高到低的顺序):

流向 VPC 网络外部的目标位置的出站流量

从发送方虚拟机的角度来看,对于 VPC 网络外部的目标 IP 地址,Google Cloud 会将出站流量限制为下列其中一种速率(以先达到者为准)

  • 每个虚拟机的出站流量带宽:对于从虚拟机到 VPC 网络外部的目标位置的所有连接,其最大带宽为每个虚拟机的最大出站流量带宽的较小值和以下速率之一:

    • 25 Gbps(如果已启用 Tier_1 网络)
    • 7 Gbps(如果未启用 Tier_1 网络)
    • 1 Gbps(针对 H3 虚拟机)
    • 对于支持多个物理 NIC 的机器系列(例如 A3),每个物理 NIC 7 Gbps。

    例如,即使 n2-standard-16 实例的每个虚拟机的最大出站流量带宽为 32 Gbps,从 n2-standard-16 实例到外部目标位置的每个虚拟机的出站流量带宽也为 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 地址,前提是子网位于单独的非对等互连 VPC 网络中,且目标 IPv6 地址范围可使用其下一个跃点为默认互联网网关的发送方虚拟机 VPC 网络中的路由来进行访问。如果具有外部 IPv6 地址范围的双栈子网位于同一 VPC 网络或对等互连 VPC 网络中,请参阅流向 VPC 网络中可路由的目标位置的出站流量
  • 在发送方虚拟机的 VPC 网络中可通过静态路由访问的其他外部目标位置,前提是该路由的下一个跃点是默认互联网网关

如需详细了解哪些 Google Cloud 资源使用哪些类型的外部 IP 地址,请参阅外部 IP 地址

入站流量带宽

Google Cloud 会根据传入数据包路由到接收方虚拟机的方式处理入站(入站流量)带宽。

流向 VPC 网络中可路由的目标位置的入站流量

接收方虚拟机可以在其机器类型、操作系统和其他网络条件允许的情况下处理任意数量的传入数据包。如果传入数据包是使用 VPC 网络内部的路由传送的,则 Google Cloud 不会对传送到虚拟机的传入数据包施加任何有意的带宽限制

  • 接收方虚拟机的 VPC 网络中的子网路由
  • 对等互连 VPC 网络中的对等互连子网路由
  • 满足下述条件的另一个网络中的路由:下一个跃点是 Cloud VPN 隧道、Cloud Interconnect (VLAN) 连接,或者路由器设备虚拟机(其位于接收方虚拟机的 VPC 网络中)

对于在 VPC 网络中路由的数据包,其目标位置包括:

  • 接收方虚拟机网络接口 (vNIC) 的主要内部 IPv4 地址。主要内部 IPv4 地址是子网的主要 IPv4 地址范围中的区域级内部 IPv4 地址。
  • 接收方虚拟机 vNIC 的别名 IP 范围中的内部 IPv4 地址。别名 IP 范围可以来自子网的主要 IPv4 地址范围或其中一个次要 IPv4 地址范围。
  • 分配给双栈接收方虚拟机 vNIC 的 /96 IPv6 地址范围内的 IPv6 地址。虚拟机 IPv6 范围可以来自以下子网 IPv6 范围:
  • 接收方虚拟机的内部协议转发或后端为接收方虚拟机的内部直通式网络负载均衡器使用的转发规则的内部 IPv4 地址。内部转发规则 IPv4 地址来自子网的主要 IPv4 地址范围。
  • 接收方虚拟机的内部协议转发或后端为接收方虚拟机的内部直通式网络负载均衡器所用转发规则的 /96 IPv6 范围内的内部 IPv6 地址。内部转发规则 IPv6 地址来自子网的内部 IPv6 地址范围。
  • 接收方虚拟机的外部协议转发或后端为接收方虚拟机的外部直通式网络负载均衡器所用转发规则的 /96 IPv6 范围内的外部 IPv6 地址(如果使用本节前面列出的某个路由在 VPC 网络中路由传入数据包)。外部转发规则 IPv6 地址来自子网的外部 IPv6 地址范围。
  • 将接收方虚拟机用作下一个跃点虚拟机(next-hop-instancenext-hop-address)的自定义静态路由的目标范围内的 IP 地址。
  • 使用内部直通式网络负载均衡器 (next-hop-ilb) 的下一个跃点的自定义静态路由目标范围内的 IP 地址(如果接收方虚拟机是该负载均衡器的后端)。

流向 VPC 网络外部的目标位置的入站流量

Google Cloud 对使用 VPC 网络外部的路由传送到接收方虚拟机的传入数据包施加以下带宽限制。涉及负载均衡时,带宽限制会单独应用于每个接收方虚拟机。

对于不支持多个物理 NIC 的机器系列,适用的入站带宽限制共同应用于所有虚拟 NIC。该限制是以下速率中先达到的那一个:

  • 每秒 180 万个数据包
  • 30 Gbps

对于支持多个物理 NIC 的机器系列(例如 A3),适用的入站带宽限制会单独应用于每个物理 NIC。该限制是以下速率中先达到的那一个:

  • 每个物理 NIC 每秒 180 万个数据包
  • 每个物理 NIC 30 Gbps

对于使用 VPC 网络外部的路由进行路由的数据包,其目标位置包括:

  • 在接收方虚拟机的某个网络接口 (NIC) 上通过一对一 NAT 访问配置分配的外部 IPv4 地址。
  • 为双栈接收方虚拟机的 vNIC 分配的 /96 IPv6 地址范围内的外部 IPv6 地址(如果使用接收方虚拟机的 VPC 网络外部的路由来路由传入数据包)
  • 接收方虚拟机的外部协议转发或后端为接收方虚拟机的外部直通式网络负载均衡器使用的转发规则的外部 IPv4 地址。
  • 接收方虚拟机的外部协议转发或后端为接收方虚拟机的外部直通式网络负载均衡器所用转发规则的 /96 IPv6 范围内的外部 IPv6 地址(如果使用 VPC 网络外部的路由来路由传入数据包)
  • 由 Cloud NAT 处理的已建立入站响应

巨型帧

如需接收和发送巨型帧,请配置虚拟机使用的 VPC 网络;将最大传输单元 (MTU) 设置为更大的值,最高可达 8896。

较高的 MTU 值会增加数据包大小并降低数据包标头开销,从而增加载荷数据吞吐量。

如需将巨型帧与 gVNIC 驱动程序搭配使用,必须使用 1.3 版或更高版本的驱动程序。并非所有 Google Cloud 公共映像都包含此驱动程序版本。如需详细了解操作系统对巨型帧的支持,请参阅操作系统详细信息页面上的网络功能标签页。表示完全支持巨型帧的映像版本包括更新后的 gVNIC 驱动程序,即使客户机操作系统将 gve 驱动程序版本显示为 1.0.0 也是如此。

如果您使用的操作系统映像不完全支持巨型帧,则可以手动安装 gVNIC 驱动程序 v1.3.0 或更高版本。Google 建议您安装具有 Latest 标记的 gVNIC 驱动程序版本,以便从更多功能和 bug 修复中获益。您可以从 GitHub 下载 gVNIC 驱动程序。

如需在客户机操作系统中手动更新 gVNIC 驱动程序版本,请参阅在不支持的操作系统上使用

接收和传输队列

系统会为每个虚拟机 vNIC 分配一定数量的接收和传输队列,以处理来自网络的数据包。

  • 接收队列 (RX):接收数据包的队列。当 vNIC 收到来自网络的数据包时,vNIC 从队列中选择传入数据包的描述符,对其进行处理,并使用中断通过关联到 vCPU 核心的数据包队列将数据包交给客户机操作系统。如果 RX 队列已满,且没有可用于放置数据包的缓冲区,则系统会丢弃该数据包。 如果应用过度使用也关联到所选数据包队列的 vCPU 核心,通常会发生这种情况。
  • 传输 (TX) 队列:传输数据包的队列。当客户机操作系统发送数据包时,系统会分配一个描述符并将其放入 TX 队列。然后,vNIC 会处理该描述符并传输数据包。

默认队列分配

除非您明确为 NIC 分配队列数量,否则您可以按照以下方式设计一个算法,供 Google Cloud 用于为每个 vNIC 分配固定数量的 RX 和 TX 队列:

  1. 根据您的网络接口类型,使用以下方法之一:

    • VirtIO:将 vCPU 数量除以 NIC 的数量,并舍弃任何余数 — [number of vCPUs/number of NICs]
    • gVNIC:将 vCPU 数量除以 NIC 的数量,然后将结果除以 2 并舍弃任何余数 - [number of vCPUs/number of NICs/2]

    此计算始终生成一个整数(而不是分数)。

  2. 如果计算结果小于 1,请改为为每个 vNIC 分配一个队列。

  3. 确定计算结果是否大于每个 vNIC 的队列数上限。每个 vNIC 的队列数上限取决于驱动程序类型:

    • 如果使用 virtIO 或自定义驱动程序,每个 vNIC 的队列数上限为 32。如果计算结果大于 32,忽略计算结果,并为每个 vNIC 分配 32 个队列。
    • 如果使用 gvNIC,每个 vNIC 的队列数上限为 16。如果计算结果大于 16,忽略计算结果,并为每个 vNIC 分配 16 个队列。

以下示例展示了如何计算默认队列数量:

  • 如果虚拟机使用 VirtIO 且具有 16 个 vCPU 和 4 个 NIC,则计算结果为 [16/4] = 4。Google Cloud 会为每个 vNIC 分配四个队列。

  • 如果虚拟机使用 gVNIC 并且有 128 个 vCPU 和 2 个 NIC,则计算得出的数量为 [128/2/2] = 32。Google Cloud 会为每个 vNIC 分配相应的每个 vNIC 的最大队列数。Google Cloud 会为每个 vNIC 分配 16 个队列。

在 Linux 系统上,您可以使用 ethtool 为 vNIC 配置少于 Google Cloud 为每个 vNIC 分配的队列数的队列。

自定义队列分配

您也可以不使用默认队列分配,而是在使用 Compute Engine API 创建新虚拟机时为每个 vNIC 分配自定义队列数(RX 和 TX 的总和)。

您指定的自定义队列数量必须符合以下规则:

  • 您可以为每个 vNIC 分配的队列数下限为 1。

  • 您可以为每个 vNIC 分配的队列数上限是 vCPU 数量的下限,或每个 vNIC 的队列数上限(具体取决于驱动程序类型):

    • 如果使用 virtIO 或自定义驱动程序,队列数上限为 32
    • 如果使用 gvNIC,队列数上限为 16
  • 如果您为虚拟机的所有 NIC 分配自定义队列数,则队列数分配的总和必须小于或等于分配给虚拟机实例的 vCPU 数量。

您可以为 NIC 超额订阅自定义队列数。换句话说,分配给虚拟机的所有 NIC 的队列数之和可以大于虚拟机的 vCPU 数量。如需超额订阅自定义队列数,必须满足以下条件:

  • 使用 gVNIC 作为虚拟机配置的所有 NIC 的 vNIC 类型。
  • 您的虚拟机使用 N2、N2D、C2 和 C2D 机器系列中的机器类型。
  • 您为虚拟机启用了 Tier_1 网络。
  • 您为虚拟机配置的所有 NIC 指定了自定义队列数。

如果使用队列超额订阅,虚拟机的队列数上限为 NIC 数量的 16 倍。因此,如果您为具有 30 个 vCPU 的虚拟机配置了 6 个 NIC,则最多可为该虚拟机配置 96 个自定义队列(即 16 * 6)。

示例

  • 如果一个虚拟机有 8 个 vCPU 和 3 个 NIC,则虚拟机的队列数上限是 vCPU 的数量,即 8 个。您可以为 nic0 分配 1 个队列,为 nic1 分配 4 个队列,为 nic2 分配 3 个队列。在此示例中,您不能在保持其他两个 vNIC 队列分配不变的情况下为 nic2 分配 4 个队列,因为已分配队列的总数不能超过 vCPU 的数量(8 个)。

  • 如果虚拟机有 96 个 vCPU 和 2 个 NIC,则在使用 virtIO 驱动程序时,最多可为每个 NIC 分配 32 个队列;使用 gVNIC 驱动程序时,最多可为每个 NIC 分配 16 个队列。在此示例中,已分配队列的总数始终小于 vCPU 的数量。

您也可以仅为部分 NIC 分配自定义队列数量,并让 Google Cloud 为剩余的 NIC 分配队列。每个 vNIC 可以分配的队列数仍受之前提到的规则的约束。您可以设计配置的可行性以及 Google Cloud 按照此过程为剩余的 NIC 分配的队列数(如果配置可行):

  1. 计算使用自定义队列分配的 NIC 的队列总和。例如,对于具有 20 个 vCPU 和 6 个 NIC 的示例虚拟机,假设您为 nic0 分配了 5 个队列、为 nic1 分配了 6 个队列、为 nic2 分配了 4 个队列,并让 Google Cloud 为 nic3nic4nic5 分配队列。在此示例中,自定义分配队列的总数为 5+6+4 = 15

  2. 从 vCPU 的数量中减去自定义分配队列总数。如果结果不至少等于 Google Cloud 必须为其分配队列的剩余 NIC 的数量,则 Google Cloud 会返回错误。继续以具有 20 个 vCPU 的示例虚拟机和 15 个自定义分配队列为例,Google Cloud 还可以为剩余的 NIC(nic3nic4nic5)分配 20-15 = 5 个队列。

  3. 将上一步中的结果除以剩余 NIC 的数量并舍弃余数 - ⌊(number of vCPUs - sum of assigned queues)/(number of remaining NICs)⌋。由于上一步中说明的限制条件,此计算始终会生成至少等于 1 的整数(而不是分数)。Google Cloud 为每个剩余 vNIC 分配一个与计算出的数量匹配的队列数,只要该数量不超过每个 NIC 的队列数上限即可。每个 vNIC 的队列数上限取决于驱动程序类型:

    • 使用 virtIO 或自定义驱动程序时,如果计算出的每个剩余 vNIC 的队列数大于 32,则 Google Cloud 会为每个剩余 vNIC 分配 32 个队列。
    • 使用 gVNIC 时,如果计算出的每个剩余 vNIC 的队列数大于 16,则 Google Cloud 会为每个剩余 vNIC 分配 16 个队列。

配置自定义队列数

如需创建为一个或多个 vNIC 使用自定义队列数的虚拟机,请完成以下步骤。

gcloud

  1. 如果您还没有所需的 VPC 网络(您计划配置的每个 vNIC 接口将连接到其中的一个子网),请先创建这些网络。
  2. 使用 gcloud compute instances create 命令创建虚拟机。针对您要为虚拟机配置的每个 vNIC 重复使用 --network-interface 标志,并添加 queue-count 选项。
    gcloud compute instances create VM_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

替换以下内容:

  • VM_NAME:新虚拟机的名称
  • ZONE:要在其中创建虚拟机的可用区
  • MACHINE_TYPE:虚拟机的机器类型。 您指定的机器类型必须支持 gVNIC 和 Tier_1 网络。
  • NETWORK_NAME:之前创建的网络的名称
  • SUBNET_*:之前创建的其中一个子网的名称
  • QUEUE_SIZE:vNIC 的队列数,需遵循自定义队列分配中讨论的规则。

Terraform

  1. 如果您还没有所需的 VPC 网络(您计划配置的每个 vNIC 接口将连接到其中的一个子网),请先创建这些网络。
  2. 使用 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

  1. 如果您还没有所需的 VPC 网络(您计划配置的每个 vNIC 接口将连接到其中的一个子网),请先创建这些网络。
  2. 使用 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"
        } ],
    }
    

    替换以下内容:

    • PROJECT_ID:要创建虚拟机的项目的 ID
    • ZONE:要在其中创建虚拟机的可用区
    • VM_NAME:新虚拟机的名称
    • MACHINE_TYPE:新虚拟机的机器类型,预定义自定义
    • SUBNET_*:网络接口所连接的子网的名称
    • QUEUE_COUNT:vNIC 的队列数,需遵循自定义队列分配中讨论的规则。

队列分配和更改机器类型

虚拟机是使用默认队列分配创建的,您也可以在使用 Compute Engine API 创建新虚拟机时为每个虚拟网络接口卡 (vNIC) 分配自定义队列计数。默认或自定义 NIC 队列分配仅在创建虚拟机时设置。如果虚拟机具有使用默认队列计数的 vNIC,您可以更改其机器类型。如果要更改为的机器类型具有不同数量的 vCPU,系统会根据新机器类型重新计算虚拟机的默认队列计数。

如果虚拟机具有使用非默认的自定义队列计数的 vNIC,您可以使用 Google Cloud CLI 或 Compute Engine API 来更新实例属性。如果生成的虚拟机支持每个 vNIC 的队列计数与原始虚拟机相同,则转换会成功。对于使用 VirtIO-Net 接口并且每个 vNIC 的自定义队列计数超过 16 的虚拟机,您无法将机器类型更改为仅使用 gVNIC 的第三代机器类型。而是可以按照将工作负载从现有虚拟机迁移到新虚拟机中的说明,将虚拟机迁移到第三代机器类型。

后续步骤