免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5282 | 回复: 14
打印 上一主题 下一主题

访问Solaris NFS share,读正常,写操作特别慢。 [复制链接]

论坛徽章:
0
跳转到指定楼层
[收藏(0)] [报告]
发表于 2009-02-20 16:18 |只看该作者 |正序浏览
20可用积分
我在我的Solaris上做了一个NFS share,之后在windows 2003上安装了nfs client. 测试的时候发现,从这个share中读文件很正常,25秒就可以拷贝一个443M大小的文件。但是往里面写的时候发现,即使是一个只有12M的文件,也需要2个多小时。而且我在server端用nfsstat来检查运行信息,一切正常,没有大量需要重新发送的包。

谁能给点思路,真的是很头痛!
谢谢!

论坛徽章:
0
14 [报告]
发表于 2009-02-25 09:41 |只看该作者
来晚了

使用NFS时,rsize和wsize的大小对性能的影响非常大。因此经常需要对其进行调整,在一些特定的场合默认的设置不见得是最好,但不管怎么设置,都应该是1024byte的倍数。

可以通过dd来进行测试,然后选择表现最好的参数。按理说都可以到23k,LZ难道你的NFS server版本很低吗?

示例NFS客户端的参数配置

nfsvers=3,wsize=32768,rsize=32768,rw,bg,intr,hard,tcp

参数                        意义
nfsvers=3                   NFSv3,默认是 NFSv2,而 NFSv4 比较复杂,不是所有内核都支持。
wsize=32768             设置 32K 的写缓存,对于 UDP 方式来说,8K 是推荐值。
rsize=32768               设置 32K 的读缓存,对于 TCP 方式来说,32K 是推荐值。
rw                              读写方式,根据权限需要有时也设置为 ro(read only)
bg                              如果安装失败(服务器没有响应), 在后台一直尝试,继续发其他的安装请求
hard                            如果服务器当机,让试图访问它的操作被阻塞,直到服务器恢复为止
intr                            允许用户中断被阻塞的操作(并且让它们返回一条错误消息)
tcp                             选择通过 TCP 来传输,默认的 UDP 不好。


测试NFS写操作:

假设256M的数据,分别按4k, 8k, 16k的BlockSize大小进行测试:

time dd if=/dev/zero of=/home/x/testfile bs=4k count=65536
time dd if=/dev/zero of=/home/x/testfile bs=8k count=32768
time dd if=/dev/zero of=/home/x/testfile bs=16k count=16384

多测试几次,就可以根据时间来判断最佳的wsize大小。

测试NFS读操作:

假设256M的数据,分别按4k, 8k, 16k的BlockSize大小进行测试:

time dd if=/home/x/testfile of=/dev/null bs=4k
time dd if=/home/x/testfile of=/dev/null bs=8k
time dd if=/home/x/testfile of=/dev/null bs=16k

多测试几次,就可以根据时间来判断最佳的rsize大小。


LZ可参考这里:
http://www.ixdba.net/article/2b/155$4.html
http://hi.baidu.com/thinkinginla ... dcfcfc1a4cff8a.html
http://www.cnitblog.com/tarius.wu/articles/326.html
http://nfs.sourceforge.net/nfs-howto/

[ 本帖最后由 yuhuohu 于 2009-2-25 11:46 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2009-02-24 14:49 |只看该作者
重新测试了一下,传输2个文件,一个10M,一个33M,在SFU client端分别将wsize设置成了1k,2k,4k,8k,16k,32k(在windows的SFU客户端只能设置这么几个值),之后用ethereal分析packet.

发现2K是传输最快的,大概在9s作用,结果如下。
1k : 14.84s
2k : 9.53s
4k : 10.78
8k : 32.09
16k:more than 15 mins
32k:more than 15 mins

其中,在16k和32k的结果中都能发现很多的NFS write call被重新发送了,而且每次重新发送都浪费了很长时间。

现在的问题是除了这样一个一个尝试,有没有别的办法可以找到一个合理的wsize呢,应该根据什么来确定这些参数呢?

论坛徽章:
0
12 [报告]
发表于 2009-02-23 08:20 |只看该作者

回复 #11 zyg0892 的帖子

感觉有些道理的。

可是我也不太清楚,为什么将wsize改为1K之后,速度看起来就正常了

论坛徽章:
0
11 [报告]
发表于 2009-02-23 08:19 |只看该作者
server端是默认设置,应该是同步
不清楚SFU端,没找到相关设置,可是感觉默认的应该也是同步写。

谢谢楼上的回复!

论坛徽章:
0
10 [报告]
发表于 2009-02-22 09:02 |只看该作者
你好,你有考虑raid 没有,不同raid 写的速度不一样,我solaris 是个新手,只是给你提供个思考点,请高手指导下我.

论坛徽章:
0
9 [报告]
发表于 2009-02-21 09:51 |只看该作者
以前遇到过一次,server和client一边是同步一边是异步,导致传输速度超慢。

论坛徽章:
0
8 [报告]
发表于 2009-02-21 09:30 |只看该作者
谢谢回复!·

SFU一直工作正常,作为NFS server没有任何问题。

我把wsize改成了1K,问题好像已经解决了。但是不清楚这个wsize为什么会导致这样的问题。

论坛徽章:
0
7 [报告]
发表于 2009-02-20 17:34 |只看该作者
通过其他的Unix服务器或者工作站,mount你的Solaris共享资源以后读写,确认nfs服务器端是否有问题

有可能是windows的NFSClient的问题,你是在windows安装的SFU3.5吗?SFU很好用

论坛徽章:
0
6 [报告]
发表于 2009-02-20 17:25 |只看该作者
还有个问题,通过不停的实验,拷贝不同大小的文件之后,发现,如果是很多个小文件,就是每个在几十k左右的文件的时候,反映比较正常。但如果是大点的文件,1.5M左右,就变得很慢。虽然文件总的大小是差不多一样的。

论坛徽章:
0
5 [报告]
发表于 2009-02-20 17:11 |只看该作者
看不出来有什么问题,所有的操作都是成功的。

该怎么去分析数据包呢?
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP