Pourquoi le serveur Linux NFS est-il implémenté dans le noyau par opposition à l'espace utilisateur?


33

Je me demandais simplement pourquoi le serveur NFS Linux est implémenté dans le noyau par opposition à une application en espace utilisateur?

Je connais un démon NFS en espace utilisateur , mais ce n'est pas la méthode standard pour fournir des services de serveur NFS.

Je penserais que l’exécution du serveur NFS en tant qu’application d’espace utilisateur serait l’approche privilégiée, car elle peut offrir une sécurité supplémentaire grâce à un démon exécuté dans l’espace utilisateur au lieu du noyau. Cela correspondrait aussi au principe commun de Linux de faire une chose et de bien le faire (et que les démons ne devraient pas être un travail pour le noyau).
En fait, le seul avantage que je peux penser à utiliser dans le noyau serait une amélioration des performances grâce au changement de contexte (et c'est une raison discutable).

Donc, y a-t-il une raison documentée pour laquelle il est mis en œuvre tel quel? J'ai essayé de chercher sur Google, mais je n'ai rien trouvé.


Il semble y avoir beaucoup de confusion. Notez que je ne pose pas de question sur le montage de systèmes de fichiers, mais sur la fourniture du côté serveur d’un système de fichiers réseau . Il y a une différence très nette. Monter un système de fichiers localement nécessite la prise en charge du système de fichiers dans le noyau, à condition que ce ne soit pas le cas (par exemple, Samba ou unfs3).


NFS est un système de fichiers. Les pilotes de système de fichiers en espace utilisateur doivent utiliser FUSE, dont les performances sont généralement médiocres.
Jordanie

@jordanm non, ils ne le font pas. En fait, vous ne pouvez pas exécuter de systèmes de fichiers réseau (NFS, CIFS / samba, coda, etc.) via FUSE. FUSE est conçu pour monter des systèmes de fichiers sur la machine locale, sans les servir.
Patrick

vous avez raison, ma déclaration ne s'appliquerait qu'au client.
Jordanie

@jordanm pas même malheureusement. Vous pouvez monter des systèmes de fichiers sans FUSE. FUSE est une technologie relativement nouvelle. Le côté client des systèmes de fichiers réseau existait bien avant FUSE :-). FUSE fournit simplement un moyen de prendre en charge les systèmes de fichiers non fournis par le noyau (n'essaie pas d'être méchant, j'espère juste pour dissiper les idées fausses :-P)
Patrick

2
@ StarNamer, vous parlez toujours du client. Je parle du serveur. Vous pouvez exécuter unfs3(ce qui est un serveur NFS) sans aucune prise en charge par le noyau.
Patrick

Réponses:


25

unfs3est mort autant que je sache; Ganesha est actuellement le projet de serveur NFS d'espace utilisateur le plus actif, bien qu'il ne soit pas complètement mature.

Bien qu'il serve différents protocoles, Samba est un exemple de serveur de fichiers performant opérant dans l'espace utilisateur.

Je n'ai pas vu de comparaison de performance récente.

Quelques autres problèmes:

  • Les applications ordinaires recherchent des fichiers par chemin, mais nfsddoivent pouvoir les rechercher par descripteur de fichier. Ceci est délicat et nécessite un support du système de fichiers (et tous les systèmes de fichiers ne peuvent pas le supporter). Dans le passé , il n'a pas été possible de le faire depuis l' espace utilisateur, mais les noyaux les plus récents ont ajouté name_to_handle_at(2)et open_by_handle_at(2)appels système.
  • Je semble me souvenir que le blocage des appels avec verrouillage de fichier est un problème; Je ne suis pas sûr de savoir comment les serveurs de l'espace utilisateur les gèrent ces jours-ci. (Est-ce que vous attachez un thread de serveur en attente sur le verrou, ou faites-vous une interrogation?)
  • Les sémantiques plus récentes du système de fichiers (attributs de modification, délégations, verrous de partage) peuvent être implémentées plus facilement dans le noyau en premier (en théorie - elles ne l’ont généralement pas encore été).
  • Vous ne voulez pas avoir à vérifier les autorisations, les quotas, etc., à la main - vous voulez changer votre identifiant d'utilisateur et vous fiez au code vfs du noyau commun pour le faire. Et Linux a un appel système ( setfsuid(2)) qui devrait le faire. Pour des raisons que j'oublie, je pense que l'utilisation de ce logiciel dans les serveurs s'est avérée plus compliquée qu'elle ne devrait l'être.

En général, les points forts d’un serveur de noyau sont une intégration plus étroite avec vfs et le système de fichiers exporté. Nous pouvons compenser cela en fournissant davantage d'interfaces noyau (telles que les appels système de descripteurs de fichiers), mais ce n'est pas facile. D'un autre côté, certains des systèmes de fichiers que les utilisateurs souhaitent exporter (comme le lustre) vivent essentiellement dans l'espace utilisateur. Celles-ci peuvent être exportées par le noyau nfsd à l'aide de FUSE - mais là encore, des extensions des interfaces FUSE peuvent être requises pour les nouvelles fonctionnalités et des problèmes de performances peuvent survenir.

Version courte: bonne question!


2
Les lecteurs doivent noter que Bruce est (un? Le?) Responsable du serveur NFS sous Linux, donc il sait probablement de quoi il parle. :)
Dan Pritts

@derfian FYI - vous pouvez commenter ici le fait que " unfs3est vivant et se déplace vers Github" ?
ms-ati

J'ai commenté ce qui précède parce que @derfian, ou l'utilisateur StackOverflow ( unix.stackexchange.com/users/23034/derfian ), est le responsable de l'unfs3, et a récemment annoncé qu'il n'était pas mort, par exemple dans ce commentaire sur Github
ms-ati

Pour écrit par un responsable NFS, cette réponse est assez vague.
Torsten Bronger

18

Olaf Kirch a à l'origine développé à la fois l'espace utilisateur et la version basée sur le noyau du serveur NFS. Dans son livre de l'an 2000, "Linux Network Administration", il écrit:

Le noyau 2.2.0 prend en charge un serveur NFS expérimental basé sur le noyau développé par Olaf Kirch et développé par HJ Lu, G. Allan Morris et Trond Myklebust. La prise en charge NFS basée sur le noyau augmente considérablement les performances du serveur.

Je pense qu'une fois que le serveur NFS a été déplacé dans le noyau pour améliorer les performances, personne n'a vu de raison de le supprimer à nouveau.


8

Starnamer est correct (j'étais l'un des bêta-testeurs).

Le placer dans le noyau visait à améliorer les performances abyssales (principalement pour les clients PCNFS) et, une fois ce problème résolu, personne ne l’a examiné à nouveau.

La présence de NFS dans le noyau présente plusieurs inconvénients, notamment le fait qu’il ne fonctionne pas correctement avec quoi que ce soit qui touche le même système de fichiers (il existe de sérieux risques de corruption), mais à l’époque (1993-1994), nous ne l’avions pas fait. 'réalisez pas que cela deviendrait un problème.

Nous étions plus jeunes et plus fous, etc.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.