没有从千兆位链路获得千兆位?

没有从千兆位链路获得千兆位?

我刚刚将我的 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。

相关内容