10Gbit 이더넷으로 연결된 두 대의 컴퓨터가 있습니다. 그중 하나는 NFS 서버이고 다른 하나는 NF 클라이언트입니다.
TCP를 통한 네트워크 속도 테스트 iperf
는 양방향에서 ~ 9.8Gbit / s 처리량 을 보여 주므로 네트워크는 정상입니다.
NFS 서버의 디스크 성능 테스트 :
dd if=/dev/zero of=/mnt/test/rnd2 count=1000000
결과는 ~ 150 MBytes / s이므로 디스크 쓰기에 적합합니다.
서버 /etc/exports
는 :
/mnt/test 192.168.1.0/24(rw,no_root_squash,insecure,sync,no_subtree_check)
클라이언트는 /mnt/test
다음 옵션 을 사용하여이 공유를 로컬에 마운트합니다 .
node02:~ # mount | grep nfs
192.168.1.101:/mnt/test on /mnt/test type nfs4 (rw,relatime,sync,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.102,local_lock=none,addr=192.168.1.101)
NFS 공유에서 클라이언트 시스템에 큰 파일 (~ 5Gb)을 다운로드하려고하면 서버의 로컬 디스크 성능에 가까운 ~ 130-140 MBytes / s 성능을 얻으므로 만족합니다.
그러나 NFS 공유에 큰 파일을 업로드하려고하면 업로드가 ~ 1.5 Mbytes / s에서 시작하여 천천히 18-20 Mbytes / s까지 증가하고 증가가 멈 춥니 다. 때때로 업로드가 실제로 시작되기 전에 몇 분 동안 공유가 중단됩니다. 즉 호스트 간의 트래픽이 0에 가까워지고 실행 ls /mnt/test
하면 1-2 분 동안 반환되지 않습니다. 그런 다음 ls
명령이 돌아가고 초기 1.5Mbit / s 속도로 업로드가 시작됩니다.
업로드 속도가 최대 (18-20 Mbytes / s)에 도달 iptraf-ng
하면 네트워크 인터페이스에서 ~ 190 Mbit / s 트래픽을 표시하므로 네트워크는 서버의 HDD뿐만 아니라 병목 현상이 없습니다.
내가 시도한 것 :
1.
100Mbit 이더넷 NIC로만 연결된 세 번째 호스트에 NFS 서버를 설정하십시오. 결과는 비슷합니다. DL은 우수한 성능과 거의 100Mbit의 네트워크 사용률을 보여 주며 업로드는 초당 수백 킬로바이트보다 빠르지 않으므로 네트워크 사용률이 매우 낮습니다 (에 따라 2.5Mbit / s iptraf-ng
).
2. NFS 매개 변수를 조정하려고했습니다.
sync
또는async
noatime
아니
hard
rsize
그리고wsize
내가 8192까지 여러 단계를 줄일려고, 그래서 내 예제에서 최대이다
3. 클라이언트와 서버 시스템을 전환하려고했습니다 (이전 클라이언트에서 NFS 서버를 설정하거나 그 반대로). 또한 동일한 구성의 서버가 6 개 더 있으므로 다른 변형으로 서로 마운트하려고했습니다. 같은 결과입니다.
4. MTU = 9000, MTU = 9000 및 802.3ad 링크 집계, MTU = 1500을 사용한 링크 집계.
5. sysctl 조정 :
node01:~ # cat /etc/sysctl.conf
net.core.wmem_max=16777216
net.core.rmem_max=16777216
net.ipv4.tcp_rmem= 10240 873800 16777216
net.ipv4.tcp_wmem= 10240 873800 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.core.netdev_max_backlog = 5000
같은 결과입니다.
6. localhost에서 마운트하십시오.
node01:~ # cat /etc/exports
/mnt/test *(rw,no_root_squash,insecure,sync,no_subtree_check)
node01:~ # mount -t nfs -o sync localhost:/mnt/test /mnt/testmount/
다운로드에서이 : 그리고 여기 같은 결과를 얻을 /mnt/testmount/
업로드에, 빠르고 /mnt/testmount/
, 매우 느리게하지보다 빠른 22 메가 바이트 / s의 및 전송이 실제로 시작하기 전에 약간의 지연이있다. 네트워크 스택이 완벽하게 작동하고 문제가 NFS에 있다는 것을 의미합니까?
이 모든 것이 도움이되지 않았으며 결과는 기본 구성과 크게 다르지 않았습니다. echo 3 > /proc/sys/vm/drop_caches
모든 테스트 전에 실행되었습니다.
3 개의 모든 호스트에서 모든 NIC의 MTU는 1500이며 비표준 네트워크 조정은 수행되지 않습니다. 이더넷 스위치는 Dell MXL 10 / 40Gbe입니다.
OS는 CentOS 7입니다.
node01:/mnt/test # uname -a
Linux node01 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
어떤 설정이 누락 되었습니까? 중단없이 NFS 쓰기를 빠르게하는 방법은 무엇입니까?
Operation not permitted
를 사용하고 strace를 NFS 프로세스에 연결하려고 시도합니다.