免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。
概述
本文主要介绍ECS实例如何使用Pktgen测试网络性能。
详细信息
阿里云提醒您:
- 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
- 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
如何使用Pktgen测试网络性能,请查看以下示例。
步骤一:准备环境
请准备两台服务器,分别为接收端和发送端,然后准备2个网卡,一个用于登录,一个用于测试,确认用于测试的两个网卡之间可以互通。然后执行ifconfig
命令,记录用于测试的两端网卡的IP地址和MAC地址,后面配置发送流量时需要使用。
步骤二:安装软件
说明:CentOS 6与CentOS 8操作系统版本结束了生命周期(EOL),按照社区规则,CentOS 6/8的源地址内容已移除。当您在CentOS 6/8系统内继续使用默认配置的源地址时会发生报错。建议您先切换CentOS 6/8的源地址,然后再进行操作。具体操作,请参见CentOS 6 EOL如何切换源?和CentOS 8 EOL如何切换源?。
以下操作发送端和接收端都需要执行。
- 远程登录Linux系统的ECS实例,关于如何登录Linux系统请参见使用用户名密码验证连接Linux实例。
- 执行以下命令,创建
pktgen
目录。mkdir pktgen
- 执行以下命令,进入
pktgen
目录。cd pktgen
- 执行以下命令,下载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版本必须对应,否则可能出现各种编译问题,本文以上述版本为例,也可以使用其他版本的安装包,需要确保三者版本兼容。
- 依次执行以下命令,解压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 - 在编译的过程中若有其他依赖缺失,请执行以下命令,安装以下对应的安装包。
- 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
- CentOS 7
- 依次执行以下命令,编译安装pktgen。
cd dpdk-stable-18.11.11
make config T=x86_64-native-linuxapp-gcc
make all -j32 - 依次执行以下命令,编译安装lua。
cd lua-5.4.3
make
make install - 依次执行以下命令,编译安装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
以下操作发送端和接收端都需要执行。
- 执行以下命令,查看
/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
- 执行以下命令,编辑/
etc/default/grub
文件。vim /etc/default/grub
- 按
i
键切换至编辑模式,在GRUB_CMDLINE_LINUX中添加intel_iommu=on
,修改之后的内容如下所示。 - 修改完成后,按下
Esc
键后,输入:wq
并回车以保存并关闭配置文件。 - 执行以下命令,更新配置。
grub2-mkconfig -o /boot/grub2/grub.cfg
- 执行以下命令,重启服务器。
reboot
- 执行以下命令,编辑/
- 依次执行以下命令,安装vfio和vfio-pci驱动。
modprobe vfio
modprobe vfio-pci - 执行以下命令,配置noniommu_mode。
echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
- 执行以下命令,查看并记录网卡的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 - 执行以下命令,解绑eth1网卡的virtio驱动。
echo "[$Bus-info]" > /sys/bus/pci/drivers/virtio-pci/unbind
说明:[$Bus-info]为步骤4获取的网卡的bus-info值。
- 执行以下命令,将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
以下操作发送端和接收端都需要执行。
- 在
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"
说明:
系统显示类似如下,进入Pktgen终端。- 0x1ffff:表示进程使用的CPU掩码,其中最低BIT CPU用于Shell控制,其他CPU可以用于端口收发包。
- "[1-16:1-16].0" :表示CPU编号,具体说明请查看以下内容,该CPU编号不能超出掩码中用于收发包的CPU范围。
- 1-16(冒号前)用于收包
- 1~16(冒号后)用于发包
- .0表示端口为0。
- 如果发送性能不够,可以适当调整CPU的范围,注意,发送报文CPU越多需要的大页越多,大页不够可能导致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:/> - 在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地址。
- 在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) -------------
- 发送端
- 在发送端中执行以下命令,停止流量。
stop 0
适用于
- 云服务器ECS
反馈
- 本页导读 (1)
文档反馈