使用 samba 的两台 Ubuntu PC 之间的交叉连接非常慢

使用 samba 的两台 Ubuntu PC 之间的交叉连接非常慢

我使用 Cat5e 交叉电缆在 PC 和笔记本电脑之间快速交换文件,但传输速率为 1.3 MB。使用 USB 2.0,我将文件放在外部硬盘上的速度快得多。这不可能是真的,对吧?两台 PC 都运行 12.04 64 位。

答案1

读到你的问题时我首先想到:为什么是 Samba?这是一种非常低效的文件传输方式。

一些解释:

CIFS 协议会“消耗”大量带宽。最糟糕的情况是有很多小文件。如果是这种情况,那么速度就是正常的。(小是指 10MB 以下)

如果是这种情况,原因如下:

这完全取决于您的传输层。您将以太网+CIFS 协议与 USB2+NTFS(或 FAT32)协议进行了比较。

首先,我们有两种不同的文件管理方式。第一种(CIFS)是文件级的,第二种(NTFS)是块级的。

从性能角度来看,这意味着 CIFS 性能较低,因为它必须使用某些块级管理器才能正常工作(如果您的 Ubuntu 是使用默认设置安装的,则它会通过 EXT4 运行)。

结论:在系统级别,CIFS 必须经过比 USB2 硬盘更多的层(这就是为什么在相同可用带宽的情况下,您永远不会获得相同的速度)

然后,关于“大量小文件效应”:正如我在开头所说的,CIFS 设计得很糟糕。对于每个文件或文件夹,CIFS 必须在两台 PC 之间进行 10 次以上的通信(具体情况因情况而异)。假设您有 5000 个 1KB 的文件,两台 PC 之间的延迟为 1ms。这意味着您的传输速率将持续:5000 个文件 * 1ms * 10 = 50000 ms 或 50 秒,这意味着您的速度为:5000 KB / 50 秒 = 500KB/秒

现在,在实际情况下,延迟小于 1ms,并且您使用的文件超过 1KB。更现实的方法是(对于 1MB 的文件):

5000 个文件 * 0.1ms * (10 + (2*1048576/1500)) = 704051 毫秒或 705 秒,因此 7MB/秒

1500 是您可以发送的默认最大数据量(MTU)。因此您的文件将被 1500 的倍数截断。

当然,这些都是理论,被认为是理想情况,没有考虑可用带宽(1Gbps、100Mbps 等)

在您的具体情况下:

你的结果非常慢。我希望你能通过开头给出的解释来解释它。

如果没有,您需要检查您的某个 ubuntu 的网络层是否存在一些问题。

首先检查两者的 ifconfig 结果(打开终端并输入 ifconfig)。这是我的:

eth0      Link encap:Ethernet  HWaddr 00:15:c5:5f:9e:be
          inet addr:192.168.0.14  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4392375 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3493073 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:4910280244 (4.9 GB)  TX bytes:757387998 (757.3 MB)
          Interrupt:16

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:629 errors:0 dropped:0 overruns:0 frame:0
          TX packets:629 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:39732 (39.7 KB)  TX bytes:39732 (39.7 KB)

我的默认接口是 eth0。您必须注意保持在 0 的“错误、丢弃、溢出和冲突”。

如果不是这种情况,并且你没有触及接口的 MTU(默认值为 1500),那么你可以

  • 电缆或一台或两台机器的接口出现问题。(主要是当错误或丢失不为 0 时)
  • 两台机器的接口配置都存在问题

对于第一个,请尝试更换电缆对于第二个,考虑到它是 eth0,并且连接的不超过 eth0,请输入以下命令:

  • 机器 A:sudo ifconfig eth0 172.16.10.1
  • 机器B:sudo ifconfig eth0 172.16.10.2

然后使用每台机器的 IP 而不是名称来访问您的共享(例如,当您在机器 A 上时为 172.16.10.2)

您还可以对 Samba 进行强化(调整 smb.conf 或启用巨型帧)。但我建议您不要这样做,因为它会隐藏而不是修复您的性能问题。(您可能会变得更快,但速度仍然比必须的慢)

可能还有很多其他事情。这些都是常规情况。如果需要更多信息,请通知我。

答案2

如果您的两台计算机都具有千兆以太网,则可以启用巨型帧。

以下是快速操作方法:

http://www.linuxplanet.org/blogs/?cat=5074

相关内容