为什么 CIFS 挂载共享比 SMB 快?

Lin*_*ren 7 cifs smb caja ubuntu-mate 16.04

首先,这个问题并不是我真正的问题,而是“为什么会这样”。在 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。

ogn*_*011 2

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]
Run Code Online (Sandbox Code Playgroud)

请参阅:https ://bugs.debian.org/cgi-bin/bugreport.cgi?bug=798532

strict allocate = Yes
Run Code Online (Sandbox Code Playgroud)

请参阅:https ://lists.samba.org/archive/samba-technical/2014-July/101304.html

allocation roundup size = 4096
Run Code Online (Sandbox Code Playgroud)

允许在一个数据包中读取 65535 字节

读取原始数据 = 是

服务器签名会减慢速度。

server signing = No
Run Code Online (Sandbox Code Playgroud)

支持RAW写入。

write raw = Yes
Run Code Online (Sandbox Code Playgroud)

“严格锁定=自动”或“严格锁定=否”是可接受的。

strict locking = No
Run Code Online (Sandbox Code Playgroud)

套接字选项 = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072

“最小接收文件大小”将直接传递到内核,recvfile/splice 系统调用。

min receivefile size = 16384
Run Code Online (Sandbox Code Playgroud)

使用更高效的sendfile()系统调用

use sendfile = Yes
Run Code Online (Sandbox Code Playgroud)

Samba 必须使用异步文件支持 I/O 支持来构建

aio read size = 16384
aio write size = 16384
Run Code Online (Sandbox Code Playgroud)

另外,就我而言,我需要更改 nsswitch.conf 中名称查找的顺序。事实证明,这个配置中包含这样一行。

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4 
Run Code Online (Sandbox Code Playgroud)

只需在主机行中添加“wins”即可解决问题。

hosts:          files wins mdns4_minimal [NOTFOUND=return] dns mdns4
Run Code Online (Sandbox Code Playgroud)