性能指標
- 帶寬:表示鏈路的最大專屬路率远豺,單位b/s(比特/秒)奈偏。在為服務(wù)器選購網(wǎng)卡時,帶寬就是最核心的參考指標躯护,常用的帶寬1000M惊来、10G、40G棺滞、100G
- 吞吐量:表示沒有丟表時的最大數(shù)據(jù)傳輸速率裁蚁,單位通常為b/s(比特/秒)或者B/s(字節(jié)/秒)。吞吐量受帶寬限制继准,吞吐量/帶寬 就是該網(wǎng)絡(luò)鏈路的使用率
- 延遲:表示從網(wǎng)絡(luò)請求發(fā)出后枉证,一只到收到遠端響應(yīng),所需要的時間延遲移必。這個指標在不同場景中可能會有不同含義室谚。它可以表示建立連接需要的時間(比如TCP握手延遲),或者一個數(shù)據(jù)包往返所需時間(比如RTT)
- PPS:是 packet per second(包/秒)的縮寫崔泵,表示以網(wǎng)絡(luò)包單位的傳輸速率秒赤。PPS通常用來評估網(wǎng)絡(luò)的轉(zhuǎn)發(fā)能力,而基于Linux服務(wù)器的轉(zhuǎn)發(fā)憎瘸,很容器受到網(wǎng)絡(luò)包大小的影響(交換機通常不會收到太大影響入篮,即交換機可以線性轉(zhuǎn)發(fā))。
帶寬跟物理網(wǎng)卡配置是直接關(guān)聯(lián)的幌甘。網(wǎng)卡確定后潮售,帶寬也就確定了,(實際帶寬受限于整個網(wǎng)絡(luò)鏈路中最小的那個模塊)
網(wǎng)絡(luò)基準測試
測試之前含潘,要搞清楚你需要評估的網(wǎng)絡(luò)性能饲做,數(shù)據(jù)協(xié)議棧的那一層线婚,就是你的應(yīng)用程序基于協(xié)議棧的那一層遏弱?
- 基于HTTP或者HTTPS的Web應(yīng)用暢敘,數(shù)據(jù)應(yīng)用層塞弊。需要我們測試HTTP漱逸,HTTPS的性能
- 游戲服務(wù)器來說泪姨,為了支持更大的同時在線人數(shù),通常會基于TCP或者UDP饰抒,與客戶端進行交互肮砾,這時就需要我們測試TCP/UDP的性能。
- 還有一些場景袋坑,是把Linux作為一個軟交換機或者路由器來用的仗处,這種情況下,更關(guān)注網(wǎng)絡(luò)包處理能力(即PPS)枣宫,重點關(guān)注網(wǎng)絡(luò)層的轉(zhuǎn)發(fā)性能
各協(xié)議層的性能測試
轉(zhuǎn)發(fā)性能
測試工具:pktgen婆誓,Linux內(nèi)核自帶的高性能網(wǎng)絡(luò)測試工具
- 加載pktgen模塊
$ modprobe pktgen
$ ls /proc/net/pktgen/
ens33 kpktgend_0 pgctrl
$ ls /proc/net/pktgen/
ens33 kpktgend_0 pgctrl
pkten 在每個CPU上啟動一個內(nèi)核線程,并可以通過/proc/net/pktgen 下面的同名文件跟這些線程交互也颤;pgctrl則主要控制測試開啟和停止
如果 modprobe 命令執(zhí)行失敗洋幻,說明你的內(nèi)核沒有配置 CONFIG_NET_PKTGEN 選項。這就需要你配置 pktgen 內(nèi)核模塊(即 CONFIG_NET_PKTGEN=m)后翅娶,重新編譯內(nèi)核文留,才可以使用。
- 創(chuàng)建測試腳本
目標主機(ip:192.168.0.30 mac:11:11:11:11:11:11) < 發(fā)包主機(ens33)
# 定義一個工具函數(shù)竭沫,方便后面配置各種測試選項
function pgset() {
local result
echo $1 > $PGDEV
result=`cat $PGDEV | fgrep "Result: OK:"`
if [ "$result" = "" ]; then
cat $PGDEV | fgrep Result:
fi
}
# 為0號線程綁定ens33網(wǎng)卡
PGDEV=/proc/net/pktgen/kpktgend_0
pgset "rem_device_all" # 清空網(wǎng)卡綁定
pgset "add_device ens33" # 添加ens33網(wǎng)卡
# 配置ens33網(wǎng)卡的測試選項
PGDEV=/proc/net/pktgen/ens33
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
# 啟動測試
PGDEV=/proc/net/pktgen/pgctrl
pgset "start"
- 啟動測試腳本查看結(jié)果
sh psget.sh
[root@localhost ~]# cat /proc/net/pktgen/ens33
Params: count 1000000 min_pkt_size: 64 max_pkt_size: 64
frags: 0 delay: 5000 clone_skb: 0 ifname: ens33
flows: 0 flowlen: 0
queue_map_min: 0 queue_map_max: 0
...
Current:
pkts-sofar: 1000000 errors: 0
started: 55473279860us stopped: 55485749747us idle: 13143us
seq_num: 1000001 cur_dst_mac_offset: 0 cur_src_mac_offset: 0
...
Result: OK: 12469886(c12456743+d13143) usec, 1000000 (64byte,0frags)
80193pps 41Mb/sec (41058816bps) errors: 0
報告分為三個部分
- 第一部分:params 是測試選項燥翅,發(fā)送100萬個包,每個包64B大小输吏,最大包64B大小
- 第二部分:current是測試進度权旷,其中packts so far 表示已經(jīng)發(fā)送了100萬個包,表示測試完成
- 第三部分:result是測試結(jié)果贯溅,包含測試所用時間拄氯,網(wǎng)絡(luò)包數(shù)量和分片,PPS它浅,吞吐量译柏,錯誤數(shù)信息
上面結(jié)果可以看出 PPS為8萬,吞吐量為41Mb/s姐霍,沒法發(fā)生錯誤鄙麦,為了判斷8萬PPS好不好?
可以用千兆交換機PPS做對比镊折,交換機可以達到線速度(滿負責(zé)胯府,無差錯轉(zhuǎn)發(fā))它的PPS就是1000Mbit / 以太網(wǎng)幀大小,即 1000Mbps/ ((64+20)*8bit)=1.5mpps (其中20B為以太網(wǎng)幀前導(dǎo)和幀間距離大小)
1.5mpps * 1024 * 1025 = 1572864pps 恨胚,顯然是比8萬pps大多了骂因,
TCP/UDP性能
測試工具:iperf,netperf
測試TCP和UDP的吞吐量赃泡,他們以客戶端和服務(wù)器通信往事寒波,測試一段時間內(nèi)的平均吞吐量
服務(wù)器主機:192.168.65.2
客戶端主機:192.168.65.3
- 安裝
yum -y install iperf3
- 服務(wù)端開啟iperf
# -s表示啟動服務(wù)端乘盼,-i表示匯報間隔,-p表示監(jiān)聽端口
iperf3 -s -i 1 -p 10000
- 客戶端開啟測試
# -c表示啟動客戶端俄烁,192.168.0.30為目標服務(wù)器的IP
# -b表示目標帶寬(單位是bits/s)# -t表示測試時間
# -P表示并發(fā)數(shù)绸栅,-p表示目標服務(wù)器監(jiān)聽端口
iperf3 -c 192.168.65.2 -b 2M -t 15 -P 2 -p 10000
- 測試結(jié)果
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-15.00 sec 1.23 MBytes 688 Kbits/sec 231 sender
[ 4] 0.00-15.00 sec 994 KBytes 543 Kbits/sec receiver
[ 6] 0.00-15.00 sec 1.35 MBytes 754 Kbits/sec 208 sender
[ 6] 0.00-15.00 sec 1.08 MBytes 602 Kbits/sec receiver
[SUM] 0.00-15.00 sec 2.58 MBytes 1.44 Mbits/sec 439 sender
[SUM] 0.00-15.00 sec 2.05 MBytes 1.14 Mbits/sec receiver
iperf Done.
# 從測試中可以看到,客戶端帶寬大概1M左右
HTTP性能
測試工具有:ab页屠,wrk粹胯,TCPCopy,Jmeter 辰企,LoadRunner
ab 是 Apache 自帶的 HTTP 壓測工具矛双,主要測試 HTTP 服務(wù)的每秒請求數(shù)、請求延遲蟆豫、吞吐量以及請求延遲的分布情況等
wrk议忽、TCPCopy、Jmeter 十减、LoadRunner:可以模擬用戶請求負責(zé)栈幸,測試應(yīng)用程序的實際性能