测量从 Windows 客户端到 Solaris 服务器的 TCP 输出:
带有 iperf 1.7.0 的 WXP SP3 --> 返回的平均值约为 90Mbit
相同的客户端,相同的服务器,但适用于 Windows 的 iperf 2.0.5 --> 返回的平均值是 8.5 Mbit
连接到其他服务器时也观察到了类似的差异(W2008、W2003)
当不同版本的相同的工具提供截然不同的结果。
以下为示例:
C:\temp>iperf -v(来自 iperf.fr)
iperf 版本 2.0.5(2010 年 7 月 8 日)pthreadsC:\temp>iperf -c solaris10
客户端连接到 solaris10,TCP 端口 5001
TCP 窗口大小:64.0 KByte(默认)[ 3] 本地 10.172.181.159 端口 2124 与 10.172.180.209 端口 5001 连接
[ ID] 间隔传输带宽
[ 3] 0.0-10.2 秒 10.6 MBytes 8.74 Mbits/秒
性能极差,但现在我从同一台主机(Windows XP SP3 32 位和 100Mbit)到同一台服务器(Solaris 10/sparc 64 位和 1Gbit,运行 iperf 2.0.5,默认窗口为 48k)进行测试,老的防火墙
C:\temp>1iperf -v
iperf 版本 1.7.0 (2003 年 3 月 13 日) win32 线程C:\temp>1iperf.exe -c solaris10 -w64k
客户端连接到 solaris10,TCP 端口 5001
TCP 窗口大小:64.0 KByte[1208] 本地 10.172.181.159 端口 2128 与 10.172.180.209 端口 5001 连接
[ ID] 间隔传输带宽
[1208] 0.0-10.0 秒 112 MBytes 94.0 Mbits/秒
因此,一个具有 64k 窗口的 iperf 会显示 8.75Mbit,而具有相同窗口大小的旧 iperf 会显示 94.0Mbit。这些结果在反复测试中保持不变。
从我的测试来看,启动窗口大小为“x”的 iperf(old) 和启动窗口大小为“x”的 iperf(new) 不会产生相同或非常接近的结果,而是会产生完全不同的结果。我看到的唯一区别是旧版编译为 win32 线程与 pthreads,但并行性 (-P 10) 似乎在两者中都有效。
有人有线索或可以推荐一个可以提供我可以信赖的结果的工具吗?
编辑:查看来自(旧)iperf 的跟踪,它将 SYN 数据包中的 TCP 窗口缩放标志设置为 3,当我运行(新)iperf 时,它在初始数据包中设置为 0。通过交换快速分析窗口大小显示(旧)iperf 来回移动,但大多为 32k,而(新)iperf 大多保持在 64k。也许这会帮助某人将这些点联系起来。
答案1
您的 iperf 的较新版本使用的是不同的线程库(win32 线程与 pthread)。仅凭这一点就可以解释性能上的差异。
iperf 1.x 和 2.x 之间可能存在其他一些代码差异。可能很简单,例如默认选项从 1.x 更改为 2.x(例如 TCP_WINDOW_SIZE,...)。
确保两者都使用 TCP(或 udp),例如通过使用 --udp 选项重新运行。
您可以尝试 iperf-users 邮件列表存档,甚至可以在那里发布您的问题。
答案2
这不算是一个正确的答案,但您是否尝试过确保 Solaris 端的 iperf 版本与您在 Windows 上运行的版本相匹配。我无法在 Linux 上使用 iperf 2.0.4 和在 Windows 上使用 2.0.5 来重现此问题。因此,我怀疑您看到的行为与 Solaris 机器上使用的版本与 Windows 的最新版本无法很好地兼容有关。
答案3
我不相信最后一句话@Fahad 的回答是正确的!Solaris 和 Linux iPerf 客户端肯定按照协议分析器推动了正确的带宽。Windows iPerf 2.x 没有得出正确的值,但 iPerf 1.07 可以;因此,我不得不使用 1.x 版本来获得准确的结果。