ECS实例如何使用Pktgen测试网络性能

免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

概述

本文主要介绍ECS实例如何使用Pktgen测试网络性能。

详细信息

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

如何使用Pktgen测试网络性能,请查看以下示例。

步骤一:准备环境

请准备两台服务器,分别为接收端和发送端,然后准备2个网卡,一个用于登录,一个用于测试,确认用于测试的两个网卡之间可以互通。然后执行ifconfig命令,记录用于测试的两端网卡的IP地址和MAC地址,后面配置发送流量时需要使用。

步骤二:安装软件

以下操作发送端和接收端都需要执行。

  1. 远程登录Linux系统的ECS实例,关于如何登录Linux系统请参见使用用户名密码验证连接Linux实例
  2. 执行以下命令,创建pktgen目录。
    mkdir pktgen
  3. 执行以下命令,进入pktgen目录。
    cd pktgen
  4. 执行以下命令,下载pktgen、lua、dpdk安装包。
    wget https://git.dpdk.org/apps/pktgen-dpdk/snapshot/pktgen-dpdk-pktgen-3.6.5.zip https://www.lua.org/ftp/lua-5.4.3.tar.gz https://fast.dpdk.org/rel/dpdk-18.11.11.tar.xz
    说明:pktgen、lua、dpdk版本必须对应,否则可能出现各种编译问题,本文以上述版本为例,也可以使用其他版本的安装包,需要确保三者版本兼容。
  5. 依次执行以下命令,解压pktgen、lua、dpdk安装包。
    tar -Jxvf dpdk-18.11.11.tar.xz
    
    tar -zxvf lua-5.4.3.tar.gz
    unzip pktgen-dpdk-pktgen-3.6.5.zip
  6.  在编译的过程中若有其他依赖缺失,请执行以下命令,安装以下对应的安装包。
    • CentOS 7
      yum -y install kernel-devel.x86_64
      yum -y install numactl-devel.x86_64
      yum -y install elfutils-libelf-devel
      yum -y install libpcap-devel
    • CentOS 8
      说明:在CentOS 8系统中,默认没有安装libpcap-devel,需自行安装。
      dnf config-manager --add-repo /etc/yum.repos.d/CentOS-PowerTools.repo 
      dnf config-manager --set-enabled PowerTools
      dnf install epel-release
      dnf install libpcap-devel
  7. 依次执行以下命令,编译安装pktgen。
    cd dpdk-stable-18.11.11
    make config T=x86_64-native-linuxapp-gcc
    make all -j32
  8. 依次执行以下命令,编译安装lua。
    cd lua-5.4.3
    make
    make install
  9. 依次执行以下命令,编译安装dpdk。
    cd pktgen-dpdk-pktgen-3.6.5/
    export RTE_SDK=/root/pktgen/dpdk-stable-18.11.11/
    export RTE_TARGET=build
    make -j32

步骤三:绑定驱动到vfio

以下操作发送端和接收端都需要执行。

  1. 执行以下命令,查看/proc/cmdline文件,确保OS的GRUB为intel_iommu=on
    cat /proc/cmdline
    系统显示类似如下,若不存在该参数,请执行以下步骤修改。
    BOOT_IMAGE=/boot/vmlinuz-3.10.0-XXXX.19.1.el7.x86_64 root=UUID=9f2d3e15-XXXX-XXXX-8385-0165b4b67864 ro crashkernel=auto spectre_v2=retpoline rhgb quiet net.ifnames=0 console=tty0 console=ttyS0,115200n8 noibrs intel_iommu=on
    1. 执行以下命令,编辑/etc/default/grub文件。
      vim /etc/default/grub
    2. i键切换至编辑模式,在GRUB_CMDLINE_LINUX中添加intel_iommu=on,修改之后的内容如下所示。
      Dingtalk_20210623145711.jpg
    3. 修改完成后,按下Esc键后,输入:wq并回车以保存并关闭配置文件。
    4. 执行以下命令,更新配置。
      grub2-mkconfig -o /boot/grub2/grub.cfg
    5. 执行以下命令,重启服务器。
      reboot
  2. 依次执行以下命令,安装vfio和vfio-pci驱动。
    modprobe vfio
    modprobe vfio-pci
  3. 执行以下命令,配置noniommu_mode。
    echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
  4. 执行以下命令,查看并记录网卡的bus-info值。
    ethtool -i eth1
    说明:本文以eth1网卡为例,现场请以实际环境为准。
    系统显示类似如下。
    driver: virtio_net
    version: 1.0.0
    firmware-version:
    expansion-rom-version:
    bus-info: 0000:00:08.0
    supports-statistics: no
    supports-test: no
    supports-eeprom-access: no
    supports-register-dump: no
    supports-priv-flags: no
  5. 执行以下命令,解绑eth1网卡的virtio驱动。
    echo "[$Bus-info]" > /sys/bus/pci/drivers/virtio-pci/unbind
    说明:[$Bus-info]为步骤4获取的网卡的bus-info值。
  6. 执行以下命令,将bus-info绑定到vfio-pci驱动。
    /root/pktgen/dpdk-stable-18.11.11/usertools/dpdk-devbind.py -b vfio-pci [$Bus-info]

步骤四:配置大页

以下操作发送端和接收端都需要执行。请确认您的节点数量,然后执行以下对应的命令。

  • 双节点
    echo 8000 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
    echo 8000 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
  • 单节点
    echo 8000 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

步骤五:启动pktgen

以下操作发送端和接收端都需要执行。

  1. pktgen-dpdk-pktgen-3.6.5目录中,执行以下命令,启动pktgen。
    ./app/build/pktgen -c 0x1ffff -n 4 --socket-mem 16000 -w [$Bus-info] -- -P -m "[1-16:1-16].0"
    说明:
    • 0x1ffff:表示进程使用的CPU掩码,其中最低BIT CPU用于shell控制,其他CPU可以用于端口收发包。
    • "[1-16:1-16].0" :表示CPU编号,具体说明请查看以下内容,该CPU编号不能超出掩码中用于收发包的CPU范围。
      • 1-16(冒号前)用于收包
      • 1~16(冒号后)用于发包
      • .0表示端口为0。
    • 如果发送性能不够,可以适当调整CPU的范围,注意,发送报文CPU越多需要的大页越多,大页不够可能导致pktgen进程停止。
    系统显示类似如下,进入Pktgen终端。
    Copyright (c) <2010-2019>, Intel Corporation. All rights reserved. Powered by DPDK
    EAL: Detected 64 lcore(s)
    EAL: Detected 1 NUMA nodes
    EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
    EAL: No free hugepages reported in hugepages-1048576kB
    EAL: Probing VFIO support...
    EAL: VFIO support initialized
    EAL: PCI device 0000:00:08.0 on NUMA socket -1
    EAL:   Invalid NUMA socket, default to 0
    EAL:   probe driver: 1af4:1000 net_virtio
    EAL:   using IOMMU type 8 (No-IOMMU)
    Lua 5.4.3  Copyright (C) 1994-2021 Lua.org, PUC-Rio

    *** Copyright (c) <2010-2019>, Intel Corporation. All rights reserved.
    *** Pktgen created by: Keith Wiles -- >>> Powered by DPDK <<<

    Initialize Port 0 -- TxQ 16, RxQ 16,  Src MAC 00:16:3e:24:9b:a4

    Port  0: Link Up - speed 10000 Mbps - full-duplex <Enable promiscuous mode>

      RX/TX processing lcore:   1 rx:  1 tx:  1
      RX/TX processing lcore:   2 rx:  1 tx:  1
      RX/TX processing lcore:   3 rx:  1 tx:  1
      RX/TX processing lcore:   4 rx:  1 tx:  1
    - Ports 0-0 of 1   <Main Page>  Copyright (c) <2010-2019>, Intel Corporation
      Flags:Port        :   P-----R--------:0
    Link State          :       <UP-10000-FD>     ----TotalRate----
    Pkts/s Max/Rx       :                 1/0                   1/0
           Max/Tx       :                 0/0                   0/0
    MBits/s Rx/Tx       :                 0/0                   0/0
    Broadcast           :                   0
    Multicast           :                   0
    Sizes 64            :                   0
          65-127        :                   0
          128-255       :                   0
          256-511       :                   0
          512-1023      :                   0
          1024-1518     :                   0
    Runts/Jumbos        :                 2/0
    ARP/ICMP Pkts       :                 2/0
    Errors Rx/Tx        :                 0/0
    Total Rx Pkts       :                   2
          Tx Pkts       :                   0
          Rx MBs        :                   0
          Tx MBs        :                   0
                        :
    Pattern Type        :             abcd...
    Tx Count/% Rate     :       Forever /100%
    Pkt Size/Tx Burst   :           64 /   64
    Port Src/Dest       :         1234 / 5678
    Pkt Type:VLAN ID    :     IPv4 / UDP:0001
    802.1p CoS/DSCP/IPP :           0/  0/  0
    VxLAN Flg/Grp/vid   :    0000/    0/    0
    IP  Destination     :         192.168.X.X
        Source          :      192.168.X.X/24
    MAC Destination     :   00:00:00:00:00:00
        Source          :   00:XX:XX:24:9b:a4
    PCI Vendor/Addr     :   1af4:1000/00:08.0

    -- Pktgen Ver: 3.6.5 (DPDK 18.11.11)  Powered by DPDK  (pid:4873) -------------
    Pktgen:/>
  2.  在Pktgen终端中,依次执行以下命令,为发送端配置发送的流。
    set 0 proto udp
    range 0 src mac start [$MAC]
    range 0 src mac min [$MAC]
    range 0 src mac inc 00:00:00:00:00:00
    range 0 dst mac start ee:ff:ff:ff:ff:ff
    range 0 dst mac min ee:ff:ff:ff:ff:ff
    range 0 dst mac inc 00:00:00:00:00:00
    range 0 src port start 10000
    range 0 src port min 10000
    range 0 src port max 10000
    range 0 src port inc 0
    range 0 dst port start 2000
    range 0 dst port min 2000
    range 0 dst port max 2255
    range 0 dst port inc 1
    range 0 proto udp
    range 0 src ip start [$Local_IP]
    range 0 src ip min [$Local_IP]
    range 0 src ip inc 0.0.0.0
    range 0 size start 64
    range 0 size min 64
    range 0 size max 64
    range 0 size inc 0
    range 0 dst ip start [$Receive_IP]
    range 0 dst ip min [$Receive_IP]
    range 0 dst ip inc 0.0.0.0
    enable all range
    说明:
    • [$MAC]为发送端的MAC地址。
    • [$Local_IP]为发送端的IP地址。
    • [$Receive_IP]为接收端的IP地址。
  3. 在Pktgen终端中执行以下命令,发送端启动发送。
    start 0
    观察流量数据:
    • 发送端
      -iPorts 0-0 of 1   <Main Page>  Copyright (c) <2010-2019>, Intel Corporation
        Flags:Port        :   P-----R--------:0                   1/0
      Link State          :       <UP-10000-FD>     ----TotalRate----
      Pkts/s Max/Rx       :                 1/0                   1/0
             Max/Tx       :   14906304/14904704     14906304/14904704
      MBits/s Rx/Tx       :             0/10015               0/10015
      Broadcast           :                   0
      Multicast           :                   0
      Sizes 64            :                   0
            65-127        :                   0
            128-255       :                   0
            256-511       :                   0
            512-1023      :                   0
            1024-1518     :                   0
      Runts/Jumbos        :                16/0
      ARP/ICMP Pkts       :                16/0
      Errors Rx/Tx        :                 0/0
      Total Rx Pkts       :                  16
            Tx Pkts       :          1655962864
    • 接收端
      - Ports 0-0 of 1   <Main Page>  Copyright (c) <2010-2019>, Intel Corporation
        Flags:Port        :   P--------------:0
      Link State          :       <UP-10000-FD>     ----TotalRate----
      Pkts/s Max/Rx       :   14911585/14910795     14911585/14910795
             Max/Tx       :                 0/0                   0/0
      MBits/s Rx/Tx       :             10020/0               10020/0
      Broadcast           :                   0
      Multicast           :                   0
      Sizes 64            :          1862740038
            65-127        :                   0
            128-255       :                   0
            256-511       :                   0
            512-1023      :                   0
            1024-1518     :                   0
      Runts/Jumbos        :                 6/0
      ARP/ICMP Pkts       :                 6/0
      Errors Rx/Tx        :                 0/0
      Total Rx Pkts       :          2298743466
            Tx Pkts       :                   0
            Rx MBs        :             1544755
            Tx MBs        :                   0
                          :
      Pattern Type        :             abcd...
      Tx Count/% Rate     :       Forever /100%
      Pkt Size/Tx Burst   :           64 /   64
      Port Src/Dest       :         1234 / 5678
      Pkt Type:VLAN ID    :     IPv4 / TCP:0001
      802.1p CoS/DSCP/IPP :           0/  0/  0
      VxLAN Flg/Grp/vid   :    0000/    0/    0
      IP  Destination     :         192.168.X.1
          Source          :      192.168.X.X/24
      MAC Destination     :   00:00:00:00:00:00
          Source          :   00:XX:XX:24:2d:55
      PCI Vendor/Addr     :   1af4:1000/00:08.0

      -- Pktgen Ver: 3.6.5 (DPDK 18.11.11)  Powered by DPDK  (pid:4072) -------------
  4. 在发送端中执行以下命令,停止流量。
    stop 0

适用于

  • 云服务器ECS