Chinaunix首页 | 论坛 | 博客
  • 博客访问: 915499
  • 博文数量: 189
  • 博客积分: 10041
  • 博客等级: 上将
  • 技术积分: 2321
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-01 10:11
个人简介

Linux ... ...

文章分类

全部博文(189)

文章存档

2014年(3)

2013年(1)

2010年(5)

2009年(34)

2008年(41)

2007年(105)

我的朋友

分类: LINUX

2007-02-08 23:05:19

1.设置块大小
mount
命令的risizewsize指定了server端和client端的传输的块大小。

mount -t nfs -o rsize=8192,wsize=8192,timeo=14,intr client:/partition /partition

如果未指定,系统根据nfs version来设置缺省的risizewsize大小。大多数情况是4K对于nfs v2,最大是8K,对于v3,通过serverkernel设置risizewsize的限制

vi /usr/src/linux2.4.22/include/linux/nfsd/const.h
修改常量: NFSSVC_MAXBLKSIZE

所有的2.4的的client都支持最大32K的传输块。系统缺省的块可能会太大或者太小,这主要取决于你的kernel和你的网卡,太大或者太小都有可能导致nfs速度很慢。
具体的可以使用BonnieBonnie++iozonebenchmark来测试不同risizewsizenfs的速度。当然,也可以使用dd来测试。

time dd if=/dev/zero of=/testfs/testfile bs=8k count=1024  测试nfs
time dd if=/testfs/testfile of=/dev/null bs=8k        测试nfs

测试时文件的大小至少是系统RAM的两倍,每次测试都使用umount mount/testfs进行挂载,通过比较不同的块大小,得到优化的块大小。


2.
网络传输包的大小
网络在包传输过程,对包要进行分组,过大或者过小都不能很好的利用网络的带宽,所以对网络要进行测试和调优。可以使用ping -s 2048 -f hostname进行ping,尝试不同的package size,这样可以看到包的丢失情况。同时,可以使用nfsstat -o net 测试nfs使用udp传输时丢包的多少。因为统计不能清零,所以要先运行此命令记住该值,然后可以再次运行统计。如果,经过上面的统计丢包很多。那么可以看看网络传输包的大小。使用下面的命令:

#tracepath node1/
端口号
#ifconfig eth0

比较网卡的mtu和刚刚的pmtu,使用#ifconfig eth0 mtu 16436设置网卡的mtu和测试的一致。 当然如果risizewsizemtu的值大,那么的话,server端的包传到client端就要进行重组,这是要消耗client端的cpu资源。此外,包重组可能导致网络的不可信和丢包,任何的丢包都会是的rpc请求重新传输,rpc请求的重传有会导致超时,严重降低nfs的性能。
可以通过查看

/proc/sys/net/ipv4/ipfrag_high_thresh
/proc/sys/net/ipv4/ipfrag_low_thresh

了解系统可以处理的包的数目,如果网络包到达了ipfrag_high_thresh,那么系统就会开始丢包,直到包的数目到达ipfrag_low_thresh

3.nfs
挂载的优化
timeo
:  如果超时,客户端等待的时间,以十分之一秒计算
retrans
: 超时尝试的次数。
bg
:    后台挂载,很有用
hard
:   如果server端没有响应,那么客户端一直尝试挂载
wsize
:  写块大小
rsize
:  读块大小
intr
:   可以中断不成功的挂载
noatime
: 不更新文件的inode访问时间,可以提高速度
async
:  异步读写

4.nfsd
的个数
缺省的系统在启动时,有8nfsd进程
#ps -efl|grep nfsd
通过查看/proc/net/rpc/nfsd文件的th行,第一个是nfsd的个数,后十个是线程是用的时间数,第二个到第四个值如果很大,那么就需要增加nfsd的个数。
具体如下:

#vi /etc/init.d/nfs

找到RPCNFSDCOUNT,修改该值,一般和client端数目一致。

#service nfs restart
#mount -a

5.nfsd
的队列长度
对于8nfsd进程,系统的nfsd队列长度是64k大小,如果是多于8个,就要相应的增加相应的队列大小,具体的在

/proc/sys/net/core/rwmem_default
/proc/sys/net/core/wwmem_default
/proc/sys/net/core/rmmem_max
/proc/sys/net/core/wmmem_max

队列的长度最好是每一个nfsd8k的大小。这样,server端就可以对client的请求作排队处理。如果要永久更改此值

#vi /etc/sysctl.conf
net.core.rmmem_default=
数目
net.core.wmmem_default=
数目
net.core.rmmem_max=
数目
net.core.wmmem_max=
数目
#service nfs restart

阅读(1334) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~