通过ethtool命令解决网络的卡顿、时延、断断续续、路由带*****识别错误

ethtool命令用于获取以太网卡的配置信息,或者修改这些配置。这个命令比较复杂,功能特别多。

语法
ethtool [ -a | -c | -g | -i | -d | -k | -r | -S |] ethX
ethtool [-A] ethX [autoneg on|off] [rx on|off] [tx on|off]
ethtool [-C] ethX [adaptive-rx on|off] [adaptive-tx on|off] [rx-usecs N] [rx-frames N] [rx-usecs-irq N] [rx-frames-irq N] [tx-usecs N] [tx-frames N] [tx-usecs-irq N] [tx-frames-irq N] [stats-block-usecs N][pkt-rate-low N][rx-usecs-low N] [rx-frames-low N] [tx-usecs-low N] [tx-frames-lowN] [pkt-rate-high N] [rx-usecs-high N] [rx-frames-high N] [tx-usecs-high N] [tx-frames-high N] [sample-interval N]
ethtool [-G] ethX [rx N] [rx-mini N] [rx-jumbo N] [tx N]
ethtool [-e] ethX [raw on|off] [offset N] [length N]
ethtool [-E] ethX [magic N] [offset N] [value N]
ethtool [-K] ethX [rx on|off] [tx on|off] [sg on|off] [tso on|off]
ethtool [-p] ethX [N]
ethtool [-t] ethX [offline|online]
ethtool [-s] ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off] [port tp|aui|bnc|mii] [phyad N] [xcvr internal|external]
[wol p|u|m|b|a|g|s|d…] [sopass xx:yy:zz:aa:bb:cc] [msglvl N]
选项
-a 查看网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
-A 修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
-c display the Coalesce information of the specified ethernet card。
-C Change the Coalesce setting of the specified ethernet card。
-g Display the rx/tx ring parameter information of the specified ethernet card。
-G change the rx/tx ring setting of the specified ethernet card。
-i 显示网卡驱动的信息,如驱动的名称、版本等。
-d 显示register dump信息, 部分网卡驱动不支持该选项。
-e 显示EEPROM dump信息,部分网卡驱动不支持该选项。
-E 修改网卡EEPROM byte。
-k 显示网卡Offload参数的状态:on 或 off,包括rx-checksumming、tx-checksumming等。
-K 修改网卡Offload参数的状态。
-p 用于区别不同ethX对应网卡的物理位置,常用的方法是使网卡port上的led不断的闪;N指示了网卡闪的持续时间,以秒为单位。
-r 如果auto-negotiation模块的状态为on,则restarts auto-negotiation。
-S 显示NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。
-t 让网卡执行自我检测,有两种模式:offline or online。
-s 修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。
数据来源
Ethtool命令显示的信息来源于网卡驱动层,即TCP/ip协议的链路层。该命令在Linux内核中实现的逻辑层次为:

最重要的结构体struct ethtool_ops,该结构体成员为用于显示或修改以太网卡配置的一系列函数指针,见下表中的第二列。

网卡驱动负责实现(部分)这些函数,并将其封装入ethtool_ops结构体,为网络核心层提供统一的调用接口。因此,不同的网卡驱动会给应用层返回不同的信息。Ethtool命令选项、struct ethtool_ops成员函数、Ethtool命令显示参数的来源,三者间的对应关系如下表所示:

命令选项 struct ethtool_ops成员函数 Ethtool命令显示参数的来源(以网卡驱动BNX2为例)
无 -s get_settingsget_wol get_msglevel get_link set_settings set_wol set_msglevel 从网卡寄存器中获得网卡速度等信息,可配置。
-a -A get_pauseparam set_pauseparam 从网卡寄存器中获得Autonegotiate/RX/TX模块的状态:on oroff,可配置。
-c -C get_coalesceset_coalesce 从网卡寄存器中获得coalescing参数:TX/RX一个数据包后,推迟发生TX/RX中断的时间(us)/数据包个数。—减小该值可以提高网卡的响应时间。 当rx-usecs&rx-frames同时被设为0时,RX中断停止。 当tx-usecs&tx-frames同时被设为0时,TX中断停止。
-g -G get_ringparam set_ringparam 除当前TX/RX ring的值(从网卡寄存器中读取得到,可配置)外,其它为网卡bnx2自己固定的信息。
-k -K get_rx_csumget_tx_csum get_sg get_tso set_rx_csum set_tx_csum set_sg set_tso 显示信息从保存该状态的变量中读取得到,没有对应的寄存器。因此,TX/RX校验等模块一直处于on状态,实际上是无法修改的。
-i get_drvinfo[self_test_count, get_stats_coun,t get_regs_len, get_eeprom_len] 网卡bnx2自己固定的信息,如:
——————————————————–
driver: bnx2 version: 1.4.30 firmware-version: 1.8.0.5 bus-info: 0000:09:00.0
——————————————————–
-d get_drvinfoget_regs 不支持,即bnx2中没有实现函数get_regs。
-e -E get_eepromset_eeprom 不支持,即bnx2中没有实现函数get_eeprom。
-r nway_reset 配置网卡MII_BMCR寄存器,重启Auto negotiation模块。
-p phys_id 配置网卡BNX2_EMAC_LED寄存器,实现LED闪功能。
-t self_test 通过配置网卡寄存器,逐一测试网卡的硬件模块:registers,memory,loopback,Link stat,interrupt。
-S get_ethtool_stats 显示信息来源于网卡驱动中的结构体变量stats_blk。(网卡通过DMA方式,将寄存器BNX2_HC_STATISTICS _ADDR_L和BNX2_HC_STATISTICS_ADDR_H中的数据实时地读取到结构体变量struct statistics_block *stats_blk中。) —显示的数据都是从网卡寄存器中统计得到的,各项的含义需查询网卡(芯片)手册。
由上可见,ethtool命令用于显示/配置网卡硬件(寄存器)。

实例
查看机器上网卡的速度:百兆还是千兆,请输入:

ethool eth0
操作完毕后,输出信息中Speed:这一项就指示了网卡的速度。停止网卡的发送模块TX,请输入:

ethtool -A tx off eth0
操作完毕后,可输入ethtool -a eth0,查看tx模块是否已被停止。查看网卡eth0采用了何种驱动,请输入:

ethtool -i eth0
操作完毕后,显示 driver: bnx2;version: 1.4.30 等信息。关闭网卡对收到的数据包的校验功能,请输入:

ethtool -K eth0 rx off
操作完毕后,可输入ethtool –k eth0,查看校验功能是否已被停止。如果机器上安装了两块网卡,那么eth0对应着哪块网卡呢?输入:

ethtool -p eth0 10
操作完毕后,看哪块网卡的led灯在闪,eth0就对应着哪块网卡。查看网卡,在接收/发送数据时,有没有出错?请输入:

ethtool –S eth0
将千兆网卡的速度降为百兆,请输入:

ethtool -s eth0 speed 100

1 概述

ethtool 是用于查询及设置网卡参数的命令。

2 命令详解
2.1 命令格式

(1) 语法

ethtool [ -a | -c | -g | -i | -d | -k | -r | -S |] ethX ethtool [-A] ethX [autoneg on|off] [rx on|off] [tx on|off] ethtool [-C] ethX [adaptive-rx on|off] [adaptive-tx on|off] [rx-usecs N] [rx-frames N] [rx-usecs-irq N] [rx-frames-irq N] [tx-usecs N] [tx-frames N] [tx-usecs-irq N] [tx-frames-irq N] [stats-block-usecs N] [pkt-rate-low N][rx-usecs-low N] [rx-frames-low N] [tx-usecs-low N] [tx-frames-low N] [pkt-rate-high N] [rx-usecs-high N] [rx-frames-high N] [tx-usecs-high N] [tx-frames-high N] [sample-interval N] ethtool [-G] ethX [rx N] [rx-mini N] [rx-jumbo N] [tx N] ethtool [-e] ethX [raw on|off] [offset N] [length N] ethtool [-E] ethX [magic N] [offset N] [value N] ethtool [-K] ethX [rx on|off] [tx on|off] [sg on|off] [tso on|off] ethtool [-p] ethX [N] ethtool [-t] ethX [offline|online] ethtool [-s] ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off] [port tp|aui|bnc|mii] [phyad N] [xcvr internal|external] [wol p|u|m|b|a|g|s|d…] [sopass xx:yy:zz:aa:bb:cc] [msglvl N]

(2) 描述

ethX是以太网卡的名称,Linux系统将检测到的第一块以太网卡命名为eth0, 第二块为eth1,…….。

2.2 命令常见参数说明
参数

说明

-a

查看网卡中接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。

-A

修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。

-c

display the Coalesce(聚合、联合) information of the specified ethernet card.聚合网口信息,使看起来更有规律。

-C

Change the Coalesce setting of the specified ethernet card.修改网卡聚合信息。

-g

Display the rx/tx ring parameter information of the specified ethernet card. 显示网卡的接收/发送环形参数。

-G

Change the rx/tx ring setting of the specified ethernet card. 修改网卡的接收/发送环形参数。

-i

显示网卡驱动的信息,如驱动的名称、版本等。

-d

显示register dump信息, 部分网卡驱动不支持该选项。

-e

显示EEPROM dump信息,部分网卡驱动不支持该选项。

-E

修改网卡EEPROM byte.

-k

显示网卡Offload参数的状态:on 或 off,包括rx-checksumming、tx-checksumming等。

-K

修改网卡Offload参数的状态

-p

用于区别不同ethX对应网卡的物理位置,常用的方法是使网卡port上的led不断的闪;N指示了网卡闪的持续时间,以秒为单位。

-r

如果auto-negotiation模块的状态为on,则restarts auto-negotiation.

-s

修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。加上-s选项修改的内容才会生效

-S

显示NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。

-t

让网卡执行自我检测,有两种模式:offline or online.

2.3 输出详解

[root@localhost ~]# ethtool eth0 Settings for eth0: Supported ports: [ TP ] // 支持模式 Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes // 支持自动协商 Supported FEC modes: Not reported // 通告模式 Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes // 使用自动协商 Advertised FEC modes: Not reported Speed: 1000Mb/s // 当前速率 1000Mb/s Duplex: Full // 工作模式为全双工 Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on // 自动协商打开 MDI-X: off (auto) Supports Wake-on: d Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes
3 简单实例

3.1 查询网口基本设置

(1)命令

ethtool ethx
(2) 功能

查询ethx网口基本设置,其中 x 是对应网卡的编号,如eth0、eth1等等。

(3) 实例

[root@localhost ~]# ethtool eth0 Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Speed: 1000Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on MDI-X: off (auto) Supports Wake-on: d Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes

3.2 查询网口的驱动相关信息

(1) 命令

ethtool -i ethx

(2) 功能

查询网口的驱动相关信息,如驱动名称、版本信息等。

(3) 实例

[root@localhost ~]# ethtool -i eth0 driver: e1000 version: 7.3.21-k8-NAPI firmware-version: expansion-rom-version: bus-info: 0000:02:01.0 supports-statistics: yes supports-test: yes supports-eeprom-access: yes supports-register-dump: yes supports-priv-flags: no

3.3 查询ethx网口注册性信息

(1) 命令

ethtool -d ethx

(2) 功能

查询网口注册性信息。

(3) 实例

[root@localhost ~]# ethtool -d eth0 MAC Registers ------------- 0x00000: CTRL (Device control register) 0x00C00249 Endian mode (buffers): little Link reset: reset Set link up: 1 Invert Loss-Of-Signal: no Receive flow control: disabled Transmit flow control: disabled VLAN mode: disabled Auto speed detect: disabled Speed select: 1000Mb/s Force speed: no Force duplex: no 0x00008: STATUS (Device status register) 0x0000CB83 Duplex: full Link up: link config TBI mode: disabled Link speed: 1000Mb/s Bus type: PCI Bus speed: 66MHz Bus width: 32-bit 0x00100: RCTL (Receive control register) 0x00008002 Receiver: enabled Store bad packets: disabled Unicast promiscuous: disabled Multicast promiscuous: disabled Long packet: disabled Descriptor minimum threshold size: 1/2 Broadcast accept mode: accept VLAN filter: disabled Canonical form indicator: disabled Discard pause frames: filtered Pass MAC control frames: do not pass Receive buffer size: 2048 0x02808: RDLEN (Receive desc length) 0x00001000 0x02810: RDH (Receive desc head) 0x00000035 0x02818: RDT (Receive desc tail) 0x00000033 0x02820: RDTR (Receive delay timer) 0x00000000 0x00400: TCTL (Transmit ctrl register) 0x0103F0FA Transmitter: enabled Pad short packets: enabled Software XOFF Transmission: disabled Re-transmit on late collision: enabled 0x03808: TDLEN (Transmit desc length) 0x00001000 0x03810: TDH (Transmit desc head) 0x00000000 0x03818: TDT (Transmit desc tail) 0x00000000 0x03820: TIDV (Transmit delay timer) 0x00000008 PHY type: M88 M88 PHY STATUS REGISTER: 0x0000AC00 Jabber: no Polarity: normal Downshifted: no MDI/MDIX: MDI Cable Length Estimate: 0-50 meters Link State: Up Speed & Duplex Resolved: Yes Page Received: No Duplex: Full Speed: 1000 mbps M88 PHY CONTROL REGISTER: 0x00000B68 Jabber function: enabled Auto-polarity: disabled SQE Test: disabled CLK125: enabled Auto-MDIX: auto Extended 10Base-T Distance: disabled 100Base-TX Interface: 5-bit Scrambler: disabled Force Link Good: disabled Assert CRS on Transmit: enabled

3.4 查询网口收发包统计
(1) 命令

ethtool -S ethx
(2) 功能

查询网口收发包统计。

(3) 实例

[root@localhost ~]# ethtool -S eth0 NIC statistics: rx_packets: 447 tx_packets: 17 rx_bytes: 37053 tx_bytes: 1268 rx_broadcast: 0 tx_broadcast: 0 rx_multicast: 0 tx_multicast: 0 rx_errors: 0 tx_errors: 0 tx_dropped: 0 multicast: 0 collisions: 0 rx_length_errors: 0 rx_over_errors: 0 rx_crc_errors: 0 rx_frame_errors: 0 rx_no_buffer_count: 0 rx_missed_errors: 0 tx_aborted_errors: 0 tx_carrier_errors: 0 tx_fifo_errors: 0 tx_heartbeat_errors: 0 tx_window_errors: 0 tx_abort_late_coll: 0 tx_deferred_ok: 0 tx_single_coll_ok: 0 tx_multi_coll_ok: 0 tx_timeout_count: 0 tx_restart_queue: 0 rx_long_length_errors: 0 rx_short_length_errors: 0 rx_align_errors: 0 tx_tcp_seg_good: 0 tx_tcp_seg_failed: 0 rx_flow_control_xon: 0 rx_flow_control_xoff: 0 tx_flow_control_xon: 0 tx_flow_control_xoff: 0 rx_long_byte_count: 37053 rx_csum_offload_good: 67 rx_csum_offload_errors: 0 alloc_rx_buff_failed: 0 tx_smbus: 0 rx_smbus: 0 dropped_smbus: 0

3.5 设置网口工作方式

(1) 命令

ethtool -s ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off]

(2) 功能

设置网口速率10/100/1000M、设置网口半/全双工、设置网口是否自协商。自动协商关闭后,重新打开即可恢复原来的选项。

(3) 实例

[root@localhost ~]# ethtool -s eth0 autoneg off speed 100 duplex full [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# ethtool eth0 Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: Not reported Advertised pause frame use: No Advertised auto-negotiation: No Advertised FEC modes: Not reported Speed: 100Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: off MDI-X: off (auto) Supports Wake-on: d Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# ethtool -s eth0 autoneg on [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# ethtool eth0 Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Speed: 1000Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on MDI-X: off (auto) Supports Wake-on: d Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes

3.6 指定通过自动协商机制通告的速度和双工方式
(1) 命令

ethtool -s ethX advertise N
(2) 功能

指定通过自动协商机制通告的速度和双工方式。N为十六进制值,如0x008表示100Mb/s+全双工、0x020表示1000Mb/s+全双工。

(3) 实例

[root@localhost ~]# ethtool -s eth0 advertise 0x008 [root@localhost ~]# [root@localhost ~]# ethtool eth0 Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 100baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Speed: 1000Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on MDI-X: off (auto) Supports Wake-on: d Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes

3.7 其它
(1) 停止网卡的发送模块TX,请输入:

ethtool -A tx off eth0
操作完毕后,可输入:ethtool -a eth0,查看tx模块是否已被停止。

(2) 关闭网卡对收到的数据包的校验功能,请输入:

ethtool -K eth0 rx off
操作完毕后,可输入:ethtool -k eth0,查看校验功能是否已被停止。

(3) 如果机器上安装了两块网卡,那么eth0对应着哪块网卡呢?输入:

ethtool -p eth0 10
操作完毕后,看哪块网卡的led灯在闪,eth0就对应着哪块网卡。

(4) 查看网卡,在接收/发送数据时,有没有出错?请输入:

ethtool -S eth0
(5) 将千兆网卡的速度降为百兆,请输入:

ethtool -s eth0 speed 100
4 永久保存配置
将 ethtool 设置永久保存在网络设备有两种方法,一种是写入网口配置文件中,一种是开机自启动脚本。

(1) ethtool 设置可通过 /etc/sysconfig/network-scripts/ifcfg-ethx 文件保存,从而在设备下次启动时激活选项。

例如:

ethtool -s eth0 speed 100 duplex full autoneg off
此指令将eth1设备设置为全双工自适应,速度为100Mbs。若要eth0启动时设置这些参数, 修改文件/etc/sysconfig/network-scripts/ifcfg-eth1 ,添加如下一行:

ETHTOOL_OPTS=“speed 100 duplex full autoneg off”
(2) 将ethtool设置写入/etc/rc.d/rc.local之中,开机自动执行命令设置。

ethtool -s eth0 speed 100 duplex full autoneg off

最终解决:

ethtool -L eth1 combined 8

虚机cpu核数太大,网卡默认的多队列和核数相同,3.0的版本支持的多队列最多8个,8个以上可能会出现网络问题。

猜你喜欢

转载自blog.csdn.net/weixin_43214644/article/details/126478148
今日推荐