Linux 网卡带宽

在讲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。

 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。

 

这是因为创建虚拟机选择的虚拟网络适配器为VMXNET3,模拟的是万兆网卡,这种虚拟网络适配器可以没有物理网卡对应(普通裸金属一般为千兆网卡),也就是不需要借助底层的硬件网卡,并且通过对虚拟机中的性能进行优化,使得同一裸金属上的虚拟机之间的网络交换不受底层网卡的限制。

详细内容参考:VMWare ESXi中,不同的虚拟网卡性能竟然能相差三倍!

原理:同一台裸金属上创建的虚拟机的通讯走的是虚拟交换机,不经过NIC(物理网卡),其带宽是虚拟网卡进行管理的,而虚拟机访问外网,走NIC,其带宽受到NIC的限制。

详细内容参考:网络虚拟化和虚拟网络

总结:

  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 示例

注意:以下测试结果只针对于当前测试机房,不同环境下测试结果不一样。

示例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、判断网络性能瓶颈

确定数据流向,即确定网络请求从客户端发出后,经过了哪些环节,最终到达服务端。响应数据经过哪些环节,又返回到客户端。并且每个环节中的网络上限是多少,最终我们整个网络环路的流量上限,就取决于环路中最低的那个上限值(木桶原理)。

举例说明,如下图所示:

网络请求数据首先是从客户端的网卡发出(千兆网卡),然后网络带宽也会有限制(100Mb/s),可能还会经过一些网络设备,如路由器、交换机、防火墙、代理等,这些设备也都有网络上限,假如都是10000Mb/s,最后到达服务端的网卡(千兆网卡)。所以从上面的网络架构来看,整体链路最高支持100Mb/s的数据流量,网速是100/8=12.5MB/s。

如果在局域网内,几乎就不用考虑网络带宽和路由器的问题了,一般局域网内防火墙都是万兆网卡,所以局域网内服务器网卡的上限就是整个链路的网络上限。

相关博文:《实时监控Linux下网络流量信息

参考博文:如何在 Linux 中检查我的网卡速度?

参考博文:两招轻松判断网络性能瓶颈,一般人我不告诉他!——Testfan打卡学测开1114

posted @ 2022-12-20 14:21  人艰不拆_zmc  阅读(2546)  评论(0编辑  收藏  举报