为什么 Samba SMB 比我的 LAN 上的 NAS 上的 HTTP/NFS/FTP 传输慢?

为什么 Samba SMB 比我的 LAN 上的 NAS 上的 HTTP/NFS/FTP 传输慢?

我想设置一个 NAS,最近我用运行 Raspbian“Jessie” 的 Raspberry Pi 2(四核 ARM Cortex-A7、1GB RAM、32GB microSD)设置了它:

  • 我有一台笔记本电脑 - HP Pavilion G6 - 运行 Ubuntu 14.04 并使用 802.11b/g/n。
  • 我有一个外部 USB 2.0 NTFS 硬盘连接到 Raspberry Pi 2,使用 Samba 和 Apache,以 100Mbps 的速度连接到我的无线路由器的 LAN。
  • 当我尝试使用 Samba SMB 从 Raspberry Pi 2 传输文件时,传输速率低于 1Mib/s。
  • 当我使用 HTTP 从 Raspberry Pi 2 传输文件时,我得到的典型传输速率约为 3-4Mib/s [更好,但仍然很慢]。
  • 当我使用 FTP 从 Raspberry Pi 2 传输文件时,我得到的典型传输速率约为 2-4Mib/s [更好,但不如 HTTP]。

为什么使用 Samba SMB 传输文件会传输慢点比使用 HTTP 传输的相同文件快 3-4 倍吗?

我不期望我的本地网络能达到 10-12Mib/s(尽管接近这个速度就很好了),因为网络速度有 100Mbs 的限制、连接是 USB 2.0 以及 Wi-Fi 限制,但至少它应该比有所有这些瓶颈以及其他外部因素的互联网要好。

可能是 Samba 配置问题吗?

测试结果[1.5Gb文件传输速率]:

  • USB 3.0:70-80MiB/秒

    仅 USB。

    USB3.0外置硬盘连接到HP Pavilion G6笔记本电脑的USB3.0端口。

    文件使用 Dolphin 文件管理器传输。

    来源:USB3.0硬盘

    目的地:HP Pavilion G6 笔记本电脑

  • USB 2.0:20-30MiB/秒

    仅 USB。

    USB3.0外置硬盘连接到Raspberry Pi的USB2.0端口。

    使用 pv 测试文件raspberry~$ pv source > destination

  • 以太网局域网:8-9MiB/秒

    有线。

    USB3.0外置硬盘连接到Raspberry Pi的USB2.0端口。

    HP Pavilion G6 笔记本电脑通过以太网 LAN 连接到网络。

    使用 samba 传输文件smb://

    来源:USB3.0硬盘

    目的地:HP Pavilion G6 笔记本电脑

  • 網絡文件:2-3MiB/秒

    无线上网。

  • HTTP Wi-Fi LAN 速度:3-4MiB/秒

    无线上网。

    USB3.0外置硬盘连接到Raspberry Pi的USB2.0端口。

    HP Pavilion G6 笔记本电脑通过 802.11b/g/n Wi-Fi 连接到网络。

    apache 网络服务器上的文件http://

    来源:USB3.0硬盘

    目的地:HP Pavilion G6 笔记本电脑

  • NFS Wi-Fi LAN 速度:3-4MiB/秒

    无线上网。

    USB3.0外置硬盘连接到Raspberry Pi的USB2.0端口。

    HP Pavilion G6 笔记本电脑通过 802.11b/g/n Wi-Fi 连接到网络。

    文件使用 Dolphin 文件管理器传输。

    来源:USB3.0硬盘

    目的地:HP Pavilion G6 笔记本电脑

  • FTP Wi-Fi LAN 速度:2-4MiB/秒

    无线上网。

    USB3.0外置硬盘连接到Raspberry Pi的USB2.0端口。

    HP Pavilion G6 笔记本电脑通过 802.11b/g/n Wi-Fi 连接到网络。

    vsftp 服务器上的文件ftp://

    来源:USB3.0硬盘

    目的地:HP Pavilion G6 笔记本电脑

  • SMB Wi-Fi LAN 速度:< 900KiB/秒

    无线上网。

    USB3.0外置硬盘连接到Raspberry Pi的USB2.0端口。

    HP Pavilion G6 笔记本电脑通过 802.11b/g/n Wi-Fi 连接到网络。

    使用 samba 传输文件smb://

    来源:USB3.0硬盘

    目的地:HP Pavilion G6 笔记本电脑

我该如何改善这种情况?

这是我的笔记本电脑上的输出iwconfig

wlan0     IEEE 802.11bgn  ESSID:"Irk"  
          Mode:Managed  Frequency:2.412 GHz  Access Point: 34:31:C4:02:46:2D   
          Bit Rate=65 Mb/s   Tx-Power=20 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=63/70  Signal level=-47 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:1369  Invalid misc:12350   Missed beacon:0

以下是有关我的 Raspberry Pi 网络连接的信息dmesg | grep eth0

smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1

答案1

TLDR:SMB 和 AFP 具有更强大的加密功能,实际上不仅仅是向您显示文件索引。FTP 和 NFS 只是为您提供列表并完成工作。如另一条评论中所述,您的 RPI 是仅限于移动所有 I/O 数据的 USB 总线的硬件。但 2-4Mbps 是垃圾,所以请检查您的客户端并更新所有软件,除非您的 RPI 或 comp 有缺陷,否则 10-18Mbp​​s 听起来更合法。

似乎无论使用什么硬件,Samba 都很慢。AFP(Apple File Protocol)也好不到哪里去,自 2008 年以来,我一直在使用 Windows 和 Mac 来处理 AFP 和 SMB,很明显,我发现 Linux 更自由,尤其是因为它们确实改进了笔记本电脑的 wifi 功能,而且经济正在让 CHIP 和 RPI 等东西不受欢迎。但关键是,SMB、AFP、NFS 和 FTP 都有其缺点。如果删除一些安全功能,SMB 可以得到改进,AFP 也是如此。FTP 之所以能得到改进,是因为它只是最基本的传输,没有加密握手。NFS 锁定文件,与 FTP 类似,它不是为“打开”(从主机复制到内存)和编辑文件而设计的,不像 SMB 和 AFP,它们的设计就像您正在浏览主机一样。

答案2

Pi 上使用的 SoC 设备没有内置对以太网的支持,因此 Pi 上的以太网功能由 USB 以太网芯片提供,与您可能连接到它的任何其他 USB 外围设备(包括任何 USB 闪存驱动器)共享相同的 USB 总线。这可能是您看到糟糕性能的主要原因。

解决方案?遗憾的是没有,这是硬件限制。这与硬盘速度或网络设置无关,Pi 上的 USB 总线在磁盘和以太网同时运行时被推到了极限。

您可能想在 NAS 设置上多投资一点,并购买一台确实有内置以太网的单板计算机。目前有多个平台支持千兆以太网。

答案3

根据问题提供的详细信息,以下是一些可能影响本地传输速率的因素:

  1. Raspberry Pi 上的资源
  2. 通过 USB 连接的硬盘的读取速度(读取速度通常应该很高,但不确定驱动器是否有故障)
  3. Raspberry Pi 上的 USB 驱动程序
  4. 将硬盘连接到 Raspberry Pi 的 USB 连接器/外部外壳

可以采取以下措施来隔离问题:

  1. 将“USB 驱动器”直接连接到您正在使用的工作站并检查传输速度
  2. 在 Raspberry Pi 上使用有线连接(如果尚未这样设置)
  3. 将文件从“USB 驱动器”复制到 Raspberry Pi 上的其他存储设备并检查传输速度
  4. 从 Raspberry Pi 复制文件(从 eMMC 而不是 USB)
  5. 在 Raspberry Pi 上创建一个 Web 服务器和/或 FTP 服务器,并在工作站处于无线和有线连接状态时通过 http 和 ftp 将文件传输到工作站(4 种不同的场景 - 有线笔记本电脑使用 http、无线笔记本电脑使用 http、有线笔记本电脑使用 FTP、无线笔记本电脑使用 FTP)
  6. 将“USB 驱动器”连接到网络上除 Raspberry Pi 之外的其他工作站并检查传输速度。尝试使用有线和无线连接。

假设:

  • 没有其他设备从已设置的“NAS”读取,这也会影响传输速率。
  • 您没有同时使用有线和无线连接来连接到您的网络。如果是这样,那么互联网流量可能会使用一个接口,而本地流量则使用另一个接口,这也可能会影响传输速度。

答案4

简而言之:NFS、FTP 和 HTTP 是比早期版本的 SMB 更精简的协议。尽管我一直反对使用 FTP 进行文件传输,因为它可能比 SMB 更精简,但它缺乏许多使远程存储安全的功能。

SMB 的后续版本确实使其与 NFS 更加一致,但听起来您可能正在运行相当旧的 Samba 3.x(尽管设置起来容易得多)。

在我们讨论吞吐量时,我还建议不要在 Raspberry Pi 上运行 NTFS,因为 Linux 的 NTFS 驱动程序是 ntfs3g,它在 FUSE 中运行。对于那些不了解 FUSE 的人来说,这是一种编写在用户空间中运行的文件系统驱动程序的方法,而不是通过 FUSE 包装器,而开发人员不必编写内核模块。这意味着您可以更快、更安全、以更有趣的方式编写驱动程序(例如,我编写了 FUSE 驱动程序,将文本文件的内容转换为虚拟文件系统),但这是有代价的,因为您需要不断在内核和用户空间之间交换数据。这在 PC 上不太明显 - 而且 ntfs3g 编写得也很好,这很有帮助 - 然而在像 Raspberry Pi 这样占用空间较小的设备上,额外的 CPU 和内存开销会影响您的性能,而不是从 Linux 原生文件系统(如 ext3/4 或 XFS)流式传输数据。

相关内容