ethtool命令

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

语法

  1. ethtool [ -a | -c | -g | -i | -d | -k | -r | -S |] ethX
  2. ethtool [-A] ethX [autoneg on|off] [rx on|off] [tx on|off]
  3. 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]
  4. ethtool [-G] ethX [rx N] [rx-mini N] [rx-jumbo N] [tx N]
  5. ethtool [-e] ethX [raw on|off] [offset N] [length N]
  6. ethtool [-E] ethX [magic N] [offset N] [value N]
  7. ethtool [-K] ethX [rx on|off] [tx on|off] [sg on|off] [tso on|off]
  8. ethtool [-p] ethX [N]
  9. ethtool [-t] ethX [offline|online]
  10. ethtool [-s] ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off] [port tp|aui|bnc|mii] [phyad N] [xcvr internal|external]
  11. [wol p|u|m|b|a|g|s|d...] [sopass xx:yy:zz:aa:bb:cc] [msglvl N]

选项

  1. -a 查看网卡中 接收模块RX、发送模块TXAutonegotiate模块的状态:启动on 停用off
  2. -A 修改网卡中 接收模块RX、发送模块TXAutonegotiate模块的状态:启动on 停用off
  3. -c display the Coalesce information of the specified ethernet card
  4. -C Change the Coalesce setting of the specified ethernet card
  5. -g Display the rx/tx ring parameter information of the specified ethernet card
  6. -G change the rx/tx ring setting of the specified ethernet card
  7. -i 显示网卡驱动的信息,如驱动的名称、版本等。
  8. -d 显示register dump信息, 部分网卡驱动不支持该选项。
  9. -e 显示EEPROM dump信息,部分网卡驱动不支持该选项。
  10. -E 修改网卡EEPROM byte
  11. -k 显示网卡Offload参数的状态:on off,包括rx-checksummingtx-checksumming等。
  12. -K 修改网卡Offload参数的状态。
  13. -p 用于区别不同ethX对应网卡的物理位置,常用的方法是使网卡port上的led不断的闪;N指示了网卡闪的持续时间,以秒为单位。
  14. -r 如果auto-negotiation模块的状态为on,则restarts auto-negotiation
  15. -S 显示NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。
  16. -t 让网卡执行自我检测,有两种模式:offline or online
  17. -s 修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。

数据来源

  1. Ethtool命令显示的信息来源于网卡驱动层,即TCP/ip协议的链路层。该命令在Linux内核中实现的逻辑层次为:
  2. 最重要的结构体struct ethtool_ops,该结构体成员为用于显示或修改以太网卡配置的一系列函数指针,见下表中的第二列。
  3. 网卡驱动负责实现(部分)这些函数,并将其封装入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命令用于显示/配置网卡硬件(寄存器)。

实例

查看网卡的收发包数据统计

  1. [root@fp-web-133 network-scripts]# ethtool -S eth0
  2. NIC statistics:
  3. rx_packets: 185760985
  4. tx_packets: 4918134
  5. rx_bytes: 15902699978
  6. tx_bytes: 750813785
  7. rx_broadcast: 0
  8. tx_broadcast: 0
  9. rx_multicast: 0
  10. tx_multicast: 0
  11. rx_errors: 0
  12. tx_errors: 0
  13. tx_dropped: 0
  14. multicast: 0
  15. collisions: 0
  16. rx_length_errors: 0
  17. rx_over_errors: 0
  18. rx_crc_errors: 0
  19. rx_frame_errors: 0
  20. rx_no_buffer_count: 0
  21. rx_missed_errors: 0
  22. tx_aborted_errors: 0
  23. tx_carrier_errors: 0
  24. tx_fifo_errors: 0
  25. tx_heartbeat_errors: 0
  26. tx_window_errors: 0
  27. tx_abort_late_coll: 0
  28. tx_deferred_ok: 0
  29. tx_single_coll_ok: 0
  30. tx_multi_coll_ok: 0
  31. tx_timeout_count: 0
  32. tx_restart_queue: 3
  33. rx_long_length_errors: 0
  34. rx_short_length_errors: 0
  35. rx_align_errors: 0
  36. tx_tcp_seg_good: 3
  37. tx_tcp_seg_failed: 0
  38. rx_flow_control_xon: 0
  39. rx_flow_control_xoff: 0
  40. tx_flow_control_xon: 0
  41. tx_flow_control_xoff: 0
  42. rx_long_byte_count: 15902699978
  43. rx_csum_offload_good: 28677202
  44. rx_csum_offload_errors: 0
  45. alloc_rx_buff_failed: 0
  46. tx_smbus: 0
  47. rx_smbus: 0
  48. dropped_smbus: 0
  49.  
  50. 小写是设置

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

 #设置网口速率10/100/1000M、设置网口半/全双工、设置网口是否自协商

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

  1. [root@fp-web-133 network-scripts]# ethtool eth0
  2. Settings for eth0:
  3. Supported ports: [ TP ]
  4. Supported link modes: 10baseT/Half 10baseT/Full
  5. 100baseT/Half 100baseT/Full
  6. 1000baseT/Full
  7. Supported pause frame use: No
  8. Supports auto-negotiation: Yes
  9. Advertised link modes: 10baseT/Half 10baseT/Full
  10. 100baseT/Half 100baseT/Full
  11. 1000baseT/Full
  12. Advertised pause frame use: No
  13. Advertised auto-negotiation: Yes
  14. Speed: 1000Mb/s
  15. Duplex: Full
  16. Port: Twisted Pair
  17. PHYAD: 0
  18. Transceiver: internal
  19. Auto-negotiation: on
  20. MDI-X: Unknown
  21. Supports Wake-on: d
  22. Wake-on: d
  23. Current message level: 0x00000007 (7)
  24. drv probe link
  25. Link detected: yes

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

  1. [root@fp-web-133 network-scripts]# ethtool -K eth0 tx off //大写k设置
  2. Actual changes:
  3. tx-checksumming: off
  4. scatter-gather: off
  5. 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采用了何种驱动,请输入:

  1. [root@fp-web-133 network-scripts]# ethtool -i eth0
  2. driver: e1000 //e1000驱动,网卡类型
  3. version: 7.3.21-k8-NAPI   //网卡型号
  4. firmware-version:
  5. bus-info: 0000:02:00.0
  6. supports-statistics: yes
  7. supports-test: yes
  8. supports-eeprom-access: yes
  9. supports-register-dump: yes
  10. supports-priv-flags: no

查看网卡驱动信息

  1. [root@fp-web-133 network-scripts]# ethtool -i eth0
  2. driver: e1000 //e1000驱动,网卡类型

..........

  1. [root@fp-web-133 network-scripts]# modinfo e1000
  2. filename: /lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/net/e1000/e1000.ko
  3. version: 7.3.21-k8-NAPI
  4. license: GPL
  5. description: Intel(R) PRO/1000 Network Driver
  6. author: Intel Corporation, <linux.nics@intel.com>
  7. srcversion: 1D4F1E82BB99EA36D320B1B
  8. alias: pci:v00008086d00002E6Esv*sd*bc*sc*i*
  9. alias: pci:v00008086d000010B5sv*sd*bc*sc*i*
  10. alias: pci:v00008086d00001099sv*sd*bc*sc*i*
  11. alias: pci:v00008086d0000108Asv*sd*bc*sc*i*
  12. alias: pci:v00008086d0000107Csv*sd*bc*sc*i*
  13. alias: pci:v00008086d0000107Bsv*sd*bc*sc*i*
  14. alias: pci:v00008086d0000107Asv*sd*bc*sc*i*
  15. alias: pci:v00008086d00001079sv*sd*bc*sc*i*
  16. alias: pci:v00008086d00001078sv*sd*bc*sc*i*
  17. alias: pci:v00008086d00001077sv*sd*bc*sc*i*
  18. alias: pci:v00008086d00001076sv*sd*bc*sc*i*
  19. alias: pci:v00008086d00001075sv*sd*bc*sc*i*
  20. alias: pci:v00008086d00001028sv*sd*bc*sc*i*
  21. alias: pci:v00008086d00001027sv*sd*bc*sc*i*
  22. alias: pci:v00008086d00001026sv*sd*bc*sc*i*
  23. alias: pci:v00008086d0000101Esv*sd*bc*sc*i*
  24. alias: pci:v00008086d0000101Dsv*sd*bc*sc*i*
  25. alias: pci:v00008086d0000101Asv*sd*bc*sc*i*
  26. alias: pci:v00008086d00001019sv*sd*bc*sc*i*
  27. alias: pci:v00008086d00001018sv*sd*bc*sc*i*
  28. alias: pci:v00008086d00001017sv*sd*bc*sc*i*
  29. alias: pci:v00008086d00001016sv*sd*bc*sc*i*
  30. alias: pci:v00008086d00001015sv*sd*bc*sc*i*
  31. alias: pci:v00008086d00001014sv*sd*bc*sc*i*
  32. alias: pci:v00008086d00001013sv*sd*bc*sc*i*
  33. alias: pci:v00008086d00001012sv*sd*bc*sc*i*
  34. alias: pci:v00008086d00001011sv*sd*bc*sc*i*
  35. alias: pci:v00008086d00001010sv*sd*bc*sc*i*
  36. alias: pci:v00008086d0000100Fsv*sd*bc*sc*i*
  37. alias: pci:v00008086d0000100Esv*sd*bc*sc*i*
  38. alias: pci:v00008086d0000100Dsv*sd*bc*sc*i*
  39. alias: pci:v00008086d0000100Csv*sd*bc*sc*i*
  40. alias: pci:v00008086d00001009sv*sd*bc*sc*i*
  41. alias: pci:v00008086d00001008sv*sd*bc*sc*i*
  42. alias: pci:v00008086d00001004sv*sd*bc*sc*i*
  43. alias: pci:v00008086d00001001sv*sd*bc*sc*i*
  44. alias: pci:v00008086d00001000sv*sd*bc*sc*i*
  45. depends:
  46. vermagic: 2.6.32-358.el6.x86_64 SMP mod_unload modversions
  47. parm: TxDescriptors:Number of transmit descriptors (array of int)
  48. parm: RxDescriptors:Number of receive descriptors (array of int)
  49. parm: Speed:Speed setting (array of int)
  50. parm: Duplex:Duplex setting (array of int)
  51. parm: AutoNeg:Advertised auto-negotiation setting (array of int)
  52. parm: FlowControl:Flow Control setting (array of int)
  53. parm: XsumRX:Disable or enable Receive Checksum offload (array of int)
  54. parm: TxIntDelay:Transmit Interrupt Delay (array of int)
  55. parm: TxAbsIntDelay:Transmit Absolute Interrupt Delay (array of int)
  56. parm: RxIntDelay:Receive Interrupt Delay (array of int)
  57. parm: RxAbsIntDelay:Receive Absolute Interrupt Delay (array of int)
  58. parm: InterruptThrottleRate:Interrupt Throttling Rate (array of int)
  59. parm: SmartPowerDownEnable:Enable PHY smart power down (array of int)
  60. parm: KumeranLockLoss:Enable Kumeran lock loss workaround (array of int)
  61. parm: copybreak:Maximum size of packet that is copied to a new buffer on receive (uint)
  62. parm: debug:Debug level (0=none,...,16=all) (int)

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

  1. [root@fp-web-133 network-scripts]# ethtool -K eth0 rx off //-K必须是大写

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

  1. [root@fp-web-133 network-scripts]# ethtool -k eth0 //注意这里是小写k ,修改时候是大写k
  2. Features for eth0:
  3. rx-checksumming: off
  4. tx-checksumming: on
  5. scatter-gather: on
  6. tcp-segmentation-offload: on //TSO
  7. udp-fragmentation-offload: off
  8. generic-segmentation-offload: on //GSO
  9. generic-receive-offload: off //GRO
  10. large-receive-offload: off //LRO
  11. rx-vlan-offload: on
  12. tx-vlan-offload: on
  13. ntuple-filters: off
  14. 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对应着哪块网卡呢? 输入:

  1. [root@fp-web-133 network-scripts]# ethtool -p eth0 10
    操作完毕后,看哪块网卡的led灯在闪,eth0就对应着哪块网卡。

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

  1. [root@fp-web-133 network-scripts]# ethtool S eth0

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

  1. [root@fp-web-133 network-scripts]# ethtool -s eth0 speed 100

ethool的使用的更多相关文章

  1. [转载] ACE 组播校验和出错问题解决

    源地址:http://yuanmuqiuyu2000.blog.sohu.com/140904942.html 使用ACE框架写了个组播简单的测试工具,但是测试过程中,总是发现udp校验和出错的信息. ...

  2. ethtool命令

    用途 显示或修改以太网卡的配置信息. 语法 ethtool [ -a | -c | -g | -i | -d | -k | -r | -S |] ethX ethtool [-A] ethX [aut ...

  3. Linux网络设备驱动架构

    Linux网络设备驱动程序体系结构分为四层:网络协议接口层.网络设备接口层.提供实际功能的设备驱动层以及网络设备与媒介层. (1)网络协议接口层向网络层协议提供统一的数据包收发接口,不论上层协议是AR ...

  4. Ethtool工具源码剖析

    Ethtool工具源码剖析 ethool是一个实用的工具,用来给系统管理员以大量的控制网络接口的操作.可以用来控制接口参数,速度,介质类型,双工模式,DMA环设置,硬件校验和,LAN唤醒操作等.本人经 ...

  5. 【Linux】ethtool 用法

    ethtool命令用于获取以太网卡的配置信息,或者修改这些配置.这个命令比较复杂,功能特别多. 语法 ethtool [ -a | -c | -g | -i | -d | -k | -r | -S | ...

随机推荐

  1. CF1428B题解

    打比赛的时候sb了,用了一个似乎原本可以不用的东西来找环... 首先,根据题意,我们可以连成一张图,而蛇能不能回到自己的家, 只需要在一个环上就行了. 问题是怎么找环,我用了 Tarjan... 具体 ...

  2. async-validator 源码学习笔记(三):rule

    系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 rule 主要实现的是校验规则,文件结构为下图: 一.rul ...

  3. 一文让你明白CPU上下文切换

    我们都知道,Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行.当然,这些任务实际上并不是真的在同时运行,而是因为系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时 ...

  4. 字符串的高级应用-char a[100] = "1+2=;3-2=;2*5=;8/4=;" 得到char a[100] ="1+2=3;3-2=1;2*5=10;8/4=2;"

    1 #include<stdio.h> 2 #include<string.h> 3 4 int main() 5 { 6 char a[100] = "1+2=;3 ...

  5. kdump原理,是如何找到入口的

    请解释下kdump原理,捕获内核是如何获取到生产内核的首地址的.

  6. python豆瓣250爬取

    import requests from bs4 import BeautifulSoup from lxml import etree # qianxiao996精心制作 #博客地址:https:/ ...

  7. 一道有意思的 CSS 面试题,FizzBu​​zz ~

    FizzBu​​zz 是一道很有意思的题目.我们来看看题目: 如果遇见了 3 的倍数要说 Fizz,5 的倍数就说 Buzz,如果即是 3 的倍数又是 5 的倍数就说 FizzBuzz. 如果是在一些 ...

  8. Linux 环境部署Skywalking支持Elasticsearch

    一.环境准备 1.Java JKD 1.8(建议) 2.Elasticsearch 3.Skywalking 二. 环境搭建 安装Skywalking分为两个步骤: a.安装Backend后端服务 b ...

  9. HTTP与HTTPS有什么区别

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...

  10. 介绍Collection框架的结构?

    随意发挥题,天南海北谁便谈,只要让别觉得你知识渊博,理解透彻即可.