首先,这个问题其实不是我的问题,而是“为什么会这样”。在 Windows 世界呆了几年之后,我试图回归 Linux,但我已经失去了太多……所以,我要重新学习。:)
我的网络中有一台 Windows 10 x64 机器充当文件服务器。我从 Ubuntu Mate 16.04 访问共享。主文件浏览器是 Caja。
以下是精彩的部分: 当我浏览网络上的网络共享并开始复制文件时,最大速度约为 600 Mbit。但是当我使用 CIFS 在 Fstab 中永久安装共享时(根据https://help.ubuntu.com/community/MountWindowsSharesPermanently) 我可以利用我的全部链接速度 (1 Gbit)。通过终端使用 smbclient 时,我也可以利用全部链接速度。
有人能向我解释为什么 Caja(以及据我所知的 Nautilus)会出现这种情况吗?或者给我一些链接,让我可以阅读更多相关信息?CIFS 和 SMB 不是基本上是一回事吗?
谢谢!
更新:我正在使用 Intel I217-V (rev 04) NIC。
答案1
SMB 是 IBM 发明的服务器消息块,用于在 LAN 网络上写入文件。CIFS 是通用 Internet 文件系统。CIFS 是 Microsoft 对 SMB 的特定实现。
1.) 如今,SMB 的 CIFS 实现很少使用。大多数现代存储系统不再使用 CIFS,而是使用 SMB 2 或 SMB 3。在 Windows 世界中,自 Windows Vista(2006 年)以来,SMB 2 一直是标准,而 SMB 3 是 Windows 8 和 Windows Server 2012 的一部分。
2.) SMB 2 和 SMB 3 是对 CIFS 实施的大规模升级。
现在要记住的是 (TCP 窗口大小 * 8 位 / RTT 以毫秒为单位) = 最大 TCP 吞吐量 (以 bps 为单位)。虽然您可能拥有千兆网络,但单个 TCP 流不太可能达到如此高的速度。
现在优化 SMB 配置:
[global]
看:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=798532
strict allocate = Yes
看:https://lists.samba.org/archive/samba-technical/2014-July/101304.html
allocation roundup size = 4096
允许在一个数据包中读取 65535 个字节
读取原始数据 = 是
服务器签名会使速度变慢。
server signing = No
支持RAW写入。
write raw = Yes
“严格锁定 = 自动”或“严格锁定 = 否”是可以接受的。
strict locking = No
套接字选项 = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
“min acceptfile size” 将直接传递给内核,recvfile/splice 系统调用。
min receivefile size = 16384
使用更高效的 sendfile() 系统调用
use sendfile = Yes
Samba 必须支持异步文件 I/O
aio read size = 16384
aio write size = 16384
另外,在我的例子中,我需要更改 nsswitch.conf 中的名称查找顺序。事实证明,此配置包含如下一行。
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
只需在主机行中添加“wins”即可解决问题。
hosts: files wins mdns4_minimal [NOTFOUND=return] dns mdns4