1. ethtool
ethtool是很强大的查询网卡(嵌入式称为phy芯片)配置的工具,几乎phy芯片芯片手册寄存器能配置的选项,ethtool都能查询到;嵌入式调试phy芯片的时候经常用到该命令;最简单的指令如下
ethtool eth0(要查看速率的网卡)
#打印网卡信息
Settings for eth0:
Supported ports: [ TP AUI BNC MII FIBRE ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: MII
PHYAD: 1
Transceiver: external
Auto-negotiation: on
Current message level: 0x00000007 (7)
Link detected: yes
这段信息已经包含了phy的很多配置信息:
phy芯片支持的端口,支持的链接模式;
网络自适配是否打开,工作模式(全双工,半双工),速率等信息;
这里的Speed: 1000Mb/s只能说明phy芯片最大速率能达到1000Mb/s;实际速率还需要进行测试;
phy芯片一般分为10base,100base,1000base;Speed: 1000Mb/s能说明网卡处于1000base模式,实际速率相差不多;
2. iperf
实测网络速率的工具,分为客户端和服务端,两端进行数据发送实时计算网络速率并打印:
# 服务器端
$ iperf -s
# 客户端
$ iperf -c <server_ip>
打印信息:
/mnt/zhangliming/iperf # ./iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.0.221, port 53640
[ 5] local 192.168.0.221 port 5201 connected to 192.168.0.221 port 53642
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 868 MBytes 7.28 Gbits/sec
[ 5] 1.00-2.00 sec 904 MBytes 7.58 Gbits/sec
[ 5] 2.00-3.00 sec 923 MBytes 7.74 Gbits/sec
[ 5] 3.00-4.00 sec 883 MBytes 7.41 Gbits/sec
[ 5] 4.00-5.00 sec 915 MBytes 7.68 Gbits/sec
[ 5] 5.00-6.00 sec 929 MBytes 7.79 Gbits/sec
[ 5] 6.00-7.00 sec 907 MBytes 7.61 Gbits/sec
[ 5] 7.00-8.00 sec 908 MBytes 7.62 Gbits/sec
[ 5] 8.00-9.00 sec 938 MBytes 7.86 Gbits/sec
[ 5] 9.00-10.00 sec 929 MBytes 7.80 Gbits/sec
[ 5] 10.00-10.00 sec 768 KBytes 6.68 Gbits/sec
Bitrate字段就是现在的实际速率; Transfer:在某时间间隔内的传输的数据量;上面打印可知,时间间隔为1s;所以和Bitrate一样代表传输速率
各字段含义如下:
ID:连接的唯一标识符或ID号。
Interval:报告状态或统计信息的时间间隔。
Transfer:在报告的时间间隔内传输的数据量。
Bitrate:报告的时间间隔内的传输速率(以位/秒为单位)。
Retr:在报告的时间间隔内发生的重新传输次数。
Cwnd:当前拥塞窗口的大小(单位未定义,通常是报告的时间间隔内的平均值)。
注意:iperf在文件系统中可能不存在该命令,需要下载源码进行移植!
3.程序测试
当然也可以自己写一个网络程序来对网络速率进行计算;计算出1s内接收多少Bytes;就是当前网络的速率;和iperf的原理一样;