ethtool不测实时吞吐,但能准确反映网卡当前协商达成的硬件级传输能力上限,是判断吞吐瓶颈的第一步;需配合iperf3等工具实测,而ethtool告诉你“理论上这根网卡最多能跑多快”。

ethtool 本身不直接测量实时吞吐量,但它能准确反映网卡当前协商达成的**硬件级传输能力上限**,这是判断吞吐瓶颈的第一步。真正跑满带宽需配合 iperf3 或 netperf 等工具测试,而 ethtool 告诉你“理论上这根网卡最多能跑多快”。
确认当前链路协商速率与双工模式
执行 ethtool <接口名>(如 ethtool enp3s0f1),重点看这三行:
-
Speed:显示实际协商速率,例如
10000Mb/s。注意这不是标称最大值,而是与对端设备(交换机/服务器)成功协商出的结果 -
Duplex:必须为
Full。若显示Half,说明双工不匹配,会严重限制有效吞吐并引发碰撞丢包 -
Auto-negotiation:应为
on。若为off且 Speed 显示Unknown!,说明协商失败,吞吐不可靠
验证驱动与硬件是否支持目标速率
有些网卡标称支持 25G,但受 PCIe 插槽版本、BIOS 设置或固件限制,实际可能只跑在 10G 或更低:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 运行 ethtool -i <接口名> 查看
driver、firmware-version和bus-info,确认驱动版本是否足够新(老驱动常不支持高速率) - 用 lspci -vv -s <bus-info>(如
lspci -vv -s 0000:03:00.0)检查 PCIe Link Capabilities 中的Speed和Width,比如5GT/s x8对应理论约 4GB/s 带宽,足够支撑 25G 网卡 - 若 Speed 显示异常低(如期望 10G 却只显示 1000),先查物理层:光模块收光功率(
ethtool -m)、网线类别(Cat6a+ 才支持 10G 长距)、交换机端口配置
排除底层丢包与错误对吞吐的影响
即使协商速率正常,持续的硬件错误也会吃掉有效带宽:
- 运行 ethtool -S <接口名> | grep -E "(rx_errors|rx_dropped|tx_dropped|rx_crc_errors|rx_frame_errors)"
- 若这些值随时间明显增长,尤其
rx_crc_errors或rx_frame_errors非零,说明物理链路存在干扰、线缆劣化或模块故障,实测吞吐必然下降 - 对比两次采集的统计差值(
sudo ethtool -S eth0 > s1.txt→ 等 10 秒 →sudo ethtool -S eth0 > s2.txt→diff s1.txt s2.txt),比单次查看更能暴露瞬时异常
辅助参考:环形缓冲区是否成为瓶颈
RX/TX Ring Buffer 过小会导致高吞吐下内核来不及处理,数据包被网卡直接丢弃:
- 运行 ethtool -g <接口名> 查看当前设置,重点关注
Current hardware settings: RX和TX - 常见默认值如 256 或 512,在 10G+ 场景下容易溢出;可尝试调大(如
sudo ethtool -G eth0 rx 4096 tx 4096),再观察rx_dropped是否下降 - 调整后务必用
ethtool -g再次确认生效,部分驱动不支持动态修改或有上限

















