转载于: https://www.cnblogs.com/danxi/p/6591885.html
ethtool 常用命令如下, 比如对 eth0 的操作:
- ethtool eth0 // 查询 ethx 网口基本设置, 其中 x 是对应网卡的编号, 如 eth0,eth1 等等
- ethtool -h // 显示 ethtool 的命令帮助 (help)
- ethtool -i eth0 // 查询 eth0 网口的相关信息
- ethtool -d eth0 // 查询 eth0 网口注册性信息
- ethtool -r eth0 // 重置 eth0 网口到自适应模式
- ethtool -S eth0 // 查询 eth0 网口收发包统计
- ethtool -s eth0 [speed 10|100|1000] [duplex half|full] [autoneg on|off] // 设置网口速率 10/100/1000M, 设置网口半 / 全双工, 设置网口是否自协商
我这里主要想发掘一下 ethtool -k 相关的内容, 以下命令在 Ubuntu 14.04 上亲测:
1,rx-checksumming: off
接收侧硬件校验和计算, 如能设置为 on, 表示网卡支持该特性, 命令: ethtool -K eth0 rx-checksum on|off
2,tx-checksumming: on
发送侧硬件校验和计算, 如能设置为 on, 表示网卡支持该特性, 命令: ethtool -K eth0 tx-checksum-ip-generic on|off
3,scatter-gather: on
分散 / 聚集 (Scatter Gather) 功能, 是网卡要支持 TSO 的必要条件之一.
4,tcp-segmentation-offload: on
简称 TSO, 是一种利用网卡对 TCP 数据包分片, 减轻 CPU 负荷的一种技术, 有时也被叫做 LSO (Large segment offload) ,TSO 是针对 TCP 的, UFO 是针对 UDP 的. 如果硬件支持 TSO 功能, 同时也需要硬件支持的 TCP 校验计算和分散 / 聚集 (Scatter Gather) 功能. 命令: ethtool -K eth0 tso on|off
在不支持 TSO 的网卡上, TCP 层向 IP 层发送数据会考虑 mss, 使得 TCP 向下发送的数据可以包含在一个 IP 分组中而不会造成分片, mss 是在 TCP 初始建立连接时由网卡 MTU 确定并和对端协商的, 所以在一个 MTU=1500 的网卡上, TCP 向下发送的数据不会大于 min(mss_local, mss_remote)-ip 头 - tcp 头.
网卡支持 TSO 时, TCP 层会逐渐增大 mss(总是整数倍数增加), 当 TCP 层向下发送大块数据时, 仅仅计算 TCP 头, 网卡接到到了 IP 层传下的大数据包后自己重新分成若干个 IP 数据包, 添加 IP 头, 复制 TCP 头并且重新计算校验和等相关数据, 这样就把一部分 CPU 相关的处理工作转移到由网卡来处理.
5,udp-fragmentation-offload: off
简称 UFO, 是网卡对 udp 提供的类似 TSO 的技术. 命令: ethtool -K eth0 ufo on | off
在我的网卡上不支持这个特性, 所以命令执行失败是这样的:
- [email protected]:~# ethtool -K eth0 ufo on
- Cannot change udp-fragmentation-offload
- Could not change any device features
- 6,generic-segmentation-offload: on
简称 GSO, 它比 TSO 更通用, 基本思想就是尽可能的推迟数据分片直至发送到网卡驱动之前, 此时会检查网卡是否支持分片功能 (如 TSO,UFO), 如果支持直接发送到网卡, 如果不支持就进行分片后再发往网卡. 这样大数据包只需走一次协议栈, 而不是被分割成几个数据包分别走, 这就提高了效率. 命令: ethtool -K eth0 gso on | off
7,large-receive-offload: off
简称 LRO, 通过将接收到的多个 TCP 数据聚合成一个大的数据包, 然后传递给网络协议栈处理, 以减少上层协议栈处理 开销, 提高系统接收 TCP 数据包的能力.
8,generic-receive-offload: on
简称 GRO, 基本思想跟 LRO 类似, 克服了 LRO 的一些缺点, 更通用. 后续的驱动都使用 GRO 的接口, 而不是 LRO.
附:
RSS(Receive Side Scaling), 是一项网卡的新特性, 俗称多队列. 具备多个 RSS 队列的网卡, 可以将不同的网络流分成不同的队列, 再分别将这些队列分配到多个 CPU 核心上进行处理, 从而将负荷分散, 充分利用多核 CPU 的能力.
参考:
http://www.winyao.com/solution_show.asp?id=224
来源: http://www.bubuko.com/infodetail-3462126.html