ethool的使用
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命令用于显示/配置网卡硬件(寄存器)。
实例
查看网卡的收发包数据统计
[root@fp-web-133 network-scripts]# ethtool -S eth0 NIC statistics: rx_packets: 185760985 tx_packets: 4918134 rx_bytes: 15902699978 tx_bytes: 750813785 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: 3 rx_long_length_errors: 0 rx_short_length_errors: 0 rx_align_errors: 0 tx_tcp_seg_good: 3 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: 15902699978 rx_csum_offload_good: 28677202 rx_csum_offload_errors: 0 alloc_rx_buff_failed: 0 tx_smbus: 0 rx_smbus: 0 dropped_smbus: 0
小写是设置
#ethtool –s ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off]
#设置网口速率10/100/1000M、设置网口半/全双工、设置网口是否自协商
查看机器上网卡的速度:百兆还是千兆,请输入:
[root@fp-web-133 network-scripts]# 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 Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes Speed: 1000Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on MDI-X: Unknown Supports Wake-on: d Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes
操作完毕后,输出信息中Speed:
这一项就指示了网卡的速度。停止网卡的发送模块TX,请输入:
[root@fp-web-133 network-scripts]# ethtool -K eth0 tx off //大写k设置 Actual changes: tx-checksumming: off scatter-gather: off tcp-segmentation-offload: off
[root@fp-web-133 network-scripts]# ethtool -k eth0 //小写k查看
Features for eth0:
rx-checksumming: off
tx-checksumming: off
scatter-gather: off
tcp-segmentation-offload: off
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: off
large-receive-offload: off
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off
receive-hashing: off
操作完毕后,可输入ethtool -a eth0
,查看tx模块是否已被停止。查看网卡eth0采用了何种驱动,请输入:
[root@fp-web-133 network-scripts]# ethtool -i eth0 driver: e1000 //e1000驱动,网卡类型 version: 7.3.21-k8-NAPI //网卡型号 firmware-version: bus-info: 0000:02:00.0 supports-statistics: yes supports-test: yes supports-eeprom-access: yes supports-register-dump: yes supports-priv-flags: no
查看网卡驱动信息
[root@fp-web-133 network-scripts]# ethtool -i eth0
driver: e1000 //e1000驱动,网卡类型
..........
[root@fp-web-133 network-scripts]# modinfo e1000 filename: /lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/net/e1000/e1000.ko version: 7.3.21-k8-NAPI license: GPL description: Intel(R) PRO/1000 Network Driver author: Intel Corporation, <linux.nics@intel.com> srcversion: 1D4F1E82BB99EA36D320B1B alias: pci:v00008086d00002E6Esv*sd*bc*sc*i* alias: pci:v00008086d000010B5sv*sd*bc*sc*i* alias: pci:v00008086d00001099sv*sd*bc*sc*i* alias: pci:v00008086d0000108Asv*sd*bc*sc*i* alias: pci:v00008086d0000107Csv*sd*bc*sc*i* alias: pci:v00008086d0000107Bsv*sd*bc*sc*i* alias: pci:v00008086d0000107Asv*sd*bc*sc*i* alias: pci:v00008086d00001079sv*sd*bc*sc*i* alias: pci:v00008086d00001078sv*sd*bc*sc*i* alias: pci:v00008086d00001077sv*sd*bc*sc*i* alias: pci:v00008086d00001076sv*sd*bc*sc*i* alias: pci:v00008086d00001075sv*sd*bc*sc*i* alias: pci:v00008086d00001028sv*sd*bc*sc*i* alias: pci:v00008086d00001027sv*sd*bc*sc*i* alias: pci:v00008086d00001026sv*sd*bc*sc*i* alias: pci:v00008086d0000101Esv*sd*bc*sc*i* alias: pci:v00008086d0000101Dsv*sd*bc*sc*i* alias: pci:v00008086d0000101Asv*sd*bc*sc*i* alias: pci:v00008086d00001019sv*sd*bc*sc*i* alias: pci:v00008086d00001018sv*sd*bc*sc*i* alias: pci:v00008086d00001017sv*sd*bc*sc*i* alias: pci:v00008086d00001016sv*sd*bc*sc*i* alias: pci:v00008086d00001015sv*sd*bc*sc*i* alias: pci:v00008086d00001014sv*sd*bc*sc*i* alias: pci:v00008086d00001013sv*sd*bc*sc*i* alias: pci:v00008086d00001012sv*sd*bc*sc*i* alias: pci:v00008086d00001011sv*sd*bc*sc*i* alias: pci:v00008086d00001010sv*sd*bc*sc*i* alias: pci:v00008086d0000100Fsv*sd*bc*sc*i* alias: pci:v00008086d0000100Esv*sd*bc*sc*i* alias: pci:v00008086d0000100Dsv*sd*bc*sc*i* alias: pci:v00008086d0000100Csv*sd*bc*sc*i* alias: pci:v00008086d00001009sv*sd*bc*sc*i* alias: pci:v00008086d00001008sv*sd*bc*sc*i* alias: pci:v00008086d00001004sv*sd*bc*sc*i* alias: pci:v00008086d00001001sv*sd*bc*sc*i* alias: pci:v00008086d00001000sv*sd*bc*sc*i* depends: vermagic: 2.6.32-358.el6.x86_64 SMP mod_unload modversions parm: TxDescriptors:Number of transmit descriptors (array of int) parm: RxDescriptors:Number of receive descriptors (array of int) parm: Speed:Speed setting (array of int) parm: Duplex:Duplex setting (array of int) parm: AutoNeg:Advertised auto-negotiation setting (array of int) parm: FlowControl:Flow Control setting (array of int) parm: XsumRX:Disable or enable Receive Checksum offload (array of int) parm: TxIntDelay:Transmit Interrupt Delay (array of int) parm: TxAbsIntDelay:Transmit Absolute Interrupt Delay (array of int) parm: RxIntDelay:Receive Interrupt Delay (array of int) parm: RxAbsIntDelay:Receive Absolute Interrupt Delay (array of int) parm: InterruptThrottleRate:Interrupt Throttling Rate (array of int) parm: SmartPowerDownEnable:Enable PHY smart power down (array of int) parm: KumeranLockLoss:Enable Kumeran lock loss workaround (array of int) parm: copybreak:Maximum size of packet that is copied to a new buffer on receive (uint) parm: debug:Debug level (0=none,...,16=all) (int)
操作完毕后,显示 driver: bnx2;version: 1.4.30 等信息。关闭网卡对收到的数据包的校验功能,请输入:
[root@fp-web-133 network-scripts]# ethtool -K eth0 rx off //-K必须是大写
操作完毕后,可输入ethtool -k eth0
,查看校验功能是否已被停止。
[root@fp-web-133 network-scripts]# ethtool -k eth0 //注意这里是小写k ,修改时候是大写k Features for eth0: rx-checksumming: off tx-checksumming: on scatter-gather: on tcp-segmentation-offload: on //TSO udp-fragmentation-offload: off generic-segmentation-offload: on //GSO generic-receive-offload: off //GRO large-receive-offload: off //LRO rx-vlan-offload: on tx-vlan-offload: on ntuple-filters: off receive-hashing: off
这些offload特性都是为了提升网络收/发性能。TSO、UFO和GSO是对应网络发送,在接收方向上对应的是LRO、GRO。
1,TSO
TSO(TCP Segmentation Offload),是一种利用网卡对TCP数据包分片,减轻CPU负荷的一种技术,有时也被叫做 LSO (Large segment offload) ,
TSO是针对TCP的,UFO是针对UDP的。 如果硬件支持 TSO功能,同时也需要硬件支持的TCP校验计算和分散/聚集 (Scatter Gather) 功能。
2,GSO
GSO(Generic Segmentation Offload),它比TSO更通用,基本思想就是尽可能的推迟数据分片直至发送到网卡驱动之前,此时会检查网卡是否支持分片功能(如TSO、UFO),
如果支持直接发送到网卡,如果不支持就进行分片后再发往网卡。这样大数据包只需走一次协议栈,而不是被分割成几个数据包分别走,这就提高了效率。
3,LRO
LRO(Large Receive Offload),通过将接收到的多个TCP数据聚合成一个大的数据包,然后传递给网络协议栈处理,以减少上层协议栈处理 开销,提高系统接收TCP数据包的能力。
4,GRO
GRO(Generic Receive Offload),基本思想跟LRO类似,克服了LRO的一些缺点,更通用。后续的驱动都使用GRO的接口,而不是LRO。
5,RSS
RSS(Receive Side Scaling),是一项网卡的新特性,俗称多队列。具备多个RSS队列的网卡,可以将不同的网络流分成不同的队列,
再分别将这些队列分配到多个CPU核心上进行处理,从而将负荷分散,充分利用多核处理器的能力。
6,可以使用如下命令来关闭对应的参数:
#ethtool -K eth1 gro off
#ethtool -K eth1 lro off
#ethtool -K eth1 tso off
如果机器上安装了两块网卡,那么eth0对应着哪块网卡呢? 输入:
[root@fp-web-133 network-scripts]# ethtool -p eth0 10
操作完毕后,看哪块网卡的led灯在闪,eth0就对应着哪块网卡。
查看网卡,在接收/发送数据时,有没有出错?请输入:
[root@fp-web-133 network-scripts]# ethtool –S eth0
将千兆网卡的速度降为百兆,请输入:
[root@fp-web-133 network-scripts]# ethtool -s eth0 speed 100
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?