我有一个困扰我很久的问题。我有几个环境和服务器。它们都连接到 1 Gbit 以太网交换机(例如 Cisco 3560)。
我的理解是,1 Gbit 链接应该提供 125Mbyte/s - 当然这是理论。但至少它应该达到~100Mbyte/s。
这里的问题是,一个复制过程只能达到~20Mbyte/s。
我知道这些因素,但它们没有任何区别:
- Source和Destination是否在同一个交换机上
- 复制实用程序:SCP、Rsync、Windows 复制、Windows robocopy
- SMB/CIFS、NFS、iSCSI
- 磁盘存储:NetApp FAS,本地连接的 15k SCSI
使用所有这些配置,我的吞吐量永远不会超过 ~25Mbyte/s。问题是,如果我启动多个并行复制流,比如 3 次 rsync,我几乎达到 90Mbyte/s。我还做了一些 IOMeter 测试,发现“块大小”有很大的不同,但通常不能使用给定的工具进行调整(或者是吗?)。
巨型帧未启用,但我不确定它是否会有所作为。在所有 NIC 上启用 TOE。
你会想到哪些瓶颈?你有类似的经历吗?这些是预期的“自然”值吗?
提前致谢
如果这都是每个流的事情,那么您将遇到“带宽延迟产品”问题。基本上,在任何时候“正在传输”的数据量是有限制的(在 TCP 中,这就是“窗口大小”),并且对于给定的往返延迟,您不能获得超过一定数量的数据在给定时间段内传输的数据,因为发送者必须等待接收者确认收到已经发送的数据,然后才能发送更多数据。粗略地说,您的 TCP 吞吐量将是窗口大小/往返延迟(以秒为单位)。
这不仅仅是TCP 的事情(尽管我使用该示例是因为如果您想进一步了解,它是那里文献最多的示例)。所有在发送更多数据之前等待确认的协议都会遇到同样的问题。从理论上讲,您可以只发送所有数据而不等待确认,但这通常被认为是一件坏事,因为您可以“淹没”接收者而不给他们任何阻止消防软管的方法。
对于大多数协议,您可以调整窗口大小,以便您可以一次“传输”更多数据,并且某些协议具有您可以调整的选项以减少确认的影响,但它们都有您需要考虑的权衡你的申请。
以我的经验,瓶颈始终是磁盘。我从未使用过 ISCSI 或 SAN,因此提高性能的唯一方法是使用带有专用 RAID 卡的 RAID0。
优秀的 tomshardware.com 写了一篇关于如何通过千兆以太网链路实现 100MBps 的精彩文章 - 正如 lg 所说,这一切都归结为磁盘。
阅读(这里),看看你的想法。