Posted
Filed under Computer/Linux

NFS Version 4는 아래와 같이 export를 해주고 mount를 해주면 된다. 그러나 rsize와 wsize를 64K 이상으로 늘리고 싶다면 Physical Memory 가 충분히 있어야 한다. (4.5GB 이상의 Physical memory가 있어야만 rsize와 wsize가 1MB를 지정 가능하다.)

이것이 부족하면 아무리 해도 늘릴수가 없다.

[root@fedora11 ~]# cat /etc/exports
/nfsv4 *(rw,nohide,insecure,async,no_root_squash,fsid=0)
[root@fedora11 ~]# mount -t nfs4 -o proto=tcp,hard,rw,rsize=1048576,wsize=1048576 fedora11:/ /mnt

Physical Memory size : 386MB
[root@fedora11 ~]# cat /proc/mounts
fedora11:/ /mnt nfs4 rw,relatime,vers=4,rsize=65536,wsize=65536,namlen=255,hard,nointr,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.7.24,addr=192.168.7.24 0 0

Physical Memory size : 2.5GB
[root@fedora11 ~]# cat /proc/mounts
fedora11:/ /mnt nfs4 rw,relatime,vers=4,rsize=524288,wsize=524288,namlen=255,hard,nointr,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.7.24,addr=192.168.7.24 0 0

Physical Memory size : 4.5GB
fedora11:/ /mnt nfs4 rw,relatime,vers=4,rsize=1048576,wsize=1048576,namlen=255,hard,nointr,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.7.24,addr=192.168.7.24 0 0

물론 kernel도 영향이 있다. kernel은 2.6.2X 이상대를 써야만 할것이다. 이유는 nfsdaemon에 대해 block size를 지정해두었기 때문에 그 이상은 늘릴수가 없다. 예로 kernel 2.6.18-53.el5-x86_64을 살펴보자.

vi include/linux/nfsd/const.h
#define NFSSVC_MAXBLKSIZE   (32*1024)

이렇게 되어 있는것을 볼수가 있다. 이것은 NFS daemon이 32K 이상 지원을 하지 못하게 된것이다. 최대 32K까지 지원가능하다.

물론 이 kernel도 NFS Version 4를 지원하지만 이 값때문에 더이상 rsize나 wsize를 늘릴수가 없다.

vi include/linux/sunrpc/svc.h
#define RPCSVC_MAXPAYLOAD   (64*1024u)
이 것은 kernel RPC server에 대해 최대 payload size를 결정해준다. 이것은 nfsd의 최대 page수를 single READ operation으로 되돌때 이용되는 값으리 이것역시 늘려주야 한다.

그리고 svcsock에 대한 ./net/sunrpc/svcsock.c 파일에서 맞춰서 적당하니 patch를 해줘야 한다. 그런데 몇가지 찾아서 적당하니 맞춰봤다. 그러나 nfs daemon이 올라가면서 kernel panic이 떨어진다. patch가 잘못된것같다.

인터넷을 찾아보니 kernel 2.6.26이상부터인지 아무튼 이 이상부터는 NFS block size에대해 패치가 되어 있어 그냥 이용가능하다. 그러나 코드가 많이 바뀌었다.

쉽게 const.h 파일에서 다음처럼 바뀌어 갔다.
#define NFSSVC_MAXBLKSIZE   RPCSVC_MAXPAYLOAD
#define NFSSVC_MAXBLKSIZE_V2    (8*1024)
위에것은 NFS Version 3 이상 부터 rsize값을 메모리에 맞춰 늘릴수 있을것 같다. 그리고 아래 NFS version 2는 8K까지밖에 사용할수 없도록 막아두었다. 이것은 NFS Version 3는 TCP/UDP를 사용하고 NFS V4는 TCP를 사용하기 때문에 TCP를 사용할때는 rsize/wsize를 증가 시킬수가 있으나 UDP만 사용할때는 8K까지로 막기위해 한것 같다.

아래는 fedora11(2.6.29.4-167.fc11.x86_64) 에서 nfs version 3를 이용하여 rsize/wsize를 1048576(1MB)로 설정한것이다.
[root@fedora11 /]# cat /etc/exports
/nfsv4 *(rw,sync,no_root_squash)
[root@fedora11 /]# mount -t nfs -o vers=3,proto=tcp,hard,rw,rsize=1048576,wsize=1048576 fedora11:/nfsv4 /mnt
[root@fedora11 /]# cat /proc/mounts
fedora11:/nfsv4 /mnt nfs rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nointr,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.7.24,mountvers=3,mountproto=tcp,addr=192.168.7.24 0 0

2009/07/08 13:15 2009/07/08 13:15
[로그인][오픈아이디란?]