![SMB/CIFS 为 netapp 启用大 rsize/wsize](https://linux22.com/image/105464/SMB%2FCIFS%20%E4%B8%BA%20netapp%20%E5%90%AF%E7%94%A8%E5%A4%A7%20rsize%2Fwsize.png)
我正在从 CentOS 7.2 客户端连接到 Netapp CIFS 文件共享。我们不得不从 NFS 进行交换,因为由于缺少 30% 的空间“钻孔”。
由于 CIFS,性能有所下降,我正在努力使其更快。
我正在尝试增加 rsize 和 wsize:
大小=参数
要使用大于 127K(原始 cifs 协议最大值)的 rsize,还要求服务器支持新的 Unix 功能标志(用于非常大的读取),某些较新的服务器(例如 Samba 3.0.26 或更高版本)会这样做。 rsize 的设置范围为最小值 2048 到最大值 130048(127K 或 CIFSMaxBufSize,以较小者为准)
wsize=字节
从 RHEL6.2 开始,默认值取决于客户端和服务器是否通过 POSIX 扩展协商大型写入。如果这样做,则默认值为 1M,允许的最大值为 16M。如果不这样做,则默认值为 65536,允许的最大值为 131007。请注意,该值只是协商的起点。客户端和服务器可以根据服务器的能力向下协商该大小。
我从 netapp 端启用了 Unix 扩展 (POSIX):
Y::*> vserver cifs options show -vserver X
Is UNIX Extensions Enabled: true
[-is-unix-extensions-enabled {true|false}] - 是否启用 UNIX 扩展(权限:高级) 当设置为 true 时,此可选参数将启用 CIFS 服务器中的 UNIX 扩展功能。如果设置为 false,则禁用 UNIX 扩展功能。该参数的默认值为 false。 UNIX 扩展允许通过 CIFS 协议显示 POSIX/UNIX 风格的安全性。
看起来要启用大型读/写,您需要将以下内容添加到/etc/samba/smb.conf
:(全局部分)
min receivefile size = 16384 (set to a non-zero value)
“最小接收文件大小 (G) 要启用 POSIX 大写入支持(SMB/CIFS 写入高达 16Mb),此选项必须为非零”
但是,当我在未指定大小选项的情况下挂载时,我可以看到 SMB 协商为rsize=65536,wsize=65536
而不是更大的 1M-16M 值
//IP/MOUNT on /opt/DIR type cifs (rw,relatime,vers=3.0,sec=ntlmssp,cache=none,username=BLAH,domain=DOMAIN,uid=0,noforceuid,gid=0,noforcegid,addr=IP,file_mode=0755,dir_mode=0755,nounix,serverino,mapposix,rsize=65536,wsize=65536,actimeo=1)
然后我也尝试将其设置为大于 65k 的值,但没有效果:
[X ~]# cat /etc/modprobe.d/cifs.conf
options cifs CIFSMaxBufSize=130048
我缺少什么?我是否没有启用正确的 netapp Unix 标志?我是否需要在 CentOS 上的某处启用大缓冲区 CIFS 标志?我在 2 层之间有 9k 巨型帧,并且客户端有 RAM (32GB) 负载,所以我应该很好地提高大小性能。
答案1
默认情况下,cifs 安装使用协议 1.0,该协议除了过时之外,效率也很低,并且由于多种原因不能很好地从睡眠中恢复。
根据您的服务器技术,您vers=2.1
至少可以使用 或vers=3.0
。
请咨询供应商支持的 CIFS 协议或尝试vers=3.0
使用mount
检查协商的版本。
请查看相关问题CIFS 随机丢失与 Windows 共享的连接更多细节。