Saya memiliki dua mesin yang terhubung dengan 10Gbit Ethernet. Biarkan salah satu dari mereka menjadi server NFS dan yang lain akan menjadi klien NF.
Menguji kecepatan jaringan melalui TCP dengan iperf
menunjukkan ~ 9,8 Gbit / s throughput di kedua arah, sehingga jaringan OK.
Menguji kinerja disk server NFS:
dd if=/dev/zero of=/mnt/test/rnd2 count=1000000
Hasilnya ~ 150 MBytes / s, jadi disk berfungsi dengan baik untuk menulis.
Server /etc/exports
adalah:
/mnt/test 192.168.1.0/24(rw,no_root_squash,insecure,sync,no_subtree_check)
Klien me-mount bagian ini ke lokal /mnt/test
dengan opsi berikut:
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)
Jika saya mencoba mengunduh file besar (~ 5Gb) pada mesin klien dari share NFS, saya mendapatkan kinerja ~ 130-140 MBytes / s yang dekat dengan kinerja disk lokal server, jadi memuaskan.
Tetapi ketika saya mencoba mengunggah file besar ke share NFS, upload dimulai pada ~ 1,5 Mbytes / s, perlahan-lahan meningkat hingga 18-20 Mbytes / s dan berhenti meningkat. Terkadang bagian "hang" selama beberapa menit sebelum unggahan benar-benar dimulai, yaitu lalu lintas antara host menjadi mendekati nol dan jika saya mengeksekusi ls /mnt/test
, itu tidak kembali selama satu atau dua menit. Kemudian ls
perintah kembali dan mengunggah dimulai dengan kecepatan awal 1,5Mbit / s.
Ketika kecepatan unggah mencapai maksimum (18-20 Mbytes / s), saya menjalankan iptraf-ng
dan itu menunjukkan ~ 190 Mbit / s lalu lintas di antarmuka jaringan, jadi jaringan bukanlah hambatan di sini, serta HDD server.
Apa yang saya coba:
1.
Atur server NFS pada host ketiga yang hanya terhubung dengan NIC Ethernet 100Mbit. Hasilnya analog: DL menunjukkan kinerja yang baik dan pemanfaatan jaringan 100Mbit hampir penuh, unggahan tidak berkinerja lebih cepat dari ratusan kilobyte per detik, menjadikan pemanfaatan jaringan sangat rendah (2,5 Mbit / dtk menurut iptraf-ng
).
2. Saya mencoba menyetel beberapa parameter NFS:
sync
atauasync
noatime
tidak
hard
rsize
danwsize
maksimal dalam contoh saya, jadi saya mencoba menguranginya dalam beberapa langkah ke 8192
3. Saya mencoba untuk beralih mesin klien dan server (mengatur server NFS pada mantan klien dan sebaliknya). Selain itu, ada enam server lagi dengan konfigurasi yang sama, jadi saya mencoba untuk me-mount mereka satu sama lain dalam variasi yang berbeda. Hasil yang sama
4. MTU = 9000, MTU = 9000 dan 802.3ad agregasi tautan, agregasi tautan dengan MTU = 1500.
5. sysctl tuning:
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
Hasil yang sama
6. Pasang dari 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/
Dan di sini saya mendapatkan hasil yang sama: unduh dari /mnt/testmount/
cepat, unggah menjadi /mnt/testmount/
sangat lambat, tidak lebih cepat dari 22 MB / s dan ada sedikit penundaan sebelum transfer benar-benar dimulai. Apakah ini berarti bahwa tumpukan jaringan berfungsi dengan sempurna dan masalahnya ada di NFS?
Semua ini tidak membantu, hasilnya tidak berbeda secara signifikan dari konfigurasi default. echo 3 > /proc/sys/vm/drop_caches
dieksekusi sebelum semua tes.
MTU semua NICS di semua 3 host adalah 1500, tidak ada penyetelan jaringan non-standar yang dilakukan. Switch Ethernet adalah Dell MXL 10 / 40Gbe.
OS adalah 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
Pengaturan apa yang saya lewatkan? Bagaimana membuat NFS menulis dengan cepat dan tanpa hang?
Operation not permitted
mencoba melampirkan strace ke proses NFS.