ethtool

发布时间: 更新时间: 总字数:1802 阅读时间:4m 作者: IP上海 分享 网址

ethtool 是一个 Linux 下的网络管理工具,可以用于 网卡状态/驱动版本信息查询收发数据信息查询 以及查询和配置 网卡工作模式/链路速度 等。

介绍

ethtool 是 Linux 下用于查询及设置网卡参数的命令,是网络运维和排查网卡故障时不可或缺的工具。它可以让你查看网卡的物理层状态(如速度、双工模式)、驱动信息、以及修改网卡的高级特性(如卸载功能、队列长度等)。

安装方法

大多数 Linux 发行版默认已安装,如果没有,可以使用包管理器安装:

  • CentOS/RHEL: yum install ethtool
  • Ubuntu/Debian: apt install ethtool

基本语法

ethtool [参数] [网卡接口名]
  • 提示:网卡接口名通常为 eth0, ens33, enp0s3 等,可用 ip addr 查看。

运维常用命令

参数说明:

  • -k 查询网卡的Offload信息
  • -K 修改网卡的Offload信息
  • -c 查询网卡聚合信息
  • -C 修改网卡聚合信息
  • -l 查看网卡队列数
  • -L 设置网卡队列数

查看网卡基础信息

用于确认网卡是否连通、协商速率是多少、双工模式等。

ethtool eth0

关键输出解读:

  • Speed: 当前速率(如 1000Mb/s, 10000Mb/s)。
  • Duplex: 双工模式(Full 全双工 / Half 半双工)。
  • Link detected: 物理链路是否连通(yes 表示网线已插好且有信号)。
  • Auto-negotiation: 自动协商是否开启(通常应为 on)。

查看网卡驱动和固件版本

在处理兼容性问题或升级驱动前,需要确认当前版本。

ethtool -i eth0

关键输出:

  • driver: 驱动名称(如 igb, ixgbe, e1000e)。
  • version: 驱动版本。
  • firmware-version: 硬件固件版本。
  • bus-info: PCI 总线地址(用于定位物理硬件)。

查看网卡统计数据(丢包/错误排查神器)

当网络慢或有丢包时,查看详细的网卡计数器,比 ifconfig 更详细。

ethtool -S eth0
  • 技巧:输出内容很多,通常配合 grep 使用,例如查找丢包或错误:
    ethtool -S eth0 | grep -iE "drop|error|fail"
    

点亮网卡指示灯(物理定位)

在数据中心机房中,面对几百台服务器,如何知道你要维护的是哪台?或者是哪根网线? 该命令会让指定网卡的 LED 灯闪烁。

ethtool -p eth0 10
  • 含义:eth0 的指示灯闪烁 10 秒。如果不加时间,会一直闪烁直到按 Ctrl+C。

查看和调整环形缓冲区(Ring Buffer)

如果服务器网络吞吐量很大,出现丢包(rx_missed_errors),可能是网卡缓冲区太小。

  • 查看当前和最大支持的大小:

    ethtool -g eth0
    
    • Pre-set maximums: 硬件支持的最大值。
    • Current hardware settings: 当前设置值。
  • 修改缓冲区大小(性能调优):

    # 将接收(RX)和发送(TX)缓冲区都设置为 4096
    ethtool -G eth0 rx 4096 tx 4096
    

查看和修改网卡卸载特性(Offload)

现代网卡支持将部分 CPU 的工作(如校验和计算、分片)卸载到网卡硬件上处理,以降低 CPU 负载。

  • 查看特性状态:

    ethtool -k eth0
    
  • 修改特性(例如关闭 TSO - TCP Segmentation Offload):

    ethtool -K eth0 tso off
    
    • 场景: 某些 Kubernetes 环境或旧式防火墙可能会因为 TSO 导致数据包莫名丢失,此时需要尝试关闭它。
# 查看
ethtool -k ens33

# 关闭 GRO
ethtool -K ens33 gro off

# 开启vxlan offload
ethtool -K ens33 rx-checksum on
ethtool -K ens33 tx-udp_tnl-segmentation on

强制设置网卡速率和双工模式

警告:仅在自动协商失败或排查特定故障时使用。若配置与交换机端口不匹配,会导致网络断开。

# 关闭自动协商,强制全双工,速率 1000Mb/s
ethtool -s eth0 speed 1000 duplex full autoneg off

如果要恢复默认(推荐):

ethtool -s eth0 autoneg on

唤醒功能 (Wake-on-LAN)

查看或设置网卡是否支持远程唤醒。

ethtool eth0 | grep Wake

或者设置开启魔术包唤醒:

ethtool -s eth0 wol g

Channel 参数

# 查看Channel parameters
$ ethtool -l ens33

# 开启网卡多队列
ethtool -L ens33 combined 4

经验总结与注意事项

  1. 临时性: 直接使用 ethtool 命令修改的配置(如速率、Ring Buffer、Offload 特性)通常是临时生效的,重启服务器后会失效。
  2. 持久化配置:
    • CentOS/RHEL: 将参数写入 /etc/sysconfig/network-scripts/ifcfg-eth0 文件中(通常使用 ETHTOOL_OPTS 变量,或者通过开机脚本 rc.local 执行)。
    • Ubuntu/Debian (Netplan): 在 yaml 配置文件中可以通过 link-propertiesrenderer: NetworkManager 进行部分设置,或者使用 networkd-dispatcher 脚本。
  3. 远程操作风险: 在远程 SSH 调整网卡速率(Speed/Duplex)时要非常小心,一旦配置错误(例如服务器强制 1000M,交换机还在 100M),网络会瞬间中断,只能去机房接显示器恢复。

快速排查流程示例

如果你遇到一台服务器网络极慢:

  1. 先看物理连接对不对:ethtool eth0 (检查 Speed 是否协商到了 1000/10000,Link 是否为 yes)。
  2. 看有没有物理层面的丢包:ethtool -S eth0 | grep -iE "drop|err"
  3. 如果发现 rx_missed 错误增长,检查缓冲区:ethtool -g eth0,如果 Current 远小于 Maximum,考虑调大。

F&Q

rx_missed_errors

rx_missed_errors(接收丢失错误)通常指的是网卡(NIC)接收到的数据包,但是由于某种原因被网卡或驱动程序丢弃,而没有成功提交给操作系统内核进行处理。最主要的原因:

  • 接收环形缓冲区(RX Ring Buffer/FIFO)溢出
  • 网卡或驱动程序特定的丢包计数

解决:增大缓冲区

# 查看最大值,例如: sudo ethtool -g eth0
sudo ethtool -g <interface_name>

# 例如,如果最大值是 4096,你可以尝试设置为 2048 或更大。
sudo ethtool -G <interface_name> rx <new_size>
本文总阅读量 次 本站总访问量 次 本站总访客数
Home Archives Categories Tags Statistics