本文介紹ECS執行個體如何使用Pktgen測試網路效能。
如何使用Pktgen測試網路效能,請查看以下樣本。
步驟一:準備環境
請準備兩台伺服器,分別為接收端和發送端,然後為每台伺服器增加1張網卡,一個用於登入,一個用於測試,確認用於測試的兩個網卡之間可以互連。然後執行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
目錄。cd /root/ 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,需自行安裝。
在執行如下命令之前,請先按照CentOS 8 EOL如何切換源?切換鏡像源,然後從 Centos-vault-8.5.2111.repo 鏡像倉庫檔案中複製 [PowerTools] 塊內容,粘貼到建立的 CentOS-PowerTools.repo 鏡像倉庫檔案中。
dnf config-manager --add-repo /etc/yum.repos.d/CentOS-PowerTools.repo dnf config-manager --set-enabled PowerTools dnf -y upgrade libmodulemd dnf -y install kernel-devel.x86_64 dnf -y install elfutils-libelf-devel dnf -y install numactl-devel.x86_64 dnf -y install libpcap-devel
依次執行以下命令,編譯安裝pktgen。
cd dpdk-stable-18.11.11 make config T=x86_64-native-linuxapp-gcc make all -j32 cd ..
依次執行以下命令,編譯安裝lua。
cd lua-5.4.3 make make install cd ..
依次執行以下命令,編譯安裝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驅動。
重要本文以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]
說明此處以Centos 8.3(Python 3.6.8 )環境執行python指令碼為例,執行以上命令,請修改為:python3 /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"
說明說明:
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:/>
在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