GNU/Linux >> Linux Esercitazione >  >> Linux

Perché il server Linux NFS è implementato nel kernel anziché nello spazio utente?

unfs3 è morto per quanto ne so; Ganesha è il progetto di server NFS in spazio utente più attivo in questo momento, anche se non è completamente maturo.

Sebbene serva diversi protocolli, Samba è un esempio di un file server di successo che opera nello spazio utente.

Non ho visto un confronto delle prestazioni recente.

Alcuni altri problemi:

  • Le normali applicazioni cercano i file per percorso, ma nfsd deve essere in grado di cercarli tramite filehandle. Questo è complicato e richiede il supporto del filesystem (e non tutti i filesystem possono supportarlo). In passato non era possibile farlo dallo spazio utente, ma i kernel più recenti hanno aggiuntoname_to_handle_at(2) e open_by_handle_at(2) chiamate di sistema.
  • Mi sembra di ricordare che il blocco delle chiamate di blocco dei file fosse un problema; Non sono sicuro di come i server dello spazio utente li gestiscano oggigiorno. (Leghi un thread del server in attesa sul blocco o esegui il polling?)
  • La semantica del file system più recente (cambia attributi, deleghe, blocchi di condivisione) può essere implementata più facilmente prima nel kernel (in teoria, per lo più non lo sono ancora).
  • Non vuoi dover controllare manualmente i permessi, le quote, ecc., invece vuoi cambiare il tuo uid e affidarti al comune codice vfs del kernel per farlo. E Linux ha una chiamata di sistema (setfsuid(2) ) che dovrebbe farlo. Per ragioni che non ricordo, penso che si sia dimostrato più complicato da usare nei server di quanto dovrebbe essere.

In generale, i punti di forza di un server kernel sono una più stretta integrazione con vfs e il filesystem esportato. Possiamo rimediare fornendo più interfacce kernel (come le chiamate di sistema al filehandle), ma non è facile. D'altra parte, alcuni dei filesystem che le persone vogliono esportare in questi giorni (come gluster) in realtà vivono principalmente nello spazio utente. Questi possono essere esportati dal kernel nfsd usando FUSE, ma anche in questo caso potrebbero essere necessarie estensioni alle interfacce FUSE per nuove funzionalità e potrebbero esserci problemi di prestazioni.

Versione breve:bella domanda!


Olaf Kirch originariamente sviluppò sia lo spazio utente che la versione basata sul kernel del server NFS. Nel suo libro del 2000, "Linux Network Administration", dice:

Il kernel 2.2.0 supporta un server NFS sperimentale basato su kernel sviluppato da Olaf Kirch e ulteriormente sviluppato da HJ ​​Lu, G. Allan Morris e Trond Myklebust. Il supporto NFS basato su kernel fornisce un significativo aumento delle prestazioni del server.

Penso che una volta che il server NFS è stato spostato nel kernel per migliorare le prestazioni, nessuno ha visto alcun motivo per eliminarlo di nuovo.


Starnamer ha ragione (ero uno dei beta tester).

L'inserimento nel kernel è stato un tentativo di migliorare le prestazioni spaventose (principalmente per i client PCNFS) e una volta risolto il problema, nessuno ci ha pensato più.

Ci sono una serie di carenze nell'avere NFS nel kernel, non ultimo il fatto che non funziona bene con nient'altro che tocchi lo stesso filesystem (ci sono gravi rischi di corruzione) ma allora (1993-4) non lo facevamo non mi rendo conto che si sarebbe rivelato un problema.

Eravamo più giovani e più sciocchi, ecc ecc.


Linux
  1. Configurazione di un server e client NFS su Scientific Linux 6.3

  2. Perché il server ha bloccato il mio IP?

  3. Linux – Partecipare alla mailing list del kernel?

  4. Modifica la versione del kernel su un server cloud Linux utilizzando la modalità di ripristino

  5. come avviare il server Tomcat in Linux?

Come il kernel Linux gestisce gli interrupt

Come controllare la versione del kernel in Linux

Perché il kernel dovrebbe eliminare i pacchetti?

Linux:perché il kernel non può eseguire Init?

Cosa rende fondamentale un server Linux del kernel?

Perché la funzione di chiusura si chiama release in `struct file_operations` nel kernel di Linux?