¿Por qué se implementa el servidor NFS de Linux en el núcleo en lugar del espacio de usuario?

33

Me preguntaba por qué el servidor NFS de Linux se implementa en el kernel en lugar de una aplicación de espacio de usuario.

Sé que existe un demonio NFS de espacio de usuario , pero no es el método estándar para proporcionar servicios de servidor NFS.

Pensaría que ejecutar el servidor NFS como una aplicación de espacio de usuario sería el enfoque preferido ya que puede proporcionar seguridad adicional al ejecutar un demonio en el espacio de usuario en lugar del núcleo. También encajaría con el principio común de Linux de hacer una cosa y hacerlo bien (y que los demonios no deberían ser un trabajo para el núcleo).
De hecho, el único beneficio que puedo pensar en ejecutar en el kernel sería un aumento del rendimiento por el cambio de contexto (y esa es una razón discutible).

Entonces, ¿hay alguna razón documentada por la que se implementa de la manera en que está? Intenté buscar en Google pero no pude encontrar nada.


Parece haber mucha confusión, tenga en cuenta que no estoy preguntando sobre el montaje de sistemas de archivos, sino sobre proporcionar el lado del servidor de un sistema de archivos de red . Hay una diferencia muy distinta. Montar un sistema de archivos localmente requiere soporte para el sistema de archivos en el núcleo, siempre que no lo haga (por ejemplo, samba o unfs3).

Patricio
fuente
NFS es un sistema de archivos. Los controladores del sistema de archivos del espacio de usuario tienen que usar FUSE, que generalmente es pobre para el rendimiento.
jordanm
@jordanm no, no lo hacen. De hecho, no puede ejecutar sistemas de archivos de red (NFS, CIFS / samba, coda, etc.) a través de FUSE. FUSE está diseñado para montar sistemas de archivos en la máquina local, no para servirlos.
Patrick
tienes razón, mi declaración solo se aplicaría al cliente.
jordanm
@jordanm ni siquiera eso desafortunadamente. Puede montar sistemas de archivos sin FUSE. FUSE es una tecnología relativamente nueva de todos modos, el lado del cliente de los sistemas de archivos de red existía mucho antes de que FUSE :-). FUSE solo proporciona una forma de admitir sistemas de archivos no proporcionados por el núcleo (no tratando de ser malo, solo esperando aclarar conceptos erróneos :-P)
Patrick
2
@StarNamer todavía estás hablando del cliente. Estoy hablando del servidor. Puede ejecutar unfs3(que es un servidor NFS) sin ningún soporte de kernel para ello.
Patrick

Respuestas:

25

unfs3está muerto hasta donde yo sé; Ganesha es el proyecto de servidor NFS de espacio de usuario más activo en este momento, aunque no está completamente maduro.

Aunque sirve diferentes protocolos, Samba es un ejemplo de un servidor de archivos exitoso que opera en el espacio de usuario.

No he visto una comparación de rendimiento reciente.

Algunos otros problemas:

  • Las aplicaciones ordinarias buscan archivos por nombre de ruta, pero nfsddeben poder buscarlos mediante el controlador de archivos. Esto es complicado y requiere soporte del sistema de archivos (y no todos los sistemas de archivos pueden soportarlo). En el pasado no era posible hacer esto desde el espacio de usuario, pero se agregaron núcleos más recientes name_to_handle_at(2)y open_by_handle_at(2)llamadas al sistema.
  • Me parece recordar que bloquear las llamadas de bloqueo de archivos es un problema; No estoy seguro de cómo los manejan los servidores de espacio de usuario en estos días. (¿Ata un hilo del servidor que espera en la cerradura o realiza una encuesta?)
  • La semántica más reciente del sistema de archivos (cambiar atributos, delegaciones, compartir bloqueos) puede implementarse más fácilmente en el núcleo primero (en teoría, en su mayoría aún no lo han sido).
  • No desea tener que verificar los permisos, las cuotas, etc. a mano, en cambio, desea cambiar su uid y confiar en el código vfs del núcleo común para hacerlo. Y Linux tiene una llamada al sistema ( setfsuid(2)) que debería hacer eso. Por razones que olvido, creo que ha resultado ser más complicado de usar en los servidores de lo que debería ser.

En general, los puntos fuertes de un servidor kernel son una integración más estrecha con vfs y el sistema de archivos exportado. Podemos compensar eso proporcionando más interfaces de kernel (como las llamadas al sistema de manejo de archivos), pero eso no es fácil. Por otro lado, algunos de los sistemas de archivos que la gente quiere exportar en estos días (como Gluster) en realidad viven principalmente en el espacio del usuario. Esos pueden ser exportados por el kernel nfsd usando FUSE, pero nuevamente las extensiones de las interfaces FUSE pueden ser necesarias para las funciones más nuevas, y puede haber problemas de rendimiento.

Versión corta: buena pregunta!

J. Bruce Fields
fuente
2
Los lectores deben tener en cuenta que Bruce es (a? The?) Mantenedor del servidor linux NFS, por lo que presumiblemente sabe de lo que está hablando. :)
Dan Pritts
@derfian FYI: ¿puede comentar aquí en el sentido de que " unfs3está vivo y se muda a Github" ?
ms-ati
Comenté lo anterior porque @derfian, o usuario de StackOverflow ( unix.stackexchange.com/users/23034/derfian ), es el mantenedor de unfs3, y recientemente anuncié que no estaba muerto, por ejemplo en este comentario de Github
ms-ati
Para escrito por un mantenedor de NFS, esta respuesta es bastante vaga.
Torsten Bronger
18

Olaf Kirch desarrolló originalmente tanto el espacio de usuario como la versión basada en el núcleo del servidor NFS. En su libro del año 2000, "Linux Network Administration", dice:

El núcleo 2.2.0 admite un servidor NFS experimental basado en el núcleo desarrollado por Olaf Kirch y desarrollado por HJ Lu, G. Allan Morris y Trond Myklebust. El soporte NFS basado en el núcleo proporciona un impulso significativo en el rendimiento del servidor.

Creo que una vez que el servidor NFS se trasladó al núcleo para mejorar el rendimiento, nadie vio ninguna razón para volver a sacarlo.

StarNamer
fuente
8

Starnamer es correcto (yo era uno de los probadores beta).

Ponerlo en el kernel fue un intento de mejorar el rendimiento abismal (principalmente para los clientes PCNFS) y una vez que se resolvió ese problema, nadie lo miró de nuevo.

Hay una serie de deficiencias al tener NFS en el kernel, entre ellas, que no funciona muy bien con nada que toque el mismo sistema de archivos (existen riesgos de corrupción muy desagradables) pero en aquel entonces (1993-4) no lo hicimos No te das cuenta de que resultaría ser un problema.

Éramos más jóvenes y más tontos, etc. etc.

stoatwblr
fuente