[转载]linux中cifs传输时出错的处理
2013-06-04 14:38
246 查看
linux中使用cifs模块挂载windows共享目录,传输文件时可能会报错:
CIFS VFS: No response xxx (大概就是这个)我遇到的这个错误的原因是通过挂载目录传输文件时,每次传输块太大,超过了cifs的缓冲区大小,造成cifs传输延迟。cifs读的缓冲区大小最大为16K,写的缓冲区大小最大为56K(可用"modinfo cifs"这句命令查看参数取值范围).只要调小你程序的传输块大小即可,如下(摘自cifs官方文档Performance Considerations一节)。1) size of file write (wsize). The Linux CIFS client usually sends 56K writes (14 pages) and is
limited to 56K maximum unless mounted forcedirectio.
2) size of file read (rsize). The Linux CIFS client usually sends 16K reads (4 pages). Since CIFS
large network buffers are about 16K in size by default, increasing the rsize would have little
effect unless the setting of module load parameter CIFSMaxBufSize (via insmod) also is
increased.
CIFS VFS: No response xxx (大概就是这个)我遇到的这个错误的原因是通过挂载目录传输文件时,每次传输块太大,超过了cifs的缓冲区大小,造成cifs传输延迟。cifs读的缓冲区大小最大为16K,写的缓冲区大小最大为56K(可用"modinfo cifs"这句命令查看参数取值范围).只要调小你程序的传输块大小即可,如下(摘自cifs官方文档Performance Considerations一节)。1) size of file write (wsize). The Linux CIFS client usually sends 56K writes (14 pages) and is
limited to 56K maximum unless mounted forcedirectio.
2) size of file read (rsize). The Linux CIFS client usually sends 16K reads (4 pages). Since CIFS
large network buffers are about 16K in size by default, increasing the rsize would have little
effect unless the setting of module load parameter CIFSMaxBufSize (via insmod) also is
increased.
cifs传输速度的优化
缓冲区调小后,的确是不会报错了,但传输速度却太蜗牛了。根据cifs官方文档看,可用调相关参数优化速度(通过modprob.conf这个配置文件加载比较简单),大家可以都试一下。http://pserver.samba.org/samba/ftp/cifs-cvs/linux-cifs-client-guide.pdf网上找了很久相关信息,最后确定了forcedirectio这个选项可以优化(大家可以看看本文上面的黑底英文,“除非用forcedirectio挂载”)。我找到linux源码里的fs/cifs下面的readme,看到里面的参数direct像是forcedirectio的参数,但我加了后传输也没有提高。用"mount.cifs --help"查看选项后才发现direct不是准确的参数,应该是directio 。附上加参数挂载cifs的格式:mount -t cifs //192.168.1.1/source 192.168.1.2/destination -o username=myusername,password=mypassword,directio使用directio参数挂载目录后,传输速度果然提升不少,速度和windows之间对传文件的速度差不多(我是用大小为32K的传输块测试的,能达到15M/s)。如果要测试的话可以用"dd if=srcfile out=destfile bs=32K"测试,其中bs是在指定传输块大小,我觉得设成32K时的传输速度已经很好了。哦,对了,记得在读写挂载目录文件时使用read/write函数,而不要使用fread/fwrite函数,使用前两者比后两者传输速度快,这跟程序有关了。相关文章推荐
- Linux kernel make menuconfig 时出错处理方法
- linux 出错处理
- linux C出错处理
- Linux 多线程应用中如何编写安全的信号处理函数(转载IBM)
- 出错也不怕―Linux系统紧急情况处理方法
- 中断的认识(转载)linux中断处理原理分析
- Linux 常见出错处理
- 关于linux下挂载报错:CIFS VFS: No username specified的问题处理
- 【转载】Linux中断处理学习笔记
- [Linux] 刚学习shell,碰到问题.执行时总出错:unexpected operator(转载)
- linux下《UNIX环境高级编程》(apue2)源码编译出错的处理方法
- Linux编程—出错处理之assert,abort,exit,atexit,strerror
- linux下《UNIX环境高级编程》(apue2)源码编译出错的处理方法
- [转载]linux 死机了的问题的处理
- dpkg:处理 xxx (--configure)时出错解决办法(转载)
- 转载:Linux系统下6个常见紧急情况的应急处理方法
- Linux 守护进程出错处理
- Linux C语言错误处理(转载)http://www.cnblogs.com/nliao/archive/2010/09/09/1822647.html
- linux字符处理命令 sort(部分转载)
- dpkg:处理 xxx (--configure)时出错解决办法(转载)