天天看點

Linux 網卡帶寬

作者:昆侖山IT研究僧

在講Linux網卡帶寬前,先說一下網絡帶寬的概念。

1、網絡帶寬

1.1 概念

網絡帶寬是指在機關時間(一般指的是1秒鐘)内能傳輸的資料量。網絡和高速公路類似,帶寬越大,就類似高速公路的車道越多,其通行能力越強。網絡帶寬作為衡量網絡特征的一個重要名額,日益受到人們的普遍關注。它不僅是政府或機關制訂網絡通信發展政策的重要依據,也是網際網路使用者和機關選擇網際網路接入服務商的主要因素之一。

帶寬是一個非常有用的概念,在網絡通信中的地位十分重要。帶寬的實際含義是在給定時間等條件下流過特定區域的最大資料位數。雖然它的概念有點抽象,但是可以用比喻來幫助了解帶寬的含義。我們用城市的供水網來比喻,供水管道的直徑可以衡量運水的能力,主水管直徑可能有2m,而到家庭的可能隻有2cm。在這個比喻中,水管的直徑好比是帶寬,水就好比是資訊量。使用粗管子就意味着擁有更寬的帶寬,也就是有更大的資訊運送能力。

1.2 計算方法

帶寬基本機關“比特”,簡寫為小寫字母“b”,更大的機關是:Kb、Mb、Gb等;網速基本機關“位元組”,簡寫為大寫字母“B”,更大的機關有:KB、MB、GB等。

1位元組=8比特

帶寬和網速的進率都是1024:

1Kb=1024b

1Mb=1024Kb

1Gb=1024Mb

1KB=1024B

1MB=1024KB

1GB=1024MB

帶寬換算成網速除以8便可;網速換算成帶寬乘以8便可。

在計算機網絡、IDC機房中,其網絡傳輸速率的機關用b/s(比特每秒)(或bit/s,有時也寫作bps,即bit per second)表示。

在實際上網應用中,下載下傳軟體時常常看到諸如下載下傳速度顯示為176KB/s,103KB/s等寬帶速率大小字樣,因為ISP提供的線路帶寬使用的機關是比特(bit),而一般下載下傳軟體顯示的是位元組(Byte),是以要通過換算,才能得實際值。

我們以1M寬帶為例,按照換算公式換算一下:

1Mb/s=1024Kb/s=1024/8KB/s=128KB/s

理論上:2M(即2Mb/s)寬帶理論速率是:256KB/s,實際速率大約為150~240KB/s;(其原因是受使用者計算機性能、網絡裝置品質、資源使用情況、網絡高峰期、網站服務能力、線路衰耗,信号衰減等多因素的影響而造成的)。4M(即4Mb/s)的寬帶理論速率是:512KB/s,實際速率大約為200~440KB/s 。上行速率是指使用者電腦向網絡發送資訊時的資料傳輸速率,下行速率是指網絡向使用者電腦發送資訊時的傳輸速率。比如用FTP上傳檔案到網上去,影響上傳速度的就是“上行速率”;而從網上下載下傳檔案,影響下載下傳速度的就是“下行速率”。當然,在實際上傳下載下傳過程中,線路、裝置(含計算機及其他裝置)等的品質也會對速度造成或多或少的影響。

2、網卡帶寬

網絡帶寬是網卡每秒接收或發送資料的能力,機關為 Mbps。

Linux 網卡帶寬

2.1 檢視伺服器指定網卡帶寬大小

方式一:使用 ethtool指令檢視伺服器指定網卡帶寬大小

ethtool指令用于查詢和控制網絡裝置驅動程式和硬體設定,尤其是有線以太網裝置,devname網卡的名稱。

在第一種方法中,我們将使用ethtool實用程式來檢查網絡接口卡(NIC)速度。但是,如果您的Linux系統上尚未安裝此實用程式,則必須首先使用以下指令安裝它:

sudo apt install ethtool

在系統上安裝此實用程式後,您需要檢查要找出其速度的網絡接口的接口名稱。為此,您将必須運作下面給出的指令:

ip a

此指令将顯示有關系統的所有網絡接口的資訊, 如下所示,我們選擇了名為enp129s0f0的網絡接口。

ubuntu@ubun:~$ ip a


1: 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 1000


link/ether ac:1f:6b:24:43:ba brd ff:ff:ff:ff:ff:ff


inet 10.20.30.173/24 brd 10.20.30.255 scope global enp129s0f0


valid_lft forever preferred_lft forever


inet6 fe80::ae1f:6bff:fe24:43ba/64 scope link


valid_lft forever preferred_lft forever


3: enp129s0f1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000


.......           

現在,要檢查指定NIC的速度,我們将執行如下所示的指令:

ubuntu@ubun:~$ ethtool enp129s0f0


Settings for enp129s0f0:


    Supported ports: [ TP ]


    Supported link modes:   10baseT/Half 10baseT/Full


                            100baseT/Half 100baseT/Full


                            1000baseT/Full


    Supported pause frame use: Symmetric


    Supports auto-negotiation: Yes


    Advertised link modes:  10baseT/Half 10baseT/Full


100baseT/Half 100baseT/Full


1000baseT/Full


    Advertised pause frame use: Symmetric


    Advertised auto-negotiation: Yes


    Speed: 1000Mb/s


    Duplex: Full


    Port: Twisted Pair


    PHYAD: 1


    Transceiver: internal


Auto-negotiation: on


    MDI-X: on (auto)


Cannot get wake-on-lan settings: Operation not permitted


Current message level: 0x00000007 (7)


                   drv probe link


Link detected: yes


ubuntu@ubun:~$           

其中 Speed: 1000Mb/s 就是這個網卡的帶寬。但是,您可以看到上述指令的輸出有點太長了。是以,如果您希望将此輸出限制為僅 NIC 速度,則必須按如下所示的方式對其進行修改:

ubuntu@ubun:~$ ethtool enp129s0f0 | grep -i speed


Cannot get wake-on-lan settings: Operation not permitted


    Speed: 1000Mb/s           

注意:換算成網速為1000Mb/s = 1000/8 MB/s = 125 MB/s。

方式二:使用dmesg指令檢視伺服器指定網卡帶寬大小

Dmesg用于顯示核心環形緩沖區的内容,核心在其中存儲各種消息。

在此方法中,我們将使用Linux中内置的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/TX


ubuntu@ubun:~$           

方式三:使用mii-tool指令檢視伺服器指定網卡帶寬大小

mii-tool指令用于檢視、管理媒體的網絡接口的狀态,首先需要在系統上安裝此軟體包:

sudo apt install net-tools

運作以下指令來檢查 NIC 速度(1000baseT-FD):

ubuntu@ubun:~$ sudo mii-tool -v enp129s0f0


enp129s0f0: negotiated 1000baseT-FD flow-control, link ok


product info: vendor 00:55:00, model 59 rev 1


basic mode:   autonegotiation enabled


basic status: autonegotiation complete, link ok


capabilities: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD


advertising:  1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control


link partner: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control


ubuntu@ubun:~$           

3、虛拟機的網卡帶寬  

第2章節說的都是裸金屬的網卡帶寬,但實際情況下,為了資源的最大化利用,我們都會用虛拟化軟體建立虛拟機來當做伺服器使用,是以我們一般使用指令檢視的都是虛拟機的網卡帶寬,虛拟機網卡帶寬是受其所屬裸金屬的網卡帶寬限制,下面以VMware ESXi虛拟化軟體為例,來講解下虛拟機的網卡帶寬。

通過VMware ESXi等虛拟化軟體建立的虛拟機,檢視虛拟機網卡帶寬為10000Mbps。

[root@106 ~]# ethtool ens192 |grep Speed


    Speed: 10000Mb/s           

在ESXi管理界面上可以看到其所屬裸金屬的實體網卡帶寬為1000Mbps。

Linux 網卡帶寬

這是因為建立虛拟機選擇的虛拟網絡擴充卡為VMXNET3,模拟的是萬兆網卡,這種虛拟網絡擴充卡可以沒有實體網卡對應(普通裸金屬一般為千兆網卡),也就是不需要借助底層的硬體網卡,并且通過對虛拟機中的性能進行優化,使得同一裸金屬上的虛拟機之間的網絡交換不受底層網卡的限制。

詳細内容參考:VMWare ESXi中,不同的虛拟網卡性能竟然能相差三倍!

原理:同一台裸金屬上建立的虛拟機的通訊走的是虛拟交換機,不經過NIC(實體網卡),其帶寬是虛拟網卡進行管理的,而虛拟機通路外網,走NIC,其帶寬受到NIC的限制。

Linux 網卡帶寬

詳細内容參考:網絡虛拟化和虛拟網絡

總結:

  1. 同一台裸金屬上建立的虛拟機的通訊走的是虛拟交換機,不經過NIC,是以我們可以把關聯性比較大的元件部署在同一台裸金屬上建立的不同的虛拟機上,比如redis叢集;虛拟機通路外部網絡(通路非目前虛拟機所在裸金屬上的其他虛拟機的網絡)時, 走NIC,其帶寬受到NIC的限制。
  2. 檢視伺服器網卡帶寬前,一定要知曉所查伺服器是裸金屬還是虛拟機,如果是虛拟機還需要知道其所屬裸金屬的網卡帶寬。

4、使用iperf3指令測試伺服器之間的真實網絡帶寬

本文以上章節說的網絡帶寬都是理論值,其真實帶寬會小于網卡帶寬,其原因是受使用者計算機性能、網絡裝置品質、資源使用情況、網絡高峰期、網站服務能力、線路衰耗,信号衰減等多因素的影響而造成的,下面我們通過iperf3指令判斷伺服器之間(用戶端、服務端)真實的網絡帶寬。

注意:一般我們都會通過代理的方式代理服務端程式,用戶端通路服務端一般鍊路為:用戶端->代理->服務端,而iperf3隻能測試其中一段的真實網絡帶寬,要想測試用戶端到服務端的真實網絡帶寬,需要先測試用戶端到代理的真實網絡帶寬,再測試代理到服務端的真實網絡帶寬,2者取最小值,就是用戶端到服務端的真實網絡帶寬。

4.1 iperf3概述

iperf3是一個網絡性能測試工具。iperf可以測試TCP和UDP帶寬品質。iperf可以測量最大TCP帶寬,具有多種參數和UDP特性。iperf可以報告帶寬,延遲抖動和資料包丢失。

iperf3是一種用于主動測量IP網絡上可實作的最大帶寬的工具,要執行iperf3測試,使用者必須同時建立伺服器和用戶端。

4.2 伺服器安裝iperf3

yum install -y iperf3

4.3 iperf3指令簡單介紹

Iperf3分為服務端和用戶端,比如想測A伺服器請求B伺服器的帶寬,則B伺服器為服務端,A為用戶端。

服務端:

iperf3 -s

用戶端:

iperf3 -c 伺服器IP位址

iperf3有很多參數,常用的有:

-c 後伺服器位址

-i 表示多久列印一次資料

-t 測試時間

-n 發送的資料包大小

-p 發送的線程數

4.4 示例

Linux 網卡帶寬

注意:以下測試結果隻針對于目前測試機房,不同環境下測試結果不一樣。

示例1:同一區域網路内,測試同一機櫃下10.20.30.28(用戶端)到10.20.30.30(服務端)的真實網卡帶寬

在10.20.30.30執行iperf3 -s指令,在10.20.30.28機器執行以下指令:

[root@ob1 ~]# iperf3 -c 10.20.30.31 -t 60


Connecting 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                  receiver           

根據結果可知,同一機櫃下,兩個千兆網卡的裸金屬間真實網卡帶寬為935。

示例2:同一區域網路内,測試不同機櫃下10.20.30.173(用戶端)到10.20.30.30(服務端)的真實網卡帶寬  

在10.20.30.30執行iperf3 -s指令,在10.20.30.173機器執行以下指令:

ubuntu@ubun:~$ iperf3 -c 10.20.30.31 -t 60


Connecting 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                  receiver           

根據結果可知,不同機櫃下,兩個千兆網卡的裸金屬間真實網卡帶寬為913。

示例3:同一區域網路内,測試不同機櫃下10.20.31.118(用戶端)到10.20.30.30(服務端)的真實網卡帶寬

在10.20.30.30執行iperf3 -s指令,在10.20.31.118機器執行以下指令:

[root@sikugov ~]# iperf3 -c 10.20.30.31 -t 60


Connecting 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                  receiver           

根據結果可知,不同機櫃下,虛拟機(其所在裸金屬是千兆網卡)和裸金屬之間真實網卡帶寬為867。

總結:

  1. 伺服器真實帶寬會小于網卡帶寬。
  2. 同一環境下同為裸金屬之間的真實網絡帶寬高于虛拟機與裸金屬之間的網絡帶寬(影響因素有很多,最主要是同一裸金屬上的所有虛拟機共享裸金屬的實體網卡)。

5、判斷網絡性能瓶頸

确定資料流向,即确定網絡請求從用戶端發出後,經過了哪些環節,最終到達服務端。響應資料經過哪些環節,又傳回到用戶端。并且每個環節中的網絡上限是多少,最終我們整個網絡環路的流量上限,就取決于環路中最低的那個上限值(木桶原理)。

舉例說明,如下圖所示:

Linux 網卡帶寬

網絡請求資料首先是從用戶端的網卡發出(千兆網卡),然後網絡帶寬也會有限制(100Mb/s),可能還會經過一些網絡裝置,如路由器、交換機、防火牆、代理等,這些裝置也都有網絡上限,假如都是10000Mb/s,最後到達服務端的網卡(千兆網卡)。是以從上面的網絡架構來看,整體鍊路最高支援100Mb/s的資料流量,網速是100/8=12.5MB/s。

如果在區域網路内,幾乎就不用考慮網絡帶寬和路由器的問題了,一般區域網路内防火牆都是萬兆網卡,是以區域網路内伺服器網卡的上限就是整個鍊路的網絡上限。

繼續閱讀