网络带宽 (original) (raw)

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

本页面概述了网络带宽限制,这些限制对于规划部署非常有用。它使用两个维度对带宽进行分类:

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

影响网络带宽的配置

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

以下部分介绍了其他计算实例配置如何影响网络带宽。

使用每个虚拟机的 Tier_1 网络性能

如需获得尽可能高的入站流量和出站流量带宽,请为计算实例配置 Tier_1 网络

Dynamic Network Interface

Dynamic Network Interface 使用其父 vNIC 的带宽。父 vNIC 内没有流量隔离。来自 Dynamic NIC 的网络流量可能会导致与同一父级 vNIC 关联的其他 Dynamic NIC 无带宽可用。为了避免这种冲突,您可以使用 Linux 流量控制 (TC) 来制定特定于应用的流量调整政策。这些政策有助于实现公平性或某些类型的优先级。如需进行优先级排序,您可以将流量(例如 Dynamic NIC 的流量)映射到流量类别,然后将该流量类别映射到服务质量。如需查看此方法的示例,请参阅使用 Red Hat 调整流量

运行 Windows 操作系统的 Compute Engine 实例不支持 Dynamic NIC。

使用 Cloud RDMA 进行 HPC 计算

高性能计算 (HPC) 作业的三个阶段(加载、计算和存储)都需要带宽。在加载和存储阶段,应用通常使用 TCP 进行通信,而远程直接内存地址 (RDMA) 则用于计算阶段。使用 GVNIC 处理 TCP 流量的 H4D 实例可提供高达 200 Gbps 的网络带宽。如果您还配置 H4D 实例以使用 Cloud RDMA,则网络带宽将在配置的网络接口之间共享。

Cloud RDMA 流量和 TCP 流量之间的网络带宽分配是动态完成的。GVNIC 网络接口不会将 Cloud RDMA 和 TCP 流量都限制为 100 Gbps 带宽,而是在不使用 Cloud RDMA 网络接口时,可以使用所有可用带宽。同样,当 GVNIC 网络接口未被使用时,Cloud RDMA 网络接口可以使用所有可用带宽。如果两种网络接口类型都在使用,Cloud RDMA 流量的优先级高于 TCP 流量,因为前者对性能的要求更高。

带宽摘要

下表展示了基于数据包是从计算实例发送(出站流量)还是由计算实例接收(入站流量)这两种情况的最大可能带宽以及数据包路由方法。

出站流量带宽限制

在 VPC 网络中路由 主要由每个实例的最大出站流量带宽定义,具体取决于发送方实例的机器类型以及是否启用了 Tier_1 网络。 使用 Tier_1 网络的 N2、N2D、C2、C2D、M3 和 C4A 虚拟机支持高达 100 Gbps 的出站流量带宽限制。 H3 虚拟机支持最高 200 Gbps 的虚拟机间出站流量带宽限制。 H4D 实例支持最高 200 Gbps 的虚拟机间出站流量带宽,包括 Cloud RDMA 和 gVNIC。 X4、M4、A2 和 G2 实例支持高达 100 Gbps 的出站流量带宽限制。 G4 实例支持高达 400 Gbps 的出站流量带宽限制。 A4X 实例支持高达 2,000 Gbps 的出站流量带宽限制。 A4 和 A3 实例支持高达 3,600 Gbps 的出站流量带宽限制。 使用 Tier_1 网络的 C4、C4D、C3、C3D, 和 Z3 实例支持高达 200 Gbps 的出站流量带宽限制。 对于其他因素、定义和场景,请参阅流向 VPC 网络中可路由的目标位置的出站流量
在 VPC 网络外部路由 主要由每个实例的最大出站流量带宽定义,具体取决于发送方实例的机器类型以及是否启用了 Tier_1 网络。除 H3 虚拟机外,发送方实例到其 VPC 网络之外的目标位置的出站流量上限不能超过以下值: 未启用 Tier_1 网络时,总计 7 Gbps 启用 Tier_1 网络时,总计 25 Gbps 每个流 3 Gbps 如需了解其他因素、定义和注意事项,请参阅流向 VPC 网络外部的目标位置的出站流量

入站流量带宽限制

在 VPC 网络中路由 通常,入站流量速率类似于机器类型的出站流量速率。 如需获得尽可能高的入站流量带宽,请启用 Tier_1 网络。 计算实例的大小、服务器 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 发出的数据包以及传输到与实例连接的所有 Hyperdisk 和 Persistent Disk 卷的数据。

每个实例的最大出站流量带宽

每个实例的最大出站流量带宽通常为 2 Gbps,但存在一些差异和例外情况,具体取决于机器系列。下表显示了 VPC 网络中路由的流量的出站流量带宽上限范围。

下表总结了每个机器系列的出站流量带宽上限。您可以在特定机器家族页面上找到列出的每种机器类型对应的每个实例的出站流量带宽上限(使用表格中每个机器系列的链接)。

每个实例的最大出站流量上限
机器系列 标准 Tier_1 网络
C4C4D 100 Gbps 200 Gbps
C4A 50 Gbps 100 Gbps
C3C3D 100 Gbps 200 Gbps
C2C2D 32 Gbps 100 Gbps
E2 16 Gbps 不适用
E2 共享核心 2 Gbps 不适用
H4DH3 200 Gbps 不适用
M4 100 Gbps 不适用
M3 32 Gbps 100 Gbps
M2 在 Intel Cascade Lake 或更高版本的 CPU 上为 32 Gbps在其他 CPU 平台上为 16 Gbps 不适用
M1 32 Gbps 不适用
N4N4A预览版)和 N4D 50 Gbps 不适用
N2N2D 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 不适用
T2AT2D 32 Gbps 不适用
X4 100 Gbps 不适用
Z3 100 Gbps 200 Gbps

如需了解加速器优化机器系列的网络带宽信息,请参阅网络和 GPU 机器

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

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

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

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

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

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

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

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

VPC 网络外部的目标位置包括以下所有目标位置,每个目标位置都可以通过其下一个跃点为默认互联网网关的发送方实例 VPC 网络中的路由来进行访问:

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

入站带宽

Google Cloud 会根据传入数据包路由到接收方计算实例的方式处理入站(入站流量)带宽。

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

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

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

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

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

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

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

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

使用巨型帧最大限度提高网络带宽

如需接收和发送巨型帧,请配置计算实例使用的 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 分配一定数量的接收和传输队列,以处理来自网络的数据包。

默认队列分配

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

裸金属实例

对于裸金属实例,只有一个 NIC,因此队列数量上限为 16。

使用 gVNIC 网络接口的虚拟机实例

对于 C4 实例,为了提高性能,以下配置使用固定数量的队列:

对于其他机器系列,队列数量取决于机器系列是否使用 Titanium

如需完成默认队列数量计算,请执行以下操作:

  1. 如果计算结果小于 1,请改为为每个 vNIC 分配一个队列。
  2. 确定计算结果是否大于每个 vNIC 的队列数量上限(即 16)。如果计算结果大于 16,忽略计算结果,并为每个 vNIC 分配 16 个队列。

使用 VirtIO 网络接口或自定义驱动程序的虚拟机实例

将 vCPU 数量除以 vNIC 数量,并舍弃任何余数 - [number of vCPUs/number of vNICs]

  1. 如果计算结果小于 1,请改为为每个 vNIC 分配一个队列。
  2. 确定计算结果是否大于每个 vNIC 的队列数量上限(即 32)。如果计算结果大于 32,忽略计算结果,并为每个 vNIC 分配 32 个队列。

使用 Cloud RDMA 的 H4D 实例

对于使用 Cloud RDMA 的 H4D 实例,每个物理主机运行一个计算实例。因此,实例会获得所有可用的队列对。H4D 实例为 gVNIC 网络接口和 IRDMA 网络接口分别配备了 16 个队列。

示例

以下示例展示了如何计算虚拟机实例的默认队列数量:

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

使用 Dynamic Network Interface 时的队列数量

如果您将 Dynamic Network Interface 与网络接口搭配使用,队列数量不会发生变化。Dynamic NIC 没有自己的接收和传输队列;它使用与父 vNIC 相同的队列。

为虚拟机实例自定义队列分配

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

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

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

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

示例

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

  1. 计算使用自定义队列分配的 vNIC 的队列总和。例如,对于具有 20 个 vCPU 和 6 个 vNIC 的示例虚拟机,假设您为 nic0 分配了 5 个队列、为 nic1 分配了 6 个队列、为 nic2 分配了 4 个队列,并让 Google Cloud为 nic3nic4nic5 分配队列。在此示例中,自定义分配队列的总数为 5+6+4 = 15
  2. 从 vCPU 的数量中减去自定义分配队列总数。如果差值小于Google Cloud 必须为其分配队列的剩余 vNIC 的数量, Google Cloud 会返回错误,因为每个 vNIC 都必须至少有一个队列。
    继续以具有 20 个 vCPU 和总共 15 个自定义已分配队列的虚拟机为例, Google Cloud 还可以为剩余的 vNIC(nic3nic4nic5)分配 20-15 = 5 个队列。
  3. 将上一步中的结果除以剩余 vNIC 的数量并舍弃余数 - ⌊(number of vCPUs - sum of assigned queues)/(number of remaining vNICs)⌋。由于上一步中说明的限制条件,此计算始终会生成至少等于 1 的整数(而不是分数)。 Google Cloud 为每个剩余 vNIC 分配一个与计算出的数量匹配的队列数量,只要该数量不超过每个 vNIC 的队列数量上限即可。每个 vNIC 的队列数上限取决于驱动程序类型:

配置自定义队列数

如需创建为一个或多个 NIC 或 vNIC 使用自定义队列数的计算实例,请完成以下步骤。

在以下代码示例中,创建的虚拟机的网络接口类型设置为 GVNIC,并且启用了每个虚拟机的 Tier_1 网络性能。您可以使用这些代码示例来指定支持的机器类型可用的最大队列数量和队列超额订阅。

gcloud

  1. 如果您还没有所需的 VPC 网络(您计划配置的每个 vNIC 接口将连接到其中的一个子网),请先创建这些网络。

  2. 使用 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

  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""
}
}

替换以下内容:

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:新计算实例的预定义自定义机器类型。如需超额订阅队列数量,机器类型必须支持 gVNIC 和 Tier_1 网络。
    • SUBNET_*:网络接口所连接的子网的名称
    • QUEUE_COUNT:vNIC 的队列数,需遵循自定义队列分配中讨论的规则。

队列分配和更改机器类型

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

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

后续步骤