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).
unfs3
(que es un servidor NFS) sin ningún soporte de kernel para ello.Respuestas:
unfs3
está 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:
nfsd
deben 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 recientesname_to_handle_at(2)
yopen_by_handle_at(2)
llamadas 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!
fuente
unfs3
está vivo y se muda a Github" ?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.
fuente
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.
fuente