揭秘Linux網(wǎng)卡帶寬:優(yōu)化網(wǎng)絡(luò)性能的終極指南
共 9979字,需瀏覽 20分鐘
·
2024-07-26 07:33
鏈接:https://www.cnblogs.com/zhangmingcheng/p/16987264.html
在講Linux網(wǎng)卡帶寬前,先說一下網(wǎng)絡(luò)帶寬的概念。
1、網(wǎng)絡(luò)帶寬
1.1 概念
網(wǎng)絡(luò)帶寬是指在單位時(shí)間(一般指的是1秒鐘)內(nèi)能傳輸?shù)臄?shù)據(jù)量。網(wǎng)絡(luò)和高速公路類似,帶寬越大,就類似高速公路的車道越多,其通行能力越強(qiáng)。網(wǎng)絡(luò)帶寬作為衡量網(wǎng)絡(luò)特征的一個(gè)重要指標(biāo),日益受到人們的普遍關(guān)注。它不僅是政府或單位制訂網(wǎng)絡(luò)通信發(fā)展策略的重要依據(jù),也是互聯(lián)網(wǎng)用戶和單位選擇互聯(lián)網(wǎng)接入服務(wù)商的主要因素之一。
帶寬是一個(gè)非常有用的概念,在網(wǎng)絡(luò)通信中的地位十分重要。帶寬的實(shí)際含義是在給定時(shí)間等條件下流過特定區(qū)域的最大數(shù)據(jù)位數(shù)。雖然它的概念有點(diǎn)抽象,但是可以用比喻來幫助理解帶寬的含義。我們用城市的供水網(wǎng)來比喻,供水管道的直徑可以衡量運(yùn)水的能力,主水管直徑可能有2m,而到家庭的可能只有2cm。在這個(gè)比喻中,水管的直徑好比是帶寬,水就好比是信息量。使用粗管子就意味著擁有更寬的帶寬,也就是有更大的信息運(yùn)送能力。
1.2 計(jì)算方法
帶寬基本單位“比特”,簡寫為小寫字母“b”,更大的單位是:Kb、Mb、Gb等;網(wǎng)速基本單位“字節(jié)”,簡寫為大寫字母“B”,更大的單位有:KB、MB、GB等。
|
帶寬和網(wǎng)速的進(jìn)率都是1024:
1Kb=1024b1Mb=1024Kb1Gb=1024Mb1KB=1024B1MB=1024KB1GB=1024MB
帶寬換算成網(wǎng)速除以8便可;網(wǎng)速換算成帶寬乘以8便可。
在計(jì)算機(jī)網(wǎng)絡(luò)、IDC機(jī)房中,其網(wǎng)絡(luò)傳輸速率的單位用b/s(比特每秒)(或bit/s,有時(shí)也寫作bps,即bit per second)表示。
在實(shí)際上網(wǎng)應(yīng)用中,下載軟件時(shí)常常看到諸如下載速度顯示為176KB/s,103KB/s等寬帶速率大小字樣,因?yàn)镮SP提供的線路帶寬使用的單位是比特(bit),而一般下載軟件顯示的是字節(jié)(Byte),所以要通過換算,才能得實(shí)際值。
我們以1M寬帶為例,按照換算公式換算一下:
1 |
|
理論上:2M(即2Mb/s)寬帶理論速率是:256KB/s,實(shí)際速率大約為150~240KB/s;(其原因是受用戶計(jì)算機(jī)性能、網(wǎng)絡(luò)設(shè)備質(zhì)量、資源使用情況、網(wǎng)絡(luò)高峰期、網(wǎng)站服務(wù)能力、線路衰耗,信號衰減等多因素的影響而造成的)。4M(即4Mb/s)的寬帶理論速率是:512KB/s,實(shí)際速率大約為200~440KB/s 。上行速率是指用戶電腦向網(wǎng)絡(luò)發(fā)送信息時(shí)的數(shù)據(jù)傳輸速率,下行速率是指網(wǎng)絡(luò)向用戶電腦發(fā)送信息時(shí)的傳輸速率。比如用FTP上傳文件到網(wǎng)上去,影響上傳速度的就是“上行速率”;而從網(wǎng)上下載文件,影響下載速度的就是“下行速率”。當(dāng)然,在實(shí)際上傳下載過程中,線路、設(shè)備(含計(jì)算機(jī)及其他設(shè)備)等的質(zhì)量也會對速度造成或多或少的影響。
2、網(wǎng)卡帶寬
網(wǎng)絡(luò)帶寬是網(wǎng)卡每秒接收或發(fā)送數(shù)據(jù)的能力,單位為 Mbps。
2.1 查看服務(wù)器指定網(wǎng)卡帶寬大小
方式一:使用 ethtool命令查看服務(wù)器指定網(wǎng)卡帶寬大小
ethtool命令用于查詢和控制網(wǎng)絡(luò)設(shè)備驅(qū)動程序和硬件設(shè)置,尤其是有線以太網(wǎng)設(shè)備,devname網(wǎng)卡的名稱。
在第一種方法中,我們將使用ethtool實(shí)用程序來檢查網(wǎng)絡(luò)接口卡(NIC)速度。但是,如果您的Linux系統(tǒng)上尚未安裝此實(shí)用程序,則必須首先使用以下命令安裝它:
1 |
|
在系統(tǒng)上安裝此實(shí)用程序后,您需要檢查要找出其速度的網(wǎng)絡(luò)接口的接口名稱。為此,您將必須運(yùn)行下面給出的命令:
1 |
|
此命令將顯示有關(guān)系統(tǒng)的所有網(wǎng)絡(luò)接口的信息, 如下所示,我們選擇了名為enp129s0f0的網(wǎng)絡(luò)接口。
ubuntu@ubun:~$ ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000.......2: enp129s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether ac:1f:6b:24:43:ba brd ff:ff:ff:ff:ff:ffinet 10.20.30.173/24 brd 10.20.30.255 scope global enp129s0f0valid_lft forever preferred_lft foreverinet6 fe80::ae1f:6bff:fe24:43ba/64 scope linkvalid_lft forever preferred_lft forever3: enp129s0f1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000.......
現(xiàn)在,要檢查指定NIC的速度,我們將執(zhí)行如下所示的命令:
ubuntu@ubun:~$ ethtool enp129s0f0Settings for enp129s0f0:Supported ports: [ TP ]Supported link modes: 10baseT/Half 10baseT/Full100baseT/Half 100baseT/Full1000baseT/FullSupported pause frame use: SymmetricSupports auto-negotiation: YesAdvertised link modes: 10baseT/Half 10baseT/Full100baseT/Half 100baseT/Full1000baseT/FullAdvertised pause frame use: SymmetricAdvertised auto-negotiation: YesSpeed: 1000Mb/sDuplex: FullPort: Twisted PairPHYAD: 1Transceiver: internalAuto-negotiation: onMDI-X: on (auto)Cannot get wake-on-lan settings: Operation not permittedCurrent message level: 0x00000007 (7)drv probe linkLink detected: yesubuntu@ubun:~$
其中 Speed: 1000Mb/s 就是這個(gè)網(wǎng)卡的帶寬。但是,您可以看到上述命令的輸出有點(diǎn)太長了。因此,如果您希望將此輸出限制為僅 NIC 速度,則必須按如下所示的方式對其進(jìn)行修改:
ubuntu@ubun:~$ ethtool enp129s0f0 | grep -i speedCannot get wake-on-lan settings: Operation not permittedSpeed: 1000Mb/s
注意:換算成網(wǎng)速為1000Mb/s = 1000/8 MB/s = 125 MB/s。
方式二:使用dmesg命令查看服務(wù)器指定網(wǎng)卡帶寬大小
Dmesg用于顯示內(nèi)核環(huán)形緩沖區(qū)的內(nèi)容,內(nèi)核在其中存儲各種消息。
在此方法中,我們將使用Linux中內(nèi)置的dmesg命令來檢查NIC速度,如下所示:
ubuntu@ubun:~$ dmesg | grep enp129s0f0 | grep up[ 7.277894] igb 0000:81:00.0 enp129s0f0: igb: enp129s0f0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TXubuntu@ubun:~$
方式三:使用mii-tool命令查看服務(wù)器指定網(wǎng)卡帶寬大小
mii-tool命令用于查看、管理介質(zhì)的網(wǎng)絡(luò)接口的狀態(tài),首先需要在系統(tǒng)上安裝此軟件包:
1 |
|
運(yùn)行以下命令來檢查 NIC 速度(1000baseT-FD):
ubuntu@ubun:~$ sudo mii-tool -v enp129s0f0enp129s0f0: negotiated 1000baseT-FD flow-control, link okproduct info: vendor 00:55:00, model 59 rev 1basic mode: autonegotiation enabledbasic status: autonegotiation complete, link okcapabilities: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HDadvertising: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-controllink partner: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-controlubuntu@ubun:~$
3、虛擬機(jī)的網(wǎng)卡帶寬
第2章節(jié)說的都是裸金屬的網(wǎng)卡帶寬,但實(shí)際情況下,為了資源的最大化利用,我們都會用虛擬化軟件創(chuàng)建虛擬機(jī)來當(dāng)做服務(wù)器使用,所以我們一般使用命令查看的都是虛擬機(jī)的網(wǎng)卡帶寬,虛擬機(jī)網(wǎng)卡帶寬是受其所屬裸金屬的網(wǎng)卡帶寬限制,下面以VMware ESXi虛擬化軟件為例,來講解下虛擬機(jī)的網(wǎng)卡帶寬。
通過VMware ESXi等虛擬化軟件創(chuàng)建的虛擬機(jī),查看虛擬機(jī)網(wǎng)卡帶寬為10000Mbps。
1 2 |
|
在ESXi管理界面上可以看到其所屬裸金屬的物理網(wǎng)卡帶寬為1000Mbps。
這是因?yàn)閯?chuàng)建虛擬機(jī)選擇的虛擬網(wǎng)絡(luò)適配器為VMXNET3,模擬的是萬兆網(wǎng)卡,這種虛擬網(wǎng)絡(luò)適配器可以沒有物理網(wǎng)卡對應(yīng)(普通裸金屬一般為千兆網(wǎng)卡),也就是不需要借助底層的硬件網(wǎng)卡,并且通過對虛擬機(jī)中的性能進(jìn)行優(yōu)化,使得同一裸金屬上的虛擬機(jī)之間的網(wǎng)絡(luò)交換不受底層網(wǎng)卡的限制。
詳細(xì)內(nèi)容參考:VMWare ESXi中,不同的虛擬網(wǎng)卡性能竟然能相差三倍!
原理:同一臺裸金屬上創(chuàng)建的虛擬機(jī)的通訊走的是虛擬交換機(jī),不經(jīng)過NIC(物理網(wǎng)卡),其帶寬是虛擬網(wǎng)卡進(jìn)行管理的,而虛擬機(jī)訪問外網(wǎng),走NIC,其帶寬受到NIC的限制。
詳細(xì)內(nèi)容參考:網(wǎng)絡(luò)虛擬化和虛擬網(wǎng)絡(luò)
總結(jié):
同一臺裸金屬上創(chuàng)建的虛擬機(jī)的通訊走的是虛擬交換機(jī),不經(jīng)過NIC,因此我們可以把關(guān)聯(lián)性比較大的組件部署在同一臺裸金屬上創(chuàng)建的不同的虛擬機(jī)上,比如redis集群;虛擬機(jī)訪問外部網(wǎng)絡(luò)(訪問非當(dāng)前虛擬機(jī)所在裸金屬上的其他虛擬機(jī)的網(wǎng)絡(luò))時(shí), 走NIC,其帶寬受到NIC的限制。
查看服務(wù)器網(wǎng)卡帶寬前,一定要知曉所查服務(wù)器是裸金屬還是虛擬機(jī),如果是虛擬機(jī)還需要知道其所屬裸金屬的網(wǎng)卡帶寬。
4、使用iperf3命令測試服務(wù)器之間的真實(shí)網(wǎng)絡(luò)帶寬
本文以上章節(jié)說的網(wǎng)絡(luò)帶寬都是理論值,其真實(shí)帶寬會小于網(wǎng)卡帶寬,其原因是受用戶計(jì)算機(jī)性能、網(wǎng)絡(luò)設(shè)備質(zhì)量、資源使用情況、網(wǎng)絡(luò)高峰期、網(wǎng)站服務(wù)能力、線路衰耗,信號衰減等多因素的影響而造成的,下面我們通過iperf3命令判斷服務(wù)器之間(客戶端、服務(wù)端)真實(shí)的網(wǎng)絡(luò)帶寬。
注意:一般我們都會通過代理的方式代理服務(wù)端程序,客戶端訪問服務(wù)端一般鏈路為:客戶端->代理->服務(wù)端,而iperf3只能測試其中一段的真實(shí)網(wǎng)絡(luò)帶寬,要想測試客戶端到服務(wù)端的真實(shí)網(wǎng)絡(luò)帶寬,需要先測試客戶端到代理的真實(shí)網(wǎng)絡(luò)帶寬,再測試代理到服務(wù)端的真實(shí)網(wǎng)絡(luò)帶寬,2者取最小值,就是客戶端到服務(wù)端的真實(shí)網(wǎng)絡(luò)帶寬。
4.1 iperf3概述
iperf3是一個(gè)網(wǎng)絡(luò)性能測試工具。iperf可以測試TCP和UDP帶寬質(zhì)量。iperf可以測量最大TCP帶寬,具有多種參數(shù)和UDP特性。iperf可以報(bào)告帶寬,延遲抖動和數(shù)據(jù)包丟失。
iperf3是一種用于主動測量IP網(wǎng)絡(luò)上可實(shí)現(xiàn)的最大帶寬的工具,要執(zhí)行iperf3測試,用戶必須同時(shí)建立服務(wù)器和客戶端。
4.2 服務(wù)器安裝iperf3
1 |
|
4.3 iperf3命令簡單介紹
Iperf3分為服務(wù)端和客戶端,比如想測A服務(wù)器請求B服務(wù)器的帶寬,則B服務(wù)器為服務(wù)端,A為客戶端。
服務(wù)端:
1 |
|
客戶端:
1 |
|
iperf3有很多參數(shù),常用的有:
-c 后服務(wù)器地址
-i 表示多久打印一次數(shù)據(jù)
-t 測試時(shí)間
-n 發(fā)送的數(shù)據(jù)包大小
-p 發(fā)送的線程數(shù)
4.4 示例
注意:以下測試結(jié)果只針對于當(dāng)前測試機(jī)房,不同環(huán)境下測試結(jié)果不一樣。
示例1:同一局域網(wǎng)內(nèi),測試同一機(jī)柜下10.20.30.28(客戶端)到10.20.30.30(服務(wù)端)的真實(shí)網(wǎng)卡帶寬
在10.20.30.30執(zhí)行iperf3 -s命令,在10.20.30.28機(jī)器執(zhí)行以下命令:
[root@ob1 ~]# iperf3 -c 10.20.30.31 -t 60Connecting to host 10.20.30.31, port 5201[ 4] local 10.20.30.28 port 52762 connected to 10.20.30.31 port 5201[ ID] Interval Transfer Bandwidth Retr Cwnd[ 4] 0.00-1.00 sec 114 MBytes 959 Mbits/sec 9 373 KBytes.......[ 4] 59.00-60.00 sec 112 MBytes 938 Mbits/sec 0 495 KBytes- - - - - - - - - - - - - - - - - - - - - - - - -[ ID] Interval Transfer Bandwidth Retr[ 4] 0.00-60.00 sec 6.53 GBytes 935 Mbits/sec 620 sender[ 4] 0.00-60.00 sec 6.53 GBytes 935 Mbits/sec
根據(jù)結(jié)果可知,同一機(jī)柜下,兩個(gè)千兆網(wǎng)卡的裸金屬間真實(shí)網(wǎng)卡帶寬為935。
示例2:同一局域網(wǎng)內(nèi),測試不同機(jī)柜下10.20.30.173(客戶端)到10.20.30.30(服務(wù)端)的真實(shí)網(wǎng)卡帶寬
在10.20.30.30執(zhí)行iperf3 -s命令,在10.20.30.173機(jī)器執(zhí)行以下命令:
ubuntu@ubun:~$ iperf3 -c 10.20.30.31 -t 60Connecting to host 10.20.30.31, port 5201[ 4] local 10.20.30.173 port 43448 connected to 10.20.30.31 port 5201[ ID] Interval Transfer Bandwidth Retr Cwnd[ 4] 0.00-1.00 sec 114 MBytes 955 Mbits/sec 3 404 KBytes......[ 4] 59.00-60.00 sec 111 MBytes 933 Mbits/sec 0 940 KBytes- - - - - - - - - - - - - - - - - - - - - - - - -[ ID] Interval Transfer Bandwidth Retr[ 4] 0.00-60.00 sec 6.38 GBytes 913 Mbits/sec 158 sender[ 4] 0.00-60.00 sec 6.37 GBytes 913 Mbits/sec
根據(jù)結(jié)果可知,不同機(jī)柜下,兩個(gè)千兆網(wǎng)卡的裸金屬間真實(shí)網(wǎng)卡帶寬為913。
示例3:同一局域網(wǎng)內(nèi),測試不同機(jī)柜下10.20.31.118(客戶端)到10.20.30.30(服務(wù)端)的真實(shí)網(wǎng)卡帶寬
在10.20.30.30執(zhí)行iperf3 -s命令,在10.20.31.118機(jī)器執(zhí)行以下命令:
[root@sikugov ~]# iperf3 -c 10.20.30.31 -t 60Connecting to host 10.20.30.31, port 5201[ 4] local 10.20.31.188 port 43196 connected to 10.20.30.31 port 5201[ ID] Interval Transfer Bandwidth Retr Cwnd[ 4] 0.00-1.00 sec 103 MBytes 866 Mbits/sec 28 247 KBytes......[ 4] 59.00-60.00 sec 99.1 MBytes 831 Mbits/sec 32 362 KBytes- - - - - - - - - - - - - - - - - - - - - - - - -[ ID] Interval Transfer Bandwidth Retr[ 4] 0.00-60.00 sec 6.06 GBytes 868 Mbits/sec 2376 sender[ 4] 0.00-60.00 sec 6.06 GBytes 867 Mbits/sec
根據(jù)結(jié)果可知,不同機(jī)柜下,虛擬機(jī)(其所在裸金屬是千兆網(wǎng)卡)和裸金屬之間真實(shí)網(wǎng)卡帶寬為867。
總結(jié):
服務(wù)器真實(shí)帶寬會小于網(wǎng)卡帶寬。
同一環(huán)境下同為裸金屬之間的真實(shí)網(wǎng)絡(luò)帶寬高于虛擬機(jī)與裸金屬之間的網(wǎng)絡(luò)帶寬(影響因素有很多,最主要是同一裸金屬上的所有虛擬機(jī)共享裸金屬的物理網(wǎng)卡)。
5、判斷網(wǎng)絡(luò)性能瓶頸
確定數(shù)據(jù)流向,即確定網(wǎng)絡(luò)請求從客戶端發(fā)出后,經(jīng)過了哪些環(huán)節(jié),最終到達(dá)服務(wù)端。響應(yīng)數(shù)據(jù)經(jīng)過哪些環(huán)節(jié),又返回到客戶端。并且每個(gè)環(huán)節(jié)中的網(wǎng)絡(luò)上限是多少,最終我們整個(gè)網(wǎng)絡(luò)環(huán)路的流量上限,就取決于環(huán)路中最低的那個(gè)上限值(木桶原理)。
舉例說明,如下圖所示:
網(wǎng)絡(luò)請求數(shù)據(jù)首先是從客戶端的網(wǎng)卡發(fā)出(千兆網(wǎng)卡),然后網(wǎng)絡(luò)帶寬也會有限制(100Mb/s),可能還會經(jīng)過一些網(wǎng)絡(luò)設(shè)備,如路由器、交換機(jī)、防火墻、代理等,這些設(shè)備也都有網(wǎng)絡(luò)上限,假如都是10000Mb/s,最后到達(dá)服務(wù)端的網(wǎng)卡(千兆網(wǎng)卡)。所以從上面的網(wǎng)絡(luò)架構(gòu)來看,整體鏈路最高支持100Mb/s的數(shù)據(jù)流量,網(wǎng)速是100/8=12.5MB/s。
如果在局域網(wǎng)內(nèi),幾乎就不用考慮網(wǎng)絡(luò)帶寬和路由器的問題了,一般局域網(wǎng)內(nèi)防火墻都是萬兆網(wǎng)卡,所以局域網(wǎng)內(nèi)服務(wù)器網(wǎng)卡的上限就是整個(gè)鏈路的網(wǎng)絡(luò)上限。
秋招已經(jīng)開始啦,大家如果不做好充足準(zhǔn)備的話,秋招很難找到好工作。
送大家一份就業(yè)大禮包,大家可以突擊一下春招,找個(gè)好工作!
