创建 ULL Compute Engine 实例

本页介绍了如何使用 U4 机器家族中的 U4P 或 U4C 机器类型创建超低延迟 (ULL) Compute Engine 实例。

如需大致了解 ULL 基础架构配置流程,请参阅 ULL 解决方案的配置概览

准备工作

在创建 ULL 计算实例之前,请参阅以下部分。

创建 VPC 网络

如果尚未创建,请为每个实例的网络接口创建 VPC 网络,如 ULL Solution 的配置概览中所述。

创建布置政策

您可以选择性地为 ULL 实例应用分散布置政策,以提高恢复能力。如需了解详情,请参阅 Compute Engine 文档中的创建分散布置政策并加以应用

设置项目

设置 gcloud CLI 以使用您的项目。或者,您也可以在后续过程中为每个命令添加 --project=PROJECT_ID 标志。

gcloud config set project PROJECT_ID

PROJECT_ID 替换为您的项目的 ID。

所需的角色

如需获得创建 Compute Engine 实例所需的权限,请让您的管理员为您授予以下 IAM 角色:

  • 创建和管理计算实例:项目的 Compute Instance Admin (compute.instanceAdmin) 角色

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

ULL 实例配置概览

如需创建 ULL 计算实例并将该实例配置为发送或接收 ULL 单播和多播流量,请执行以下操作:

步骤 说明
创建 ULL 实例 使用 U4P 或 U4C 机器类型创建实例,并将其网络接口连接到通用 VPC 网络和 ULL VPC 网络。如果您打算将实例用作多播使用方,请将 igmp-query 标志设置为 IGMP_QUERY_V2
为 ULL 单播流量的非 nic0 接口配置路由 在 guest 操作系统中配置基于来源的政策路由,以确保出站数据包通过正确的接口离开,并防止非对称路由。
将实例配置为 ULL 多播使用方 完成以下各项操作,以便在 ULL 网络接口上接收多播流量:
为了进一步优化性能,我们建议您还启用繁忙轮询,如使用 Onload 中所述。

此外,您还可以使用本页面上的示例命令来测试多播连接。

创建 ULL 实例

本部分介绍如何创建新实例以用于 ULL 单播和多播。

如需大致了解如何创建计算实例(包括其他配置选项),请参阅创建和启动 Compute Engine 实例

gcloud

如需创建 ULL 实例,请使用 compute instances create 命令

ULL 实例支持的网络接口类型为 GVNIC。 您必须添加 queue-count 字段,并为 XDP 支持指定 32 值。

对于连接到 ULL VPC 网络的网络接口,必须指定 no-address

此外,以下命令还包含 igmp-query 标志,用于使实例成为多播使用方。如果实例仅为多播提供方,或者实例仅发送和接收单播,则不需要此标志。

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --image-project=IMAGE_PROJECT \
    --image-family=IMAGE_FAMILY \
    --maintenance-policy=TERMINATE \
    --network-interface=nic-type=GVNIC,queue-count=32,network=GENERAL_PURPOSE_VPC_NETWORK,subnet=GENERAL_PURPOSE_SUBNET \
    --network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_1,no-address,igmp-query=IGMP_QUERY_V2 \
    --network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_2,no-address,igmp-query=IGMP_QUERY_V2

替换以下值:

  • ZONE:要在其中创建实例的可用区
  • INSTANCE_NAME:实例的名称
  • MACHINE_TYPE:实例的 U4P 或 U4C 机器类型
  • IMAGE_PROJECT映像项目,例如 rhel-cloud。请参阅U4 机器类型的操作系统支持
  • IMAGE_FAMILY映像系列,例如 rhel-10-2-eus-gvnic-baremetal。 请参阅U4 机器类型的操作系统支持

    指定映像系列时,系统会根据该映像系列中最新的未弃用操作系统映像版本创建实例。 或者,您也可以改用 --image 标志并指定映像版本。

  • GENERAL_PURPOSE_VPC_NETWORKGENERAL_PURPOSE_SUBNET:要将实例的 nic0 接口附加到的 VPC 网络和子网

  • ULL_VPC_NETWORK:要将非 nic0 接口附加到的 ULL VPC 网络

    • ULL_SUBNET_1:ULL VPC 网络中要将 nic1 接口连接到的子网

    • ULL_SUBNET_2:ULL VPC 网络中要将 nic2 接口连接到的子网

为非 nic0 接口配置 ULL 单播流量的路由

默认情况下,实例使用与其 nic0 接口关联的默认路由将流量发送到直接连接的子网之外的任何目的地。如需了解详情,请参阅多个网络接口概览

为了使实例的 nic1nic2 接口能够成功发送和接收 ULL 单播流量,您必须在客机操作系统中配置基于来源的政策路由。此配置可确保出站数据包通过正确的接口离开,并防止非对称路由,即流量通过一个接口进入,但尝试通过 nic0 退出。

如需查看有关如何配置政策路由的示例,请参阅为其他网络接口配置路由教程中的配置政策路由

将实例配置为 ULL 多播使用方

本部分介绍如何将现有 ULL 实例配置为多播使用方。

在现有 ULL 实例上启用 IGMP 查询

如果您在创建实例时未启用 IGMP,则可以按照本部分中的说明在现有实例上启用 IGMP。

gcloud

如需对现有 ULL 实例启用 IGMP 查询,请使用 compute instances network-interfaces update 命令

针对要接收多播流量的每个网络接口,重复执行以下命令。

gcloud compute instances network-interfaces update INSTANCE_NAME \
    --zone=ZONE \
    --network-interface=NETWORK_INTERFACE_NAME \
    --igmp-query=IGMP_QUERY_V2

替换以下值:

  • INSTANCE_NAME:实例的名称
  • ZONE:实例的可用区
  • NETWORK_INTERFACE_NAME:要启用 IGMP 查询的网络接口的名称。在 Google Cloud中,格式为nicNUMBER,例如 nic0nic1nic2

在客机操作系统中设置 IGMPv2

如需在实例的客机操作系统中设置 IGMPv2,请执行以下操作:

  1. 使用 SSH 连接到实例

  2. 运行以下命令,并确定要接收多播流量的网络接口的设备名称。

    sudo ifconfig
    
  3. 针对每个适用的网络接口,运行以下命令以强制使用 IGMPv2。

    sudo -i
    echo "2" > /proc/sys/net/ipv4/conf/NETWORK_INTERFACE_DEVICE_NAME/force_igmp_version
    

    NETWORK_INTERFACE_DEVICE_NAME 替换为网络接口的设备名称,例如 eth0eth1eth2

配置反向路径过滤 (rp_filter)

在某些情况下(例如使用多 NIC 实例时),通过反向路径过滤 (rp-filter) 进行严格的来源验证可能会导致丢弃合法的多播数据包。为防止出现这种情况,您可以配置反向路径过滤,以放宽或停用接收多播流量的非 nic0 网络接口上的来源验证。例如,以下命令通过将 rp_filter 设置为 0,将反向路径过滤配置为在 eth1eth2 上停用来源验证。

sudo sysctl -w net.ipv4.conf.all.rp_filter=0
sudo sysctl -w net.ipv4.conf.eth1.rp_filter=0
sudo sysctl -w net.ipv4.conf.eth2.rp_filter=0

如需详细了解 rp_filter,请参阅 Linux 内核文档中的 IP Sysctl

增加网络驱动程序的环形缓冲区空间

本部分介绍了如何增加实例上网络驱动程序的环形缓冲区空间。

对于接收大量流量的多播消费者,请将网络驱动程序的环形缓冲区空间增加到 2048,以帮助避免丟包。针对接收多播流量的每个网络接口执行此操作。

请参阅以下示例命令,这些命令用于配置 nic1nic2

sudo ethtool -G eth1 rx 2048 tx 2048
sudo ethtool -G eth2 rx 2048 tx 2048

用于测试 ULL 多播连接性的示例命令

本部分提供了使用 iperf 工具在不启动应用工作负载的情况下测试多播流量的示例命令。本部分中的步骤要求完成超低延迟解决方案的配置概览中所述的多播配置。

从多播提供方发送 ULL 多播流量

  1. 使用 SSH 连接到实例

  2. 如果您尚未安装 iperf,请进行安装。iperf3 不支持多播。 以下命令使用 iperf,该命令会安装 iperf2

    sudo yum install iperf
    
  3. 如需将多播流量发送到多播群组 IP 地址,请运行以下命令:

    iperf -c MULTICAST_GROUP_ADDRESS%NIC -p 1234 -l 512 -i 1 -u -b 1000pps -t 999999 -B NIC_IP_ADDRESS
    

    替换以下值:

    • MULTICAST_GROUP_ADDRESS:多播群组 IP 地址
    • NIC 网络接口设备名称,例如 eth1eth2
    • NIC_IP_ADDRESS 分配给您指定的 NIC 的 IP 地址

加入组并接收来自多播使用方的 ULL 多播流量

  1. 使用 SSH 连接到实例

  2. 如果您尚未安装 iperf,请进行安装。

    sudo yum install iperf
    
  3. 如需加入多播群组并记录收到的流量,请运行以下命令:

    iperf -s -p 1234 -B MULTICAST_GROUP_ADDRESS%NIC -l 512 -u -i 1
    

    替换以下值:

    • MULTICAST_GROUP_ADDRESS 多播群组 IP 地址
    • NIC 网络接口设备名称,例如 eth1eth2

    例如,以下命令会加入一个 IP 地址为 224.1.0.176 的组,以接收最多 512 字节的数据包,并记录收到的流量:

    iperf -s -p 1234 -B 224.1.0.176%eth1 -l 512 -u -i 1
    

在实例的 ULL 网络接口上,ethtool 会显示实际的物理端口链路状态 (up/down) 和物理链路速度。

如需检查 ULL 网络接口的物理链路状态和速度,请运行以下命令:

sudo ethtool NIC

NIC 替换为客机操作系统分配的网络接口的名称,例如 ens8f0ens48f0

后续步骤

  • 如需大致了解如何排查裸金属实例的网络性能问题,请参阅 Compute Engine 文档中的排查网络性能问题。例如,您可以停用 CPU 休眠状态,以实现完整的网络带宽性能。
  • 如需为 ULL 计算实例启用忙轮询并测试 Onload 功能,请参阅使用 Onload
  • 如需将实例系统时钟同步到其宿主服务器的物理 NIC 时钟,请参阅配置准确时间