我刚刚在虚拟化的 CentOS 5.4 机器上设置了一个新的 Samba 3.3 服务器,发现它在非常特殊的情况下存在性能问题。我老板有一台运行 Mac OSX 10.6 的 Macbook Pro。当他尝试...比如说...将一个 30 兆字节的文件传输到服务器上时,速度非常慢(15 秒以上)。
不过,这里还有一些其他有趣的数据点:
- 从服务器传输同一个文件只需要几秒钟。只有在写入时才会极其缓慢。
- 将同一个文件传输到我们已经设置的运行 Fedora Core 5 和 Samba 3.0 的旧 Samba 服务器上几乎是瞬间完成的。不用说,我们正在尝试升级,否则我们会继续使用它。
- 使用 SFTP 将同一个文件传输到新服务器需要 1-2 秒。
- 什么时候我尝试使用我的个人 OSX 10.5 机器将相同的示例文件传输到新服务器上,无论我使用哪种协议(Samba、SCP、SFTP),大约需要 5-6 秒。因此,在其他协议上,它比我老板的机器慢,但使用 Samba 时速度更快。
我已经尝试了 Google 列出的一些加速技巧,例如socket options = TCP_NODELAY
、read raw
和write raw
,但似乎都没有对最终的速度产生任何影响。防火墙都配置正确,虚拟主机将所有桥接流量传递到相应的虚拟服务器,并且允许“Samba”通过虚拟服务器本身。我还查看了旧服务器的配置文件,没有任何东西让我感到惊讶,这这就是为什么它这么快。”
还有其他想法吗?
编辑:新信息。我发现我的电脑使用的是 WiFi 而不是以太网。当我切换到以太网时,我在服务器上的表现在各个方面都与我的老板相同(SFTP 很快,Samba 写入超慢等)。
答案1
您所连接的以太网交换机是否可能错误协商为与 Mac 的半双工连接?您的描述(一个方向速度高,另一个方向速度低,如果您尝试快速发送数据,情况会更糟)听起来就像我所看到的,即一端(您的情况下是交换机)处于半双工模式,而另一端(Mac)尝试使用全双工模式。
您可以使用以下命令检查 Mac 上的模式ifconfig
(查找类似“media: autoselect (1000baseT ) status: active”的行;如何在交换机上检查(/是否可以检查)取决于其管理接口(如果有)。您也可以使用类似的命令来诊断这个问题netstat -p tcp -s
——如果这是问题所在,您可能会看到大量的重新传输。
注意:如果服务器和 Mac 位于不同的交换机上,则交换机之间的连接也可能存在问题。
答案2
放unix extensions = no
我们还添加
strict locking = no
blocking locks = no
kernel oplocks = no
posix locking = no
适合我们的环境。在更改默认值之前,请确保您知道自己在做什么。一如既往,man smb.conf
并利用列表。
加入这里:
https://lists.samba.org/mailman/
在此搜索:
http://marc.info/?l=samba
http://marc.info/?l=samba-technical
答案3
虚拟网卡的速度只是人为的,它是存储在“卡”寄存器中的一个位,仅供客户机用来显示通常的“速度”状态。它从未用于实际限制“卡”的实际速度,qemu/kvm 中没有代码可以做到这一点 - 数据包始终以最大可能速度流动。是的,不同的“卡”对 CPU 使用率的影响不同,效率也不同,因此导致速度不同,但只要 CPU 足够快,就可以使用 10mbps pcnet 模拟 NIC 以 GigE 速度发送数据。