对虚拟机实例的较高网络带宽进行基准化分析


本文档介绍如何通过创建两个虚拟机以及前后流式传输流量来观察网络性能,以测试每个虚拟机的 Tier_1 网络性能。要利用此功能,您必须在支持 Google 虚拟 NIC (gVNIC)操作系统中创建虚拟机。为了满足每个虚拟机的 Tier_1 层级网络性能要求,需要设置更大的虚拟机大小,因此请确认您有足够的 CPU 配额来创建这些虚拟机。

准备工作

  • 确保您使用的是公共的、支持 gVNIC 的映像,或者在您的项目中创建自定义映像
  • 验证您是否已创建 VPC 防火墙规则,以允许端口 TCP:5001 或您选择的其他端口中的入站流量,从而进行 iperf 性能测试。
  • 使用 iPerf 版本 2(而非版本 3)执行基准测试。
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

设置虚拟机以执行基准测试

创建两个启用了每个虚拟机的 Tier_1 层级网络性能且采用了最高的最大传输单元 (MTU) 设置的 n2-standard-64 vCPU 机器。这样,您虚拟机的出站流量带宽速率最高将可达 75 Gbps(使用内部 IP)。

gcloud

  1. 如需创建映像,请使用 gcloud compute images create 命令

      gcloud compute images create IMAGE_NAME \
       --project=PROJECT_ID \
       --source-image-family=SOURCE_IMAGE_FAMILY \
       --source-image-project=SOURCE_IMAGE_PROJECT \
       --guest-os-features=GVNIC
    

    请替换以下内容:

    • PROJECT_ID:您的项目的名称。
    • IMAGE_NAME:您要创建的映像的名称。
    • SOURCE_IMAGE_FAMILY:所需的公共映像版本。对于此测试,请使用 ubuntu-2004-lts
    • SOURCE_IMAGE_PROJECT:包含来源映像的项目名称。 对于此测试,请使用 ubuntu-os-cloud

    示例

    gcloud compute images create benchmark-image-test \
      --project=my-project \
      --source-image-family=ubuntu-2004-lts \
      --source-image-project=ubuntu-os-cloud \
      --guest-os-features=GVNIC
    
  2. 创建一个采用最高 MTU 设置的自动模式 VPC 网络:

      gcloud compute networks create NETWORK_NAME \
      --project=PROJECT_ID \
      --subnet-mode=AUTO --mtu=8896
    

    请替换以下内容:

    • PROJECT_ID:您的项目的名称。
    • NETWORK_NAME:网络的名称。
  3. 创建两个相同的实例:

      gcloud compute instances create \
          VM_NAME_1 VM_NAME_2 \
          --project=PROJECT_ID \
          --zone=ZONE \
          --machine-type=n2-standard-64 \
          --image=projects/PROJECT_NAME/global/images/IMAGE_NAME \
          --network=NETWORK_NAME \
          --network-interface=nic-type=GVNIC \
          --network-performance-configs=total-egress-bandwidth-tier=TIER_1
    

    请替换以下内容:

    • VM_NAME_1VM_NAME_2:您要创建的虚拟机实例的名称。
    • PROJECT_ID:您的项目名称。
    • ZONE:您的虚拟机所在的可用区。两个虚拟机必须位于同一可用区中。
    • PROJECT_NAME/global/images/IMAGE_NAME:项目名称和映像名称。
    • NETWORK_NAME:您为其配置了最高 MTU 设置的网络的名称。

执行基准测试

两个虚拟机必须位于同一可用区和同一 VPC 网络中。在基准测试期间,这两个虚拟机对 VPC 网络路径进行双向测试。

验证 MTU 设置

在其中一个虚拟机的客机操作系统中使用 ifconfig,以确认您的虚拟私有云 (VPC) 网络配置了最高的 MTU 设置。

  1. 连接到其中一个虚拟机

  2. 在终端窗口中,运行以下命令:

     /sbin/ifconfig | grep mtu
    

    报告的 MTU 应为 8896。

     ens4: flags=4163  mtu 8896
     lo: flags=73  mtu 65536
    

验证虚拟机配置

通过检查虚拟机属性确认虚拟机已启用 Tier_1 网络。

gcloud

如需查看实例,请使用 gcloud compute instances describe 命令

gcloud compute instances describe VM_NAME_1 \
    --project=PROJECT_ID \
    --zone=ZONE \
    --format="text(networkPerformanceConfig)"
gcloud compute instances describe VM_NAME_2 \
    --project=PROJECT_ID \
    --zone=ZONE \
    --format="text(networkPerformanceConfig)"

请替换以下内容:

  • VM_NAME_1:您要查看的虚拟机实例的名称。
  • VM_NAME_2:您要查看的虚拟机实例的名称。
  • PROJECT_ID:您的项目名称。
  • ZONE:您的虚拟机所在的可用区。两个虚拟机必须位于同一区域。

在响应中,您应该会看到以下内容:

networkPerformanceConfig.totalEgressBandwidthTier: TIER_1

使用 iPerf 在基于 Debian 的系统上执行基准测试

gcloud

  1. 如果您尚未完成设置虚拟机以进行基准测试中的步骤,请现在完成这些步骤。

  2. 两个虚拟机运行后,使用 SSH 连接到其中一个虚拟机。

    gcloud compute ssh VM_NAME_1 \
      --project=PROJECT_ID
    

    请替换以下内容:

    • VM_NAME_1:您的第一个虚拟机的名称。
    • PROJECT_ID:您的项目名称。
  3. 在第一个虚拟机上,完成以下步骤:

    1. 安装 iperf

      sudo apt-get update && sudo apt-get install iperf
      
    2. 获取此虚拟机的内部 IP 地址。记下内部 IP 地址以备后用。

      ip a
      
    3. 启动 iPerf 服务器。

      iperf -s
      

      它会启动一个服务器来侦听连接,以便执行基准测试。在测试期间,让 iPerf 服务器保持运行。

  4. 在单独的客户端终端中,使用 SSH 连接到第二个虚拟机。

    gcloud compute ssh VM_NAME_2 \
       --project=PROJECT_ID
    

    请替换以下内容:

    • VM_NAME_2:您的第二个虚拟机的名称。
    • PROJECT_ID:您的项目名称。
  5. 在第二个虚拟机上,完成以下步骤:

    1. 安装 iPerf。

      sudo apt-get update && sudo apt-get install iperf
      
    2. 运行 iperf 测试,并将第一个虚拟机的 IP 地址指定为目标。

      iperf -t 30 -c internal_ip_of_instance_1 -P 16
      

      这会执行 30 秒测试。如果 iPerf 无法访问其他虚拟机,则可能需要调整虚拟机或 Google Cloud 控制台中的网络或防火墙设置

      结果应类似于以下示例:它显示了启用 Tier_1 网络n2-standard-64 的 75 Gbps 出站流量带宽限制,超过了默认的 32 Gbps 出站流量带宽限制。

      ------------------------------------------------------------
      Client connecting to 10.128.0.10, TCP port 5001
      TCP window size: 1.59 MByte (default)
      ------------------------------------------------------------
      [ 12] local 10.128.0.11 port 57722 connected with 10.128.0.10 port 5001
      [ 11] local 10.128.0.11 port 57720 connected with 10.128.0.10 port 5001
      [ 16] local 10.128.0.11 port 57730 connected with 10.128.0.10 port 5001
      [  6] local 10.128.0.11 port 57710 connected with 10.128.0.10 port 5001
      [ 13] local 10.128.0.11 port 57724 connected with 10.128.0.10 port 5001
      [  8] local 10.128.0.11 port 57712 connected with 10.128.0.10 port 5001
      [  9] local 10.128.0.11 port 57716 connected with 10.128.0.10 port 5001
      [ 14] local 10.128.0.11 port 57726 connected with 10.128.0.10 port 5001
      [ 15] local 10.128.0.11 port 57728 connected with 10.128.0.10 port 5001
      [ 10] local 10.128.0.11 port 57718 connected with 10.128.0.10 port 5001
      [  4] local 10.128.0.11 port 57706 connected with 10.128.0.10 port 5001
      [  5] local 10.128.0.11 port 57708 connected with 10.128.0.10 port 5001
      [  3] local 10.128.0.11 port 57704 connected with 10.128.0.10 port 5001
      [ 17] local 10.128.0.11 port 57732 connected with 10.128.0.10 port 5001
      [  7] local 10.128.0.11 port 57714 connected with 10.128.0.10 port 5001
      [ 18] local 10.128.0.11 port 57734 connected with 10.128.0.10 port 5001
      [ ID] Interval       Transfer     Bandwidth
      [ 12]  0.0-30.0 sec  7.63 GBytes  2.19 Gbits/sec
      [ 11]  0.0-30.0 sec  17.7 GBytes  5.07 Gbits/sec
      [ 16]  0.0-30.0 sec  9.15 GBytes  2.62 Gbits/sec
      [  6]  0.0-30.0 sec  43.8 GBytes  12.6 Gbits/sec
      [ 13]  0.0-30.0 sec  23.6 GBytes  6.76 Gbits/sec
      [  8]  0.0-30.0 sec  13.3 GBytes  3.80 Gbits/sec
      [  9]  0.0-30.0 sec  9.29 GBytes  2.66 Gbits/sec
      [ 14]  0.0-30.0 sec  19.6 GBytes  5.62 Gbits/sec
      [ 15]  0.0-30.0 sec  12.5 GBytes  3.58 Gbits/sec
      [ 10]  0.0-30.0 sec  11.1 GBytes  3.19 Gbits/sec
      [  4]  0.0-30.0 sec  19.0 GBytes  5.43 Gbits/sec
      [  5]  0.0-30.0 sec  7.32 GBytes  2.10 Gbits/sec
      [  3]  0.0-30.0 sec  8.78 GBytes  2.51 Gbits/sec
      [ 17]  0.0-30.0 sec  17.5 GBytes  5.02 Gbits/sec
      [  7]  0.0-30.0 sec  33.4 GBytes  9.57 Gbits/sec
      [ 18]  0.0-30.0 sec  7.64 GBytes  2.19 Gbits/sec
      [SUM]  0.0-30.0 sec   261 GBytes  74.9 Gbits/sec
      

进行基准测试后移除资源

移除您在基准测试期间创建的资源,以避免为映像和其他虚拟机产生费用。

gcloud

  1. 若要移除您为基准测试创建的实例,请使用 gcloud compute instances delete 命令

    gcloud compute instances delete \
      VM_NAME_1 VM_NAME_2 \
       --project=PROJECT_ID \
       --zone=ZONE
    

    请替换以下内容:

    • VM_NAME_1VM_NAME_2:您要删除的两个虚拟机实例的名称。
    • PROJECT_ID:您的项目名称。
    • ZONE:您的虚拟机所在的可用区。两个虚拟机应位于同一可用区。
  2. 若要移除您为基准测试创建的网络,请使用 gcloud compute networks delete 命令

    gcloud compute networks delete NETWORK_NAME  \
       --project=PROJECT_ID
    

    请替换以下内容:

    • NETWORK_NAME:您要删除的网络的名称。
    • PROJECT_ID:您的项目名称。
  3. 若要移除您为基准测试创建的映像,请使用 gcloud compute images delete 命令

     gcloud compute images delete IMAGE_NAME  \
        --project=PROJECT_ID
    

    请替换以下内容:

    • IMAGE_NAME:要删除的映像的名称。
    • PROJECT_ID:您的项目名称。

后续步骤