1. 內(nèi)核態(tài)性能測(cè)試
# 測(cè)試要求
# 測(cè)試用例步驟
0. 檢查BIOS配置,確認(rèn)設(shè)置滿(mǎn)足場(chǎng)景要求(NUMA開(kāi)啟和關(guān)閉兩種場(chǎng)景(海光平臺(tái)覆蓋channel/die),其余設(shè)置,請(qǐng)嚴(yán)格按照阿里招標(biāo)參數(shù)BIOS出廠設(shè)置定制需求)
1.在被測(cè)端和輔助端,均執(zhí)行ifconfig ethx mtu value(value取值 1500、1982、9000),且輔助端和被測(cè)端為兩臺(tái)不同的物理機(jī),均安裝相同版本的iperf工具,測(cè)試網(wǎng)線端口采用光纖/網(wǎng)線直連
2.從對(duì)應(yīng)case目錄獲取安裝iperf工具, 1)tar -zxvf iperf.3.6.tar.gz 2)cd iperf.3.6 3)./configure&&make&&make install
3.被測(cè)端和輔助端ip需要固化,被側(cè)端port1:192.168.1.1/24 port2:172.16.1.1/24,輔助端port1:192.168.1.2/24 port2:172.16.1.2/24
4.TCP帶寬測(cè)試
4.1單端口測(cè)試:被側(cè)端執(zhí)行iperf3 -s -i 5 --forceflush 5|grep -i sum
4.2單端口測(cè)試:輔助端執(zhí)行 iperf3 -c 192.168.1.1 -t 100 -i 5 --forceflush 5 -P N |grep -i sum (N為port速率/10G取整+1,1G為1,10G為2,25G為3,40G為5、100G為11)
4.3雙端口并發(fā)測(cè)試:被側(cè)端執(zhí)行iperf3 -s -i 5 --forceflush 5 -p 4444|grep -i sum & iperf3 -s -i 5 --forceflush 5 -p 5555|grep -i sum
4.4雙端口并發(fā)測(cè)試:輔助端執(zhí)行iperf3 -c 192.168.1.1 -t 100 -i 5 --forceflush 5 -P N -p 4444 |grep -i sum & iperf3 -c 172.16.1.1 -t 100 -i 5 --forceflush 5 -P N -p 5555 |grep -i sum(N為port速率/10G取整+1,1G為1,10G為2,25G為3,40G為5、100G為11)
5.UDP帶寬測(cè)試
5.1單端口測(cè)試:在被測(cè)端執(zhí)行numactl --cpunodebind=netdev:ethx --membind=netdev:ethx iperf3 -s -i 5 --forceflush 5|grep -i sum
5.2單端口測(cè)試:在輔助端執(zhí)行 numactl --cpunodebind=netdev:ethx --membind=netdev:ethx iperf3 -u -c ip_addr -t 100 -i 5 --forceflush 5-P N -b 0|grep -i sum (N為port速率/10G取整+1,1G為1,10G為2,25G為3,40G為5、100G為11)
5.3雙端口并發(fā)測(cè)試:在被測(cè)端和輔助端,均執(zhí)行numactl --cpunodebind=netdev:ethx --membind=netdev:ethx iperf3 -s -i 5 --forceflush 5|grep -i sum
5.4雙端口并發(fā)測(cè)試:在被測(cè)端和輔助端,均執(zhí)行 numactl --cpunodebind=netdev:ethx --membind=netdev:ethx iperf3 -u -c ip_partner -t 100-i 5 --forceflush 5-P N -b 0|grep -i sum (N為port速率/10G取整+1,1G為1,10G為2,25G為3,40G為5、100G為11)
6.重復(fù)步驟1-5,直到取完所有mtu值,測(cè)試性能結(jié)果對(duì)比預(yù)期性能基線值
7.在被測(cè)端,執(zhí)行ethtool -S ethx |grep -iE "err|fail|drop|lost">ethx_ethtool.txt,每個(gè)被測(cè)網(wǎng)口都需要遍歷
8.在被測(cè)端,執(zhí)行l(wèi)spci -vvv -s 1a:00.0|grep -E "UESta|UEMsk|CESta|CEMsk">ethx_lspci.txt,每個(gè)被測(cè)網(wǎng)口都需要遍歷。
9.在被測(cè)端執(zhí)行,dmesg|grep -E "BDF|Driver_Name" |grep -iE "fail|err|warn|unsupport" > ethx_dmesg.txt,每個(gè)被測(cè)網(wǎng)口都需要遍歷。
# PASS標(biāo)準(zhǔn)
1.測(cè)試過(guò)程網(wǎng)絡(luò)帶寬平穩(wěn),無(wú)抖動(dòng) 2.網(wǎng)絡(luò)帶寬/latency平均值符合網(wǎng)卡理論數(shù)值 3.測(cè)試過(guò)程中丟包率低于1% 4.測(cè)試過(guò)程中無(wú)相關(guān)錯(cuò)誤信息報(bào)出
2. Bond mode=4 功能和性能測(cè)試
# 要求
# 測(cè)試用例步驟
0. 檢查BIOS配置,確認(rèn)設(shè)置滿(mǎn)足場(chǎng)景要求(NUMA開(kāi)啟和關(guān)閉兩種場(chǎng)景(海光平臺(tái)覆蓋memoryinterleving=channel/die),其余設(shè)置,請(qǐng)嚴(yán)格按照阿里招標(biāo)參數(shù)BIOS出廠設(shè)置定制需求)
1.在被測(cè)端和輔助端,均執(zhí)行ifconfig ethx mtu value(value取值 1500、1982、9000),且輔助端和被測(cè)端為兩臺(tái)不同的物理機(jī),均安裝相同版本的iperf工具,測(cè)試網(wǎng)線端口采用光纖/網(wǎng)線直連
2.從對(duì)應(yīng)case目錄獲取安裝iperf工具, 1)tar -zxvf iperf.3.6.tar.gz 2)cd iperf.3.6 3)./configure&&make&&make install
3.將網(wǎng)卡雙口組bond4,
nmcli device #列出所有網(wǎng)口狀態(tài) nmcli connection delete ens23f0np0 #刪除配置bond4的原網(wǎng)口配置
nmcli connection delete ens23f1np1 #刪除配置bond4的原網(wǎng)口配置
nmcli connection add con-name bond0 ifname bond0 type bond mode 4 #添加bond4的網(wǎng)口配置,網(wǎng)口名設(shè)置為bond0
nmcli connection add type bond-slave ifname ens23f0np0 master bond0 #添加bond4的slave網(wǎng)口1配置
nmcli connection add type bond-slave ifname ens23f1np1 master bond0 #添加bond4的slave網(wǎng)口2配置
nmcli connection modify bond0 ipv4.method manual ipv4.address 1.1.1.1/24 ipv4.gateway 1.1.1.254 #設(shè)置bond的網(wǎng)口ip
nmcli connection up bond-slave-ens23f0np0 #設(shè)置bond4的slave網(wǎng)口1 up nmcli connection up bond-slave-ens23f1np1 #設(shè)置bond4的slave網(wǎng)口2 up
nmcli connection down bond0 #設(shè)置bond網(wǎng)口down nmcli connection up bond0 #設(shè)置bond網(wǎng)口up
nmcli device #列出所有網(wǎng)口狀態(tài) cat /proc/net/bonding/bond0 #查看bond模式,為IEEE 802.3ad Dynamic link aggregation即為bond4
4.安裝iperf3工具,并在被測(cè)端和輔助端,均執(zhí)行ifconfig ethx(網(wǎng)口名) mtu value(value取值 1500, 1982, 9000),并通過(guò)ip a查看該網(wǎng)口的mtu值。
5.TCP單向帶寬測(cè)試 5.1在被測(cè)端執(zhí)行iperf3 -s -i 5 --forceflush 5 5.2在輔助端執(zhí)行 iperf3 -c $ip_addr(被測(cè)機(jī)ip) -t 100 -i 5 --forceflush 5 -P $N (N為port速率/10G取整+1,10G為2,25G為3,40G為5、100G為11)
6.UDP單向帶寬測(cè)試(40G以上網(wǎng)卡不測(cè)試)
6.1在被測(cè)端執(zhí)行iperf3 -s -i 5 --forceflush 5|grep -i sum
6.2在輔助端執(zhí)行iperf3 -u -c ip_addr -t 100 -i 5 --forceflush 5-P N -b0|grep -i sum (N為port速率/10G取整+1,10G為2,25G為3,40G為5、100G為11)
7.TCP雙向帶寬測(cè)試
7.1在被測(cè)端和輔助端均執(zhí)行iperf3 -s -i 5 --forceflush 5
7.2在被測(cè)端和輔助端均執(zhí)行 iperf3 -c $ip_addr(被測(cè)機(jī)ip) -t 100 -i 5 --forceflush 5 -P $N (N為port速率/10G取整+1,10G為2,25G為3,40G為5、100G為11)
8.UDP雙向帶寬測(cè)試(40G以上網(wǎng)卡不測(cè)試)
8.1在被測(cè)端和輔助端均執(zhí)行 iperf3 -s -i 5 --forceflush 5|grep -i sum
8.2在被測(cè)端和輔助端均執(zhí)行 iperf3 -u -c ip_addr -t 100 -i 5 --forceflush 5-P N -b 0|grep -i sum (N為port速率/10G取整+1,10G為2,25G為3,40G為5、100G為11)
9.重復(fù)步驟4-6,直到取完所有mtu值(1500,1982,9000)
10.在被測(cè)端,執(zhí)行ethtool -S ethx |grep -iE "err|fail|drop|lost"。
11.在被測(cè)端,執(zhí)行l(wèi)spci -vvv -s 1a:00.0(測(cè)試網(wǎng)卡的BDF號(hào))|grep -E "UESta|UEMsk|CESta|CEMsk"。
12.在被測(cè)端,執(zhí)行dmesg|grep -Ei "BDF(測(cè)試網(wǎng)卡的BDF號(hào))|Driver_Name(測(cè)試網(wǎng)卡的驅(qū)動(dòng)名稱(chēng))" |grep -iE "fail|err|warn|unsupport"。
13.在被測(cè)端,執(zhí)行ifconfig $網(wǎng)口名,查看是否有 rx drop 和 tx drop,并截圖,如有大量丟包,請(qǐng)排查原因"
# PASS標(biāo)準(zhǔn)
1.測(cè)試過(guò)程網(wǎng)絡(luò)帶寬平穩(wěn),無(wú)抖動(dòng) 2.網(wǎng)絡(luò)帶寬/latency平均值符合網(wǎng)卡理論數(shù)值 3.測(cè)試過(guò)程中丟包率低于1% 4.測(cè)試過(guò)程中無(wú)相關(guān)錯(cuò)誤信息報(bào)出
3 網(wǎng)卡的DPDK性能測(cè)試
# 要求
# 測(cè)試用例步驟
一、DPDK工具安裝:
1、獲取源碼包https://fast.dpdk.org/rel/(使用21.11版本)
2、配置DPDK測(cè)試環(huán)境
(1) 修改環(huán)境python ≥ 3.6
(2) 安裝Re2c,下載鏈接:https://github.com/skvadrik/re2c/archive/refs/tags/2.2.tar.gz
(3) 安裝Ninja,下載鏈接:https://github.com/ninja-build/ninja/archive/refs/tags/v1.12.1.tar.gz
(4) 安裝Meson
3、解壓dpdk源碼包 tar -xvf dpdk-21.11.5.tar.xz cd dpdk-stable-21.11.5/
4、執(zhí)行以下命令編譯并安裝DPDK meson setup build cd build ninja ninja install ldconfig DPDK性能測(cè)試: (numa默認(rèn)開(kāi),需遍歷綁核及不綁核兩種場(chǎng)景,numa設(shè)置請(qǐng)參照本sheet頂部設(shè)置 )
1、配置大頁(yè)內(nèi)存 #查看當(dāng)前環(huán)境支持的NUMA Node個(gè)數(shù),根據(jù)NUMA Node數(shù)為每個(gè)Node預(yù)留大頁(yè)內(nèi)存 numactl -H #查看系統(tǒng)支持的大頁(yè)類(lèi)型 ll /sys/kernel/mm/hugepages/
#打開(kāi)“/etc/default/grub”文件 vi /etc/default/grub #修改系統(tǒng)啟動(dòng)項(xiàng),預(yù)留大頁(yè) ,預(yù)留16個(gè)1G大頁(yè),總共16G。
在GRUB_CMDLINE_LINUX行最后加上: default_hugepagesz=1G hugepagesz=1G hugepages=16 #生成系統(tǒng)grub并重啟系統(tǒng)使配置生效 grub2-mkconfig -o /boot/efi/EFI/openeuler/grub.cfg #確認(rèn)是否配置成功,
若回顯信息中顯示已配置的大頁(yè)數(shù)量為16,則預(yù)留大頁(yè)配置成功 cat /proc/meminfo | grep -i huge
#掛載大頁(yè) mkdir -p /mnt/huge_1gb mount -t hugetlbfs none /mnt/huge_1gb -o pagesize=1GB
2、接管內(nèi)核態(tài)網(wǎng)口(mellonx網(wǎng)卡不需要)
#加載內(nèi)核驅(qū)動(dòng)模塊 modprobe vfio modprobe vfio-pci #綁定被測(cè)網(wǎng)口用戶(hù)態(tài),用于DPDK轉(zhuǎn)發(fā)。首先獲取網(wǎng)口PCI地址,可以使用DPDK源碼“usertools/dpdk-devbind.py”腳本進(jìn)行查看,以及進(jìn)行接口綁定工作 查看待綁定接口信息 dpdk-devbind.py -s
#查看端口狀態(tài),接管鏈路狀態(tài)up的端口 ethtool enp125s0f1 #綁定用于DPDK轉(zhuǎn)發(fā)的網(wǎng)口,此處以綁定0000:7d:00.1網(wǎng)口為例,使用時(shí)以查詢(xún)到的待綁定的網(wǎng)口為準(zhǔn) dpdk-devbind.py --bind=vfio-pci 0000:7d:00.1
#查看端口是否成功綁定 dpdk-devbind.py -s
3、運(yùn)行DPDK dpdk-testpmd -l 5,6 -n 8 --force-max-simd-bitwidth=512 -a 0000:31:00.0 -a 0000:4b:00.0 -- -i --portmask=0x3 --rxq=1 --txq=1 --txd=Maxtx --rxd=Maxtx -txpkts=64 -rxpkts=64 --forward=io -a (-txpkts=64、128、256、512、1024;-rxpkts=64、128、256、512、1024)rxd txd Max查看方式:ethtool -g eth0
命令解析: -l 5,6: 指定使用的核心列表。這里指定了邏輯核心 5 和核心 6,用于運(yùn)行 testpmd。
-n 8: 指定內(nèi)存通道的數(shù)量
--force-max-simd-bitwidth=512: 強(qiáng)制指定最大 SIMD(Single Instruction Multiple Data)指令集的位寬為 512 位。這通常用于優(yōu)化性能,確保使用 AVX-512 指令集(如果硬件支持)
-a 0000:31:00.0 和 -a 0000:4b:00.0: 指定要綁定到 DPDK 的 PCI 設(shè)備地址。示例:-a 0000:31:00.0 和 -a 0000:4b:00.0 分別表示兩個(gè)網(wǎng)卡設(shè)備的 PCI 地址
-- -i: 啟動(dòng)交互模式(Interactive Mode),允許用戶(hù)在運(yùn)行時(shí)輸入命令
--portmask=0x3: 指定使用的網(wǎng)卡端口掩碼。示例:--portmask=0x3 表示使用端口 0 和端口 1(二進(jìn)制為 00000011)
--rxq=1: 設(shè)置每個(gè)端口的接收隊(duì)列(RX Queue)數(shù)量為 1。
--txq=1: 設(shè)置每個(gè)端口的發(fā)送隊(duì)列(TX Queue)數(shù)量為 1。
--txd=Maxtx: 設(shè)置每個(gè)發(fā)送隊(duì)列的描述符數(shù)量為最大值。Max查看方式:ethtool -g eth0
--rxd=Maxtx: 設(shè)置每個(gè)接收隊(duì)列的描述符數(shù)量為最大值。Max查看方式:ethtool -g eth0
-txpkts=64:-txpkts=64、128、256、512、1024,遍歷五種包大小 設(shè)置發(fā)送數(shù)據(jù)包的分段大小為 64 字節(jié)。
-rxpkts=64:-rxpkts=64、128、256、512、1024,遍歷五種包大小 設(shè)置接收數(shù)據(jù)包的分段大小為 64 字節(jié)。
--forward=io: 設(shè)置轉(zhuǎn)發(fā)模式為基本 IO 轉(zhuǎn)發(fā)(Input/Output Forwarding)。在此模式下,接收到的數(shù)據(jù)包會(huì)直接從接收端口轉(zhuǎn)發(fā)到發(fā)送端口。
交互模式下:
start:開(kāi)始數(shù)據(jù)包轉(zhuǎn)發(fā)。
stop:停止數(shù)據(jù)包轉(zhuǎn)發(fā)。
quit:退出 testpmd。
set fwd <mode>:設(shè)置數(shù)據(jù)包轉(zhuǎn)發(fā)模式。
常見(jiàn)模式包括:io:基本的輸入輸出轉(zhuǎn)發(fā)。mac:基于 MAC 地址轉(zhuǎn)發(fā)。rxonly:僅接收數(shù)據(jù)包,不轉(zhuǎn)發(fā)。txonly:僅發(fā)送數(shù)據(jù)包,不接收。flowgen:生成流量并轉(zhuǎn)發(fā)。
show port stats all: 顯示所有端口的流量統(tǒng)計(jì)信息(接收和發(fā)送的包數(shù)、字節(jié)數(shù)等) 具體參數(shù)請(qǐng)根據(jù)實(shí)際配置調(diào)整
# PASS標(biāo)準(zhǔn)
一、 1、dpdk安裝成功,系統(tǒng)日志無(wú)相關(guān)error 二、 1、該網(wǎng)口已正確被驅(qū)動(dòng),ifconfig不顯示該網(wǎng)口 2、測(cè)試過(guò)程無(wú)相關(guān)錯(cuò)誤信息報(bào)出 3、測(cè)試結(jié)果與基線對(duì)比,結(jié)果需在正負(fù)10%以?xún)?nèi)