NFS kinerja kesengsaraan di Debian

9

Saya memiliki kinerja yang sangat tidak konsisten dengan NFS antara dua mesin wheezy, dan saya sepertinya tidak bisa memperbaikinya.

Mendirikan:

Mesin 1 'video1': Dual 5506 w / 12GB ram, XFS pada 8x3TB RAID6 diekspor sebagai 'video1' dari '/ mnt / storage'

Mesin 2 'storage1': Phenom X2 @ 3.2Ghtz w / 8GB ram, ZFS pada 5x2TB diekspor sebagai 'storage1' dari / mnt / storage1-storage

Kinerja penulisan lokal:

mackek2@video1:/mnt/storage/testing$ dd if=/dev/zero of=localwrite10GB bs=5000k count=2000
2000+0 records in
2000+0 records out
10240000000 bytes (10 GB) copied, 16.7657 s, 611 MB/s

Kinerja baca lokal:

Keduanya terhubung ke sakelar gigabit HP yang sama, dan iperf memberikan rock solid 940mbps dua arah.

Masalah saya adalah ketika saya menulis ke ekspor video1 dari storage1, kinerja ada di mana-mana. Tampaknya untuk beberapa (5-7) pertunjukan transfer file pertama (saya berharap untuk bergerak sekitar 30-120GB file AVCHD atau MJPEG secepat mungkin), kinerja berjalan dari 900mbps, turun ke 150-180mbps, sehingga kali selambat 30mbps. Jika saya me-restart server kernel NFS, kinerja mengambil kembali untuk beberapa pertunjukan.

mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=remoteWrite10GB count=2000 bs=5000K
2000+0 records in
2000+0 records out
10240000000 bytes (10 GB) copied, 223.794 s, 45.8 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=remoteWrite10GBTest2 count=2000 bs=5000K
2000+0 records in
2000+0 records out
10240000000 bytes (10 GB) copied, 198.462 s, 51.6 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=bigfile776 count=7000 bs=2000K
7000+0 records in
7000+0 records out
14336000000 bytes (14 GB) copied, 683.78 s, 21.0 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=remoteWrite15GB count=3000 bs=5000K
3000+0 records in
3000+0 records out
15360000000 bytes (15 GB) copied, 521.834 s, 29.4 MB/s

Ketika segalanya berjalan cepat, nfsiostat pada klien memberikan RTT rata-rata beberapa ms, tetapi ia menembak hingga lebih dari 1,5 detik RTT segera setelah kinerja turun. Selain itu, kedalaman antrian CPU melonjak hingga lebih dari 8 saat penulisan sedang berlangsung.

Sekarang, ketika membaca dari ekspor yang sama, saya mendapatkan 890Mbps yang indah memberi atau mengambil beberapa mbps untuk keseluruhan pembacaan.

mackek2@storage1:/mnt/video1/testing$ dd if=remoteWrite10GBTest2 of=/dev/null
20000000+0 records in
20000000+0 records out
10240000000 bytes (10 GB) copied, 89.82 s, 114 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=remoteWrite15GB of=/dev/null
30000000+0 records in
30000000+0 records out
15360000000 bytes (15 GB) copied, 138.94 s, 111 MB/s

Hal yang sama terjadi sebaliknya dengan storage1 sebagai server NFS. Antrian CPU melonjak, kecepatan turun menjadi omong kosong, dan saya mencabut rambut saya.

Saya telah mencoba meningkatkan jumlah daemon NFS menjadi sebanyak 64, dan masih menyembur keluar setelah beberapa pertunjukan.

Kyle M
sumber
... opsi async pada ekspor memperbaikinya. Sekarang untuk melihat apakah saya bisa mengeluarkan beberapa mbps lagi dengan frame jumbo.
Kyle M
1
Silakan posting ini sebagai jawaban dan terima ketika Anda bisa sehingga orang lain tahu bahwa masalah ini terpecahkan.
Mgorven

Jawaban:

4

Anda tidak menyertakan opsi mount atau ekspor Anda, jadi ada sejumlah hal dengan NFS yang dapat memengaruhi kinerja. Saya akan merekomendasikan mencoba opsi berikut untuk kinerja dan keandalan NFS maksimum (berdasarkan pengalaman saya):

  • Opsi Mount: tcp,hard,intr,nfsvers=3,rsize=32768,wsize=32768

  • Opsi Ekspor: async

Christopher Cashell
sumber
Sebagai catatan, opsi mount di atas juga direkomendasikan oleh Oracle untuk menjalankan Oracle di NFS.
Christopher Cashell
saya juga dapat meningkatkan kinerja secara signifikan dengan tip di atas, namun nfsvers=3tidak perlu.
anarcat
@anarcat - Untuk rilis modern, Anda benar, nfsvers=3tidak masalah. Dudukan Linux NFS digunakan secara default ke NFS versi 2, kecuali jika Anda menentukan versi 3. Dalam kasus itu, sangat bermanfaat untuk secara eksplisit mengatur versi. Dalam rilis modern, mount akan dinegosiasikan, dimulai dengan v4, kemudian mencoba v3, kemudian jatuh kembali ke v2.
Christopher Cashell