裸金属资讯

测试物理机网络吞吐时哪些因素会干扰结果?

物理机网络吞吐测试并非只看命令输出的带宽数字。网卡协商速率、PCIe链路、交换机端口、TCP参数、网卡队列、NUMA位置、后台流量与散热状态,都可能让结果偏低或波动。本文给出可执行的排查顺序和结果记录方法。

一次看似简单的物理机网络吞吐测试,可能同时受到网卡、交换机、操作系统和测试工具影响。比如网卡标称25GbE,并不代表端到端一定能稳定跑到接近25Gbps;只要其中一端协商为10Gbps,或者交换机端口存在丢包,最终结果就会明显下降。

因此,测试重点不是单次跑出一个最大值,而是确认测试路径、参数和运行状态都可控,再判断瓶颈究竟来自链路、协议还是主机。

先确认链路没有“隐形降速”

检查网卡与交换机端口

在Linux物理机上,可先执行ethtool 网卡名,查看Speed、Duplex和Link detected等字段。Speed应与预期一致,Duplex通常应为Full。若使用光模块或DAC线缆,还要核对两端速率、接口类型和模块兼容性。

交换机侧应查看对应端口的协商速率、错误包、丢弃包、CRC错误和流控状态。任一方向持续出现错误计数,物理机网络吞吐测试的数字都不宜直接采信。25GbE或更高速链路还要确认交换机端口没有被配置为较低速率。

别忽略PCIe与拓扑

高带宽网卡需要足够的PCIe通道和代际带宽。网卡插在共享带宽的扩展槽、转接卡或带宽受限的插槽上,可能在链路层就形成上限。可用lspci -vv查看网卡的PCIe协商速率和通道数,并记录测试机与接收机的硬件拓扑。

测试工具和参数会改变结论

常见的iperf3适合做TCP和UDP吞吐测试,但单个TCP连接未必能充分利用高速链路。距离较远、延迟较高或TCP窗口较小的场景尤其明显。测试时应先做单流,再逐步增加并行流,同时观察吞吐是否继续增长。

  1. 两台机器使用固定IP,确认中间没有代理、限速策略或额外转发设备。
  2. 先运行单流TCP测试,记录带宽、重传和持续时间。
  3. 再使用2、4、8等不同并行流数重复测试,避免只引用一次最高值。
  4. 另做UDP测试,设置明确的目标速率,并记录丢包、抖动和接收端实际速率。
  5. 每组测试至少运行几十秒,并在相同方向、相同包长和相同时间条件下比较。

TCP测试适合观察可靠传输下的有效吞吐,UDP则更容易暴露队列溢出和链路丢包问题。UDP目标速率设置过高时,结果可能变成“发送端想发多少”,而不是网络实际承载多少。

主机内部的干扰因素

网卡队列、中断与NUMA

现代网卡通常使用多队列,把收发任务分配到多个处理线程。队列数量过少、RSS配置不合理或中断集中在少数核心,可能导致一个位置过热而其他资源空闲。检查时可结合ethtool -l、ethtool -S和/proc/interrupts观察队列、丢包及中断分布。

双路服务器还要注意NUMA。若网卡插在一个NUMA节点,而测试进程和内存主要位于另一个节点,跨节点访问会增加开销。可以分别绑定测试进程到靠近网卡的节点和远端节点,比较差异;这类对比比单纯调整并行流更能说明主机拓扑是否构成瓶颈。

卸载功能与数据包大小

TSO、GSO、GRO等卸载功能会改变主机处理数据包的方式。启用时通常更利于大流量TCP吞吐,关闭后则更容易观察真实的小包处理压力。两种状态不能混为一谈,应在记录中注明配置。

测试包长也很关键。接近MTU的流量通常更容易达到高吞吐,小包流量则会受到包处理次数、队列和中断开销影响。若业务同时包含大文件传输和大量短报文,应分别测试,而不是用单一结果代表全部场景。

背景任务、温度和测试方法

备份、镜像同步、日志采集、安全扫描以及其他网络连接,都会争用链路和网卡队列。测试前应暂停非必要任务,至少记录当时的接口流量;如果不能停机,就选择业务低峰并标明背景负载。

测试物理机网络吞吐时哪些因素会干扰结果?

持续运行几分钟后,设备可能受到功耗或温度策略影响,吞吐出现先高后低。测试时间、机箱风道、风扇策略和环境温度都应保持一致。不要把刚启动时的瞬时峰值当作稳定结果。

如何记录,才能得到可比较的结果

一份可靠的物理机网络吞吐测试记录,至少应包含网卡型号、固件版本、驱动版本、交换机端口速率、链路距离、MTU、测试工具版本、并行流数、TCP窗口、包长、测试方向和持续时间。还应保存网卡统计、交换机端口计数器以及测试过程中的丢包和重传信息。

如果10GbE链路在空载、单向、大包条件下达到约9Gbps,通常可视为接近线路有效速率;但这个范围会受协议开销、工具版本和系统配置影响,不能脱离环境套用。最终结论应写成“在某配置和某时间段内测得”,而不是宣称设备永远能达到某个固定值。只有控制变量后,物理机网络吞吐测试才具有复现和比较价值。

常见问题

问:为什么网卡显示10Gbps,测试只有几Gbps?

可能是单流TCP窗口不足、并行流太少、PCIe带宽受限、交换机端口错误,或接收端队列和中断分布不合理,应按链路、工具、主机三层逐项排查。

问:TCP和UDP哪个结果更可信?

二者用途不同。TCP适合评估可靠传输下的有效吞吐,UDP适合观察丢包和抖动,不能用其中一种替代另一种。

问:是否应该关闭网卡卸载功能?

不应一概而论。评估实际业务性能时可保留默认配置;定位小包处理能力时,可增加关闭卸载功能的对照组。

问:只测一次可以吗?

不建议。至少进行多轮重复,并记录中位数、最低值、最高值和重传或丢包情况,才能识别偶然峰值与持续性能的差别。