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?
sumber
Operation not permitted
mencoba melampirkan strace ke proses NFS.Jawaban:
Anda menggunakan opsi sinkronisasi dalam pernyataan ekspor Anda. Ini berarti bahwa server hanya mengkonfirmasi operasi tulis setelah mereka benar-benar ditulis ke disk. Mengingat Anda memiliki disk pemintalan (yaitu tidak ada SSD), ini membutuhkan rata-rata setidaknya 1/2 putaran operasi disk per penulisan, yang merupakan penyebab perlambatan.
Menggunakan pengaturan async, server segera mengakui operasi tulis kepada klien ketika diproses tetapi belum ditulis ke disk. Ini sedikit lebih tidak dapat diandalkan, misalnya, dalam kasus kegagalan daya ketika klien menerima ack untuk operasi yang tidak terjadi. Namun, ini memberikan peningkatan besar dalam kinerja penulisan.
(edit) Saya baru saja melihat bahwa Anda sudah menguji opsi async vs sync. Namun, saya hampir yakin bahwa ini adalah penyebab masalah penurunan kinerja Anda - Saya pernah memiliki indikasi yang persis sama dengan pengaturan idencitcal. Mungkin Anda mengujinya lagi. Apakah Anda memberikan opsi async pada pernyataan ekspor server DAN dalam operasi mount pada klien pada saat yang sama?
sumber
Ini bisa menjadi masalah yang terkait dengan ukuran paket dan latensi. Coba yang berikut ini:
Laporan tersebut mengembalikan hasil Anda.
sumber
net.core.*
dannet.ipv4.*
sysctl, tapi mungkin saya membuat eksperimen terlalu sedikit Oke, saya akan melakukan beberapa tes lagi dan akan melaporkan.http://veerapen.blogspot.com/2011/09/tuning-redhat-enterprise-linux-rhel-54.html
Mengkonfigurasi scheduler Linux pada sistem dengan RAID perangkat keras dan mengubah default dari [cfq] ke [noop] memberikan peningkatan I / O.
Gunakan perintah nfsstat, untuk menghitung persentase baca / tulis. Atur rasio cache pengontrol RAID agar sesuai.
Untuk beban kerja yang berat, Anda perlu menambah jumlah utas server NFS.
Konfigurasikan utas nfs untuk menulis tanpa penundaan ke disk menggunakan opsi no_delay.
Beri tahu kernel Linux untuk menyiram secepat mungkin agar penulisan disimpan sekecil mungkin. Dalam kernel Linux, frekuensi penulisan kembali halaman yang kotor dapat dikontrol oleh dua parameter.
Untuk penulisan disk yang lebih cepat, gunakan data sistem file = opsi jurnal dan cegah pembaruan untuk mengajukan waktu akses yang dengan sendirinya menghasilkan data tambahan yang ditulis ke disk. Mode ini adalah yang tercepat ketika data perlu dibaca dari dan ditulis ke disk pada saat yang sama di mana ia mengungguli semua mode lainnya
sumber