GNU/Linux >> Tutoriales Linux >  >> Linux

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

unfs3 está muerto que yo sepa; Ganesha es el proyecto de servidor NFS de espacio de usuario más activo en este momento, aunque no está completamente maduro.

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

No he visto una comparación de rendimiento reciente.

Algunos otros problemas:

  • Las aplicaciones ordinarias buscan archivos por nombre de ruta, pero nfsd necesita poder buscarlos por identificador de archivo. 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 los núcleos más recientes han agregado name_to_handle_at(2) y open_by_handle_at(2) llamadas al sistema.
  • Me parece recordar que el bloqueo de llamadas de bloqueo de archivos es un problema; No estoy seguro de cómo los servidores de espacio de usuario los manejan en estos días. (¿Atas un subproceso del servidor esperando en el bloqueo o haces un sondeo?)
  • La semántica más nueva del sistema de archivos (cambiar atributos, delegaciones, compartir bloqueos) puede implementarse más fácilmente en el kernel primero (en teoría, en su mayoría aún no lo ha sido).
  • No desea tener que comprobar los permisos, las cuotas, etc., a mano; en su lugar, desea cambiar su uid y confiar en el código vfs común del kernel para hacerlo. Y Linux tiene una llamada al sistema (setfsuid(2) ) que debería hacer eso. Por razones que no recuerdo, creo que ha resultado ser más complicado de usar en servidores de lo que debería ser.

En general, las fortalezas de un servidor kernel son una mayor integración con el 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) viven principalmente en el espacio de usuario. Esos pueden ser exportados por el kernel nfsd usando FUSE, pero nuevamente, es posible que se requieran extensiones a las interfaces de FUSE para funciones más nuevas, y puede haber problemas de rendimiento.

Versión corta:¡buena pregunta!


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

El kernel 2.2.0 admite un servidor NFS experimental basado en kernel desarrollado por Olaf Kirch y desarrollado por H.J. Lu, G. Allan Morris y Trond Myklebust. La compatibilidad con NFS basada en kernel proporciona un impulso significativo en el rendimiento del servidor.

Creo que una vez que el servidor NFS se movió al núcleo para mejorar el rendimiento, nadie vio ninguna razón para sacarlo de nuevo.


Starnamer es correcto (yo fui 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 volvió a mirarlo.

Hay una serie de deficiencias al tener NFS en el kernel, una de las cuales es que no funciona bien con cualquier otra cosa que toque el mismo sistema de archivos (existen riesgos de corrupción muy desagradables), pero en ese entonces (1993-4) no No me doy cuenta de que resultaría ser un problema.

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


Linux
  1. El kernel de Linux:las 5 principales innovaciones

  2. Configuración de un servidor y cliente NFS en Scientific Linux 6.3

  3. Linux:¿por qué no hay un sistema de archivos Rootfs presente en el sistema?

  4. Linux:¿por qué el kernel no puede ejecutar Init?

  5. ¿Cómo iniciar el servidor Tomcat en Linux?

Analizar el kernel de Linux con ftrace

Cómo el kernel de Linux maneja las interrupciones

Pruebas de integración continua para el kernel de Linux

Configuración rápida del servidor NFS en el sistema Redhat 7 Linux

Cómo verificar la versión del kernel en Linux

¿Por qué proteger el kernel de Linux del usuario root?