Saya menggunakan Openfiler 2.3 pada HP ML370 G5, Smart Array P400, disk SAS yang dikombinasikan menggunakan RAID 1 + 0.
Saya mengatur share NFS dari partisi ext3 menggunakan konfigurasi berbasis web Openfiler, dan saya berhasil me-mount share dari host lain. Kedua host terhubung menggunakan tautan gigabit khusus.
Tolok ukur sederhana menggunakan dd
:
$ dd if=/dev/zero of=outfile bs=1000 count=2000000
2000000+0 records in
2000000+0 records out
2000000000 bytes (2.0 GB) copied, 34.4737 s, 58.0 MB/s
Saya melihatnya dapat mencapai kecepatan transfer moderat (58,0 MB / s).
Tetapi jika saya menyalin direktori yang berisi banyak file kecil ( .php
dan .jpg
, sekitar 1-4 kB per file) dengan ukuran total ~ 300 MB, cp
prosesnya berakhir sekitar 10 menit.
Apakah NFS tidak cocok untuk transfer file kecil seperti kasus di atas? Atau adakah beberapa parameter yang harus disesuaikan?
performance
nfs
Arie K
sumber
sumber
Jawaban:
Ada banyak alasan mengapa mentransfer banyak file kecil akan selalu lebih lambat daripada mentransfer satu file besar. Untuk dibaca, file-file tersebut cenderung tersebar di sekitar disk, sehingga membutuhkan semua tempat untuk mendapatkannya. Seperti yang disebutkan Evan, ada juga metadata yang terlibat dalam kasus NFS (atau sistem file lainnya!) Yang juga memperumit masalah.
Anda dapat mencoba meningkatkan
rsize
danwsize
parameter Anda ke mount NFS dan melihat apakah itu akan sedikit membantu kinerja. Juga periksa pertanyaan ini pada penyetelan NFS untuk latensi minimum karena memiliki banyak saran bermanfaat yang akan membantu dalam kasus banyak transfer file kecil.sumber
Saya tidak memiliki banyak pengalaman NFS, tetapi pengalaman saya dengan protokol berbagi file jaringan lainnya mengatakan bahwa kinerja menderita dalam skenario "banyak file kecil" hampir secara universal. Anda mengalami latensi bolak-balik, dan lebih dari satu grup besar file yang ditambahkan latensi.
sumber
Sudahkah Anda mencoba dengan sistem file yang berbeda, seperti XFS? Ini menyelesaikan semua masalah saya ketika melakukan sejumlah besar transfer blok iSCSI kecil. Tidak tahu kenapa.
Selain itu, iSCSI / NFS biasanya dikonfigurasikan untuk kerangka data yang cukup besar (bingkai jumbo dll), mungkin akan merugikan Anda jika Anda menyalin file kecil satu per satu. Mungkin tar'ing dan kemudian mentransfer akan membantu Anda.
sumber
Periksa apakah Anda menggunakan koneksi TCP ( mount -t nfs -o tcp host: / mount / target ). Kinerja pada sistem modern tidak akan terpengaruh, tetapi IO kecil dapat meningkat secara signifikan jika jaringan Anda dimuat.
Dan Anda juga harus mencoba beberapa sistem file lain; ext3 pada dasarnya adalah yang paling lambat. Solid, terkenal, tetapi cukup tidak cocok untuk server file. XFS jauh lebih baik, dan reiserf juga jauh lebih baik di IO kecil.
sumber
Jika Anda ingin mentransfer pohon direktori besar file kecil melalui NFS, dan Anda dapat masuk ke server, cara terbaik untuk melakukannya adalah dengan membuat file tar yang secara otomatis diekstraksi pada klien, sebagai berikut:
tar c mydirectory | ssh user @ host tar -xf - -C destdir
Dengan cara itu hanya satu "file" yang ditransfer di jaringan dan Anda segera memiliki semua file Anda di host.
sumber
Hanya untuk menambah jawaban Evan, Anda juga memiliki semua overhead untuk membuat metadata (entri direktori, dll.) Untuk setiap file yang Anda salin.
sumber
Solusi serupa dengan jawaban Chris adalah rsync file Anda ke klien secara berkala. Jika Anda ingin membuat perubahan dua arah, Anda juga bisa menggunakan secara bersamaan.
sumber
Masalahnya adalah bahwa bagian Anda diekspor dengan
sync
opsi (default). Gunakanasync
untuk mempercepat menulis jauh. Lihat nfs.sourceforge.net/nfs-howto/ar01s05.htmlsumber