我最近在千兆以太网上设置了 Windows 文件共享(我没有使用巨型帧),使用的是 Samba 服务器和 Windows Vista 客户端。我复制了一些文件,但我看到的最大吞吐量是 20MB/s(兆字节,不是兆比特),大约是网络理论最大值 125MB/s 的 15%。服务器有一个 RAID 阵列,可以管理大约 75MB/s(瓶颈是 PCI 总线),客户端可以在磁盘到磁盘复制中管理大约 40MB/s。
我应该补充一点,当时网络上没有其他流量。
我知道我永远无法达到理论上的最大值,但我没想到情况会这么糟糕。
千兆以太网上 Windows 文件共享(SMB)的典型性能是什么?
加分点:除了使用巨型帧以外,我还能调整什么来加快速度?
答案1
网卡、交换机和电缆的质量都会产生影响。也许值得搜索一下你正在使用的 NIC 和交换机的评论,看看是否有人报告它们性能不佳。我听说内置在主板上的 NIC 的 Gbit 传输性能较差,但根据我的经验,这在我的环境中似乎没有太大影响。
作为参考,我刚刚在办公室安装了新的 Gbit 交换机(替换旧的 100Mbit 交换机),在我测试的每台机器组合之间,大型 SMB 传输的速度接近(但低于)30Mbyte/sec。我刚刚在两台机器之间用 netcat 进行了快速测试,得到了类似的结果,所以我不认为 SMB 是瓶颈。我刚刚测试的两台机器之间确实有两个交换机,这可能会产生影响,但我想这种影响很小,因为这些数字与 SMB 传输到同一交换机上的机器的数字非常接近。
我在 Gbit 网络上见过的最佳传输速率最快也略低于 50Mbyte/sec。这是在将驱动器映像从一台机器传输到另一台机器上的文件时(为了转换为 VMWare 虚拟驱动器。在这种情况下,两台机器通过短交叉电缆而不是交换机连接。巧合的是,有问题的其中一台机器是我刚刚测试过的机器之一,其传输速率约为 29Mbyte/sec - 在我的情况下,主要瓶颈最有可能的罪魁祸首可能是建筑物中 8 年的旧电线,可能是廉价的!对我的小型家庭网络进行快速(同样不科学)测试后发现,将文件从 Samba 共享复制到 Windows 计算机的传输速率更像是 35Mbyte/sec,而将文件从 Samba 共享复制到 Windows 计算机的传输速率则是 25Mbyte/sec(我不确定为什么会有差异,因为在这两种情况下,复制都是通过 Windows 计算机中的 teracopy 进行管理的 - 我可能需要在以后进一步调查)。
巨型帧对于批量传输会有影响,所以如果您的所有套件都能够正确支持它们,我建议您尝试一下。
长话短说:根据我的经验,您的 20Mbyte/sec 有点慢,但不是特别慢。我的所有 Windows 和 Samba 安装几乎完全没有经过调整,所以我怀疑您的硬件/接线是我所看到的和您所看到的之间的差异。
编辑
当然,从这个答案问世五年后,硬件和软件已经发生了变化。我经常看到,即使是使用廉价套件,在具有 Gbit 网络的机器上,传输速度也能达到 90+ MiB/秒。我的家庭媒体/备份/其他服务器的批量传输速度似乎限制在 60 多一点,但这似乎是因为 Samba 在机箱硬件的单个核心上受到 CPU 限制。
答案2
啊……对于服务器人员来说,了解底层情况非常重要。由于这是两年前的问题,我认为他已经解决了。然而,对于后人或任何有类似问题的人来说,他可能遇到的是这个
(TCP 窗口大小 * 8 位 / RTT (以毫秒为单位))= 最大 TCP 吞吐量(以 bps 为单位)
虽然您可能拥有千兆网络,但单个 TCP 流量可能无法达到那么高。
下面是一个简单的表格,假设 Vista 中的 TCP 窗口大小默认为 65535 字节
RTT 10 毫秒 => TCP 吞吐量 = 52428000 bps = 52Mbps
RTT 20 毫秒 => TCP 吞吐量 = 26214000 bps = 26Mbps
RTT 50 毫秒 => TCP 吞吐量 = 10485600 bps = 10Mbps
RTT 100 毫秒 => TCP 吞吐量 = 5242800 bps = 5.2Mbps
RTT 150 毫秒 => TCP 吞吐量 = 3495200 bps = 4.3Mbps
RTT 200 毫秒 => TCP 吞吐量 = 2621400 bps = 2.5Mbps
RTT 300 毫秒 => TCP 吞吐量 = 1747600 bps = 1.7Mbps
RTT 500 毫秒 => TCP 吞吐量 = 1048560 bps = 1Mbps
在 20Mbytes/sec 或 160Mbits/sec 时,您的往返延迟可能约为 3 毫秒。加快速度的唯一其他方法是使用 TCP 优化器,通过网络进行重复数据删除或将片段拼接成更大的数据包。在 LAN 上,这可能不会为您带来太多好处。如果您使用的是 Linksys 或 Netgear 等 SoHo 设备,您的延迟可能是由于交换机上缺少共享缓冲区而引起的。如果是 24 端口等较大的交换机,请尝试确保两个设备连接到同一个 ASIC。这将有助于减少序列化延迟,但不会太多。如果您可以将其降低到 2ms,您将获得高达约 31-32Mbytes/sec 的提升。如果它们在两个不同的交换机上,没有新硬件您就无能为力。
答案3
在这种情况下,这不会对您有所帮助,但 Vista/Windows 7 与 Windows 2008 Server 通信将使用 SMB2,它比普通 SMB 效率高得多,并且将利用更多的网络带宽。请参阅Windows Server 2008 中使用 SMB2 协议改进文件服务器性能和利用 Microsoft Windows Vista 和 Windows Server 2008 增强网络性能了解更多信息。
SMB2 正在 Samba 4 中开发,但看起来移植到 Samba 3.5。