Saya hanya ingin tahu mengapa server Linux NFS diimplementasikan di kernel sebagai lawan dari aplikasi userspace?
Saya tahu daemon userspace NFS ada, tetapi itu bukan metode standar untuk menyediakan layanan server NFS.
Saya akan berpikir bahwa menjalankan server NFS sebagai aplikasi userspace akan menjadi pendekatan yang disukai karena dapat memberikan keamanan tambahan dengan menjalankan daemon di userspace alih-alih kernel. Itu juga akan cocok dengan prinsip umum Linux untuk melakukan satu hal dan melakukannya dengan baik (dan daemon itu seharusnya tidak menjadi pekerjaan untuk kernel).
Kenyataannya satu-satunya keuntungan yang dapat saya pikirkan untuk berjalan di kernel adalah peningkatan kinerja dari pengalihan konteks (dan itu adalah alasan yang bisa diperdebatkan).
Jadi adakah alasan yang terdokumentasi mengapa ini diterapkan seperti itu? Saya mencoba mencari-cari tetapi tidak menemukan apa pun.
Tampaknya ada banyak kebingungan, harap dicatat saya tidak bertanya tentang pemasangan sistem file, saya bertanya tentang menyediakan sisi server dari sistem file jaringan . Ada perbedaan yang sangat berbeda. Mount sistem file secara lokal memerlukan dukungan untuk sistem file di kernel, asalkan tidak (mis. Samba atau unfs3).
unfs3
(yang merupakan server NFS) tanpa dukungan kernel untuk itu.Jawaban:
unfs3
sudah mati sejauh yang saya tahu; Ganesha adalah proyek server NFS userspace paling aktif saat ini, meskipun belum sepenuhnya matang.Meskipun melayani protokol yang berbeda, Samba adalah contoh server file yang berhasil yang beroperasi di userspace.
Saya belum melihat perbandingan kinerja terbaru.
Beberapa masalah lain:
nfsd
harus dapat mencarinya dengan filehandle. Ini rumit dan memerlukan dukungan dari sistem file (dan tidak semua sistem file dapat mendukungnya). Di masa lalu tidak mungkin melakukan ini dari userspace, tetapi kernel yang lebih baru telah ditambahkanname_to_handle_at(2)
danopen_by_handle_at(2)
panggilan sistem.setfsuid(2)
) yang harus melakukan itu. Untuk alasan yang saya lupa, saya pikir itu terbukti lebih rumit untuk digunakan di server daripada yang seharusnya.Secara umum, kekuatan server kernel adalah integrasi yang lebih dekat dengan vfs dan sistem file yang diekspor. Kita dapat menebusnya dengan menyediakan lebih banyak antarmuka kernel (seperti panggilan sistem filehandle), tetapi itu tidak mudah. Di sisi lain, beberapa sistem file yang orang ingin ekspor hari ini (seperti gluster) sebenarnya hidup terutama di userspace. Itu dapat diekspor oleh kernel nfsd menggunakan FUSE - tetapi sekali lagi ekstensi ke antarmuka FUSE mungkin diperlukan untuk fitur yang lebih baru, dan mungkin ada masalah kinerja.
Versi singkat: pertanyaan bagus!
sumber
unfs3
masih hidup dan pindah ke Github" ?Olaf Kirch awalnya mengembangkan ruang pengguna dan versi berbasis server NFS. Dalam bukunya tahun 2000, "Linux Network Administration" katanya:
Kernel 2.2.0 mendukung server NFS berbasis kernel eksperimental yang dikembangkan oleh Olaf Kirch dan dikembangkan lebih lanjut oleh HJ Lu, G. Allan Morris, dan Trond Myklebust. Dukungan NFS berbasis kernel memberikan dorongan signifikan dalam kinerja server.
Saya pikir begitu server NFS dipindahkan ke kernel untuk meningkatkan kinerja, tidak ada yang melihat alasan untuk mengeluarkannya lagi.
sumber
Starnamer benar (saya adalah salah satu penguji beta).
Menempatkannya di kernel adalah upaya untuk meningkatkan kinerja buruk (terutama untuk klien PCNFS) dan sekali masalah itu diselesaikan, tidak ada yang melihatnya lagi.
Ada sejumlah kekurangan dengan memiliki NFS di kernel, yang paling penting adalah bahwa ia tidak bermain dengan baik dengan apa pun yang menyentuh sistem file yang sama (ada risiko korupsi yang sangat buruk) tetapi saat itu (1993-4) kami tidak tidak menyadari bahwa itu akan menjadi masalah.
Kami lebih muda dan lebih bodoh, dll.
sumber