帶寬影涉、吞吐量变隔、延時(shí)、PPS 等蟹倾,都是最常用的網(wǎng)絡(luò)性能指標(biāo)匣缘。
Linux 網(wǎng)絡(luò)基于 TCP/IP 協(xié)議棧構(gòu)建猖闪,而在協(xié)議棧的不同層,我們所關(guān)注的網(wǎng)絡(luò)性能也不盡相同肌厨。
在應(yīng)用層培慌,我們關(guān)注的是應(yīng)用程序的并發(fā)連接數(shù)、每秒請(qǐng)求數(shù)柑爸、處理延遲吵护、錯(cuò)誤數(shù)等,可以使用 wrk表鳍、JMeter 等工具馅而,模擬用戶的負(fù)載,得到想要的測(cè)試結(jié)果譬圣。
而在傳輸層用爪,我們關(guān)注的是 TCP、UDP 等傳輸層協(xié)議的工作狀況胁镐,比如 TCP 連接數(shù)偎血、 TCP 重傳、TCP 錯(cuò)誤數(shù)等盯漂。此時(shí)颇玷,你可以使用 iperf、netperf 等就缆,來(lái)測(cè)試 TCP 或 UDP 的性能帖渠。
再向下到網(wǎng)絡(luò)層,我們關(guān)注的則是網(wǎng)絡(luò)包的處理能力竭宰,即 PPS空郊。Linux 內(nèi)核自帶的 pktgen,就可以幫你測(cè)試這個(gè)指標(biāo)切揭。
我們首先來(lái)看狞甚,網(wǎng)絡(luò)接口層和網(wǎng)絡(luò)層,它們主要負(fù)責(zé)網(wǎng)絡(luò)包的封裝廓旬、尋址哼审、路由以及發(fā)送和接收。
在這兩個(gè)網(wǎng)絡(luò)協(xié)議層中孕豹,每秒可處理的網(wǎng)絡(luò)包數(shù) PPS涩盾,就是最重要的性能指標(biāo)。特別是 64B 小包的處理能力励背,值得我們特別關(guān)注春霍。
那么,如何來(lái)測(cè)試網(wǎng)絡(luò)包的處理能力呢叶眉?
# cat test.sh
##################################################
# 定義一個(gè)工具函數(shù)址儒,方便后面配置各種測(cè)試選項(xiàng)
function pgset() {
? ? local result
? ? echo $1 > $PGDEV
? ? result=`cat $PGDEV | fgrep "Result: OK:"`
? ? if [ "$result" = "" ]; then
? ? ? ? cat $PGDEV | fgrep Result:
? ? fi
}
# 為 0 號(hào)線程綁定 eth0 網(wǎng)卡
PGDEV=/proc/net/pktgen/kpktgend_0
pgset "rem_device_all"? # 清空網(wǎng)卡綁定
pgset "add_device eth0"? # 添加 eth0 網(wǎng)卡
# 配置 eth0 網(wǎng)卡的測(cè)試選項(xiàng)
PGDEV=/proc/net/pktgen/eth0
pgset "count 1000000"? ? # 總發(fā)包數(shù)量
pgset "delay 5000"? ? ? # 不同包之間的發(fā)送延遲 (單位納秒)
pgset "clone_skb 0"? ? ? # SKB 包復(fù)制
pgset "pkt_size 64"? ? ? # 網(wǎng)絡(luò)包大小
pgset "dst 192.168.0.30" # 目的 IP
pgset "dst_mac 11:11:11:11:11:11"? # 目的 MAC
# 啟動(dòng)測(cè)試
PGDEV=/proc/net/pktgen/pgctrl
pgset "start"
##################################################