我刚刚将我的 LAN 升级到千兆。这是 netperf 对此的评论。
前:
marcus@lt:~$ netperf -H 192.168.1.1
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.1 (192.168.1.1)
port 0 AF_INET : demo
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 10.02 94.13
后:
marcus@lt:~$ netperf -H 192.168.1.1
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.1 (192.168.1.1) port 0 AF_INET : demo
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 10.01 339.15
只有 340 Mbps?这是怎么回事?
背景信息:我通过千兆交换机连接到 sheevaplug。我的墙壁上有 Cat5e 线路,线路长度大约为 30 英尺。如果您不熟悉 netperf,它往往会给出非常稳定的结果,并且从不说谎。
答案1
查看此主题。其中一位贡献者 (Frennzy) 很好地概述了这一点。我引用一下:
千兆以太网的“真实”速度是......
1Gbps。
也就是说,它将以每秒10亿位的速度传输比特。
您获得的数据吞吐量与各种各样的因素有关:
NIC 连接到系统(PCI、PCIe、北桥等)。
硬盘吞吐量。
总线争用。
第 3/4 层协议和相关开销。
应用程序效率(FTP 与 SMB/CIFS 等)
框架尺寸。
数据包大小分布(与总吞吐效率相关)
压缩(硬件和软件)。
缓冲区争用、窗口化等
网络基础设施容量和架构(端口数量、背板容量、争用等)
简而言之,除非您测试过,否则您不会真正知道。NetCPS 是一款出色的工具,其他许多工具也是如此。
稍后在帖子中还有此内容(我突出显示):
不要再这样想了。现在就停止。你们所有人。
尽管您想弄清楚每秒传输的千字节或兆字节数,但事实是,即使网络速度保持不变,传输速度也是可变的。网络“速度”(每秒位数)是绝对的。网络吞吐量(每秒实际有效载荷数据)不是。
原帖作者:从 100Mbps 切换到 1000Mbps 时,数据传输速度会不会更快?几乎可以肯定。它会接近理论最大值吗?不会。这值得吗?这由你来决定。
如果您想谈论网络速度,就谈论网络速度。如果您想谈论数据吞吐量,就谈论数据吞吐量。这两者并不是一对一联系在一起的。
答案2
“理论最大值”这个术语被随意使用,但它在以太网技术中确实有实际应用。在像以太网这样的 CSMA/CD 系统上,您只能发送大约一半的带宽,因为线路可以容纳,通常会少一点。原因是,一旦您尝试超越该“最大值”,收发器就会开始检测冲突,而不是传输数据包。然后指数退避开始发挥作用,数据包传输进一步下降。令牌环解决了这个问题,但它有很多自己的问题,我相信现在很少使用了。以太网/IP 成为事实上的标准。
上行链路技术(例如 T3)使用异步对,可实现每条线路的全部吞吐量,但它也不是基于以太网的协议。
当您使用基本的标准以太网设备时,总会存在“理论最大值”。
答案3
在 GbE 的背景下谈论 CSMA/CD 完全是无稽之谈。千兆以太网或任何“全双工”以太网都不使用 CSMA/CD。虽然 GbE 仍然保留了半双工操作的理论可能性,但我完全不确定是否有任何实际生产的 GbE 套件可以进行半双工操作。
至于为什么 OP 在 1000 Gbit/s 的链路上只实现了 300 多 Mbit/s,我建议在每次运行 netperf 之前和之后收集 TCP 的 netstat 统计信息,并包括 -c 和 -C 全局命令行选项以查看两端的 CPU 利用率。可能是某些东西丢包了,或者可能是一方或另一方的 CPU 已经饱和。如果两端的系统都是多核的,一定要使用外部工具或通过仔细查看 netperf 调试输出来检查每个核心的利用率。
有关其他 netperf 的问题最好留给 netperf.org 邮件列表上的 netperf-talk。